3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
16 # author: Alfonso Tierno
17 # Script that uses the test NBI URL to clean database. See usage
21 echo -e "usage: $0 [OPTIONS]"
22 echo -e "TEST NBI API is used to clean database content, except admin users,projects and roles. Useful for testing."
23 echo -e "NOTE: database is cleaned but not the content of other modules as RO or VCA that must be cleaned manually."
25 echo -e " -h --help: show this help"
26 echo -e " -f --force: Do not ask for confirmation"
27 echo -e " --completely: It cleans also admin user/project and roles. It only works for internal" \
28 "authentication. NBI will need to be restarted to init database"
29 echo -e " --clean-RO: clean RO content. RO client (openmano) must be installed and configured"
30 echo -e " --clean-VCA: clean VCA content. juju must be installed and configured"
31 echo -e " ENV variable 'OSMNBI_URL' is used for the URL of the NBI server. If missing, it uses" \
32 "'https://\$OSM_HOSTNAME:9999/osm'. If 'OSM_HOSTNAME' is missing, localhost is used"
37 # ask to the user and parse a response among 'y', 'yes', 'n' or 'no'. Case insensitive.
38 # Params: $1 text to ask; $2 Action by default, can be 'y' for yes, 'n' for no, other or empty for not allowed.
39 # Return: true(0) if user type 'yes'; false (1) if user type 'no'
40 read -e -p "$1" USER_CONFIRMATION
42 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'y' ] && return 0
43 [ -z "$USER_CONFIRMATION" ] && [ "$2" == 'n' ] && return 1
44 [ "${USER_CONFIRMATION,,}" == "yes" ] ||
[ "${USER_CONFIRMATION,,}" == "y" ] && return 0
45 [ "${USER_CONFIRMATION,,}" == "no" ] ||
[ "${USER_CONFIRMATION,,}" == "n" ] && return 1
46 read -e -p "Please type 'yes' or 'no': " USER_CONFIRMATION
55 ( [ "$option" == -h ] ||
[ "$option" == --help ] ) && usage
&& exit
56 ( [ "$option" == -f ] ||
[ "$option" == --force ] ) && OSMNBI_CLEAN_FORCE
=yes && continue
57 [ "$option" == --completely ] && OSMNBI_COMPLETELY
=yes && continue
58 [ "$option" == --clean-RO ] && OSMNBI_CLEAN_RO
=yes && continue
59 [ "$option" == --clean-VCA ] && OSMNBI_CLEAN_VCA
=yes && continue
60 echo "Unknown option '$option'. Type $0 --help" 2>&1 && exit 1
64 [ -n "$OSMNBI_CLEAN_FORCE" ] || ask_user
"Clean database content (y/N)?" n ||
exit
65 [ -z "$OSM_HOSTNAME" ] && OSM_HOSTNAME
=localhost
66 [ -z "$OSMNBI_URL" ] && OSMNBI_URL
="https://${OSM_HOSTNAME}:9999/osm"
68 if [ -n "$OSMNBI_CLEAN_RO" ]
70 export OPENMANO_TENANT
=osm
71 for dc in `openmano datacenter-list | awk '{print $1}'`
73 export OPENMANO_DATACENTER
=$dc
74 for i
in instance-scenario scenario vnf
76 for f
in `openmano $i-list | awk '{print $1}'`
78 [[ -n "$f" ]] && [[ "$f" != No
]] && openmano
${i}-delete -f ${f}
84 for item
in vim_accounts wim_accounts sdns nsrs vnfrs nslcmops nsds vnfds pdus nsts nsis nsilcmops
# vims
86 curl
--insecure ${OSMNBI_URL}/test
/db-clear
/${item}
88 curl
--insecure ${OSMNBI_URL}/test
/fs-clear
89 if [ -n "$OSMNBI_COMPLETELY" ] ; then
90 # delete all users. It will only works for internal backend
91 curl
--insecure ${OSMNBI_URL}/test
/db-clear
/users
92 curl
--insecure ${OSMNBI_URL}/test
/db-clear
/projects
93 curl
--insecure ${OSMNBI_URL}/test
/db-clear
/roles
96 [[ -z "$OSM_USER" ]] && OSM_USER
=admin
97 [[ -z "$OSM_PASSWORD" ]] && OSM_PASSWORD
=admin
98 [[ -z "$OSM_PROJECT" ]] && OSM_PROJECT
=admin
100 TOKEN
=`curl --insecure -H "Content-Type: application/yaml" -H "Accept: application/yaml" \
101 --data "{username: '$OSM_USER', password: '$OSM_PASSWORD', project_id: '$OSM_PROJECT'}" \
102 ${OSMNBI_URL}/admin/v1/tokens 2>/dev/null | awk '($1=="_id:"){print $2}'`;
103 echo "TOKEN='$TOKEN'"
105 echo "delete users, prujects,roles. Ignore response errors due that own user,project cannot be deleted"
106 for topic
in users projects roles
108 elements
=`curl --insecure ${OSMNBI_URL}/admin/v1/$topic -H "Authorization: Bearer $TOKEN" \
109 -H "Accept: application/yaml" 2>/dev/null | awk '($1=="_id:"){print $2};($2=="_id:"){print $3}'`;
110 for element
in $elements
112 # not needed to check if own user, project, etc; because OSM will deny deletion
113 echo deleting
$topic _id
=$element
114 curl
--insecure ${OSMNBI_URL}/admin
/v
1/$topic/$element -H "Authorization: Bearer $TOKEN" \
115 -H "Accept: application/yaml" -X DELETE
2>/dev
/null
120 if [ -n "$OSMNBI_CLEAN_RO" ]
122 for dc in `openmano datacenter-list | awk '{print $1}'` ; do openmano datacenter-detach
$dc ; done
123 for dc in `openmano datacenter-list --all | awk '{print $1}'` ; do openmano datacenter-delete
-f $dc ; done
124 for dc in `openmano sdn-controller-list | awk '{print $1}'` ; do openmano sdn-controller-delete
-f $dc ; done
125 for dc in `openmano wim-list | awk '{print $1}'` ; do openmano wim-detach
$dc ; done
126 for dc in `openmano wim-list --all | awk '{print $1}'` ; do openmano wim-delete
-f $dc ; done
129 if [ -n "$OSMNBI_CLEAN_VCA" ]
131 for juju_model
in `juju models | grep lxd | grep -v controller | grep -v default | awk '{print$1}'`
134 echo juju destroy-model
$juju_model
135 juju destroy-model
-y $juju_model
137 # juju destroy-model -y default
138 # juju add-model default