| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 1 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 2 | # you may not use this file except in compliance with the License. |
| 3 | # You may obtain a copy of the License at |
| 4 | # |
| 5 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 6 | # |
| 7 | # Unless required by applicable law or agreed to in writing, software |
| 8 | # distributed under the License is distributed on an "AS IS" BASIS, |
| 9 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 10 | # See the License for the specific language governing permissions and |
| 11 | # limitations under the License. |
| 12 | |
| 13 | *** Settings *** |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 14 | Documentation [HEAL-02] Healing of scaled charm VDUs |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 15 | |
| 16 | Library OperatingSystem |
| 17 | Library String |
| 18 | Library Collections |
| 19 | Library Process |
| 20 | Library SSHLibrary |
| 21 | |
| 22 | Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnfd_lib.robot |
| 23 | Resource %{ROBOT_DEVOPS_FOLDER}/lib/vnf_lib.robot |
| 24 | Resource %{ROBOT_DEVOPS_FOLDER}/lib/nsd_lib.robot |
| 25 | Resource %{ROBOT_DEVOPS_FOLDER}/lib/ns_lib.robot |
| 26 | Resource %{ROBOT_DEVOPS_FOLDER}/lib/ssh_lib.robot |
| 27 | Resource %{ROBOT_DEVOPS_FOLDER}/lib/openstack_lib.robot |
| 28 | |
| garciadeblas | d7f75d7 | 2022-06-25 18:38:32 +0200 | [diff] [blame] | 29 | Force Tags heal_02 cluster_heal daily |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 30 | |
| 31 | |
| 32 | Suite Teardown Run Keyword And Ignore Error Suite Cleanup |
| 33 | |
| 34 | |
| 35 | *** Variables *** |
| 36 | # NS and VNF descriptor package folder and ids |
| 37 | ${vnfd_volumes_pkg} several_volumes_vnf |
| 38 | ${vnfd_volumes_name} several_volumes-vnf |
| 39 | ${vdu_volumes_name} several_volumes-VM |
| 40 | ${vnf_several_index} several_volumes_vnf |
| 41 | ${vnfd_charm_pkg} charm-packages/native_manual_scale_charm_vnf |
| 42 | ${vnfd_charm_name} native_manual_scale_charm-vnf |
| 43 | ${vdu_charm_name} mgmtVM |
| 44 | ${vnf_charm_index} charm_vnf |
| 45 | ${vnf_charm_scaling_group} manual-scaling_mgmtVM |
| 46 | ${vnf_charm_cloudinit_file} /root/helloworld.txt |
| 47 | ${vnf_charm_day1_file} /home/ubuntu/first-touch |
| 48 | ${nsd_pkg} volumes_nativecharm_ns |
| 49 | ${nsd_name} volumes_nativecharm-ns |
| 50 | |
| 51 | # NS instance name and configuration |
| Gabriel Cuba | 8f994cc | 2023-05-12 13:44:16 -0500 | [diff] [blame] | 52 | ${flavor_name} osm.heal_02 |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 53 | ${ns_name} heal_02 |
| garciadeblas | f01b9a4 | 2023-06-02 14:43:43 +0200 | [diff] [blame] | 54 | ${ns_timeout} 6min |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 55 | ${scale_wait_time} 4min |
| 56 | |
| 57 | # SSH keys and username to be used |
| 58 | ${publickey} %{HOME}/.ssh/id_rsa.pub |
| 59 | ${privatekey} %{HOME}/.ssh/id_rsa |
| 60 | ${username} ubuntu |
| 61 | ${password} ${EMPTY} |
| 62 | |
| 63 | ${success_return_code} 0 |
| 64 | |
| aguilard | bd91f86 | 2022-12-20 15:13:02 +0000 | [diff] [blame] | 65 | @{vim_vdus} @{EMPTY} |
| 66 | @{vim_volumes} @{EMPTY} |
| 67 | |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 68 | |
| 69 | *** Test Cases *** |
| 70 | Create VNF Descriptors |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 71 | Create VNFD '%{PACKAGES_FOLDER}/${vnfd_charm_pkg}' |
| 72 | Create VNFD '%{PACKAGES_FOLDER}/${vnfd_volumes_pkg}' |
| 73 | |
| 74 | |
| 75 | Create NS Descriptor |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 76 | Create NSD '%{PACKAGES_FOLDER}/${nsd_pkg}' |
| 77 | |
| 78 | |
| Gabriel Cuba | 8f994cc | 2023-05-12 13:44:16 -0500 | [diff] [blame] | 79 | Create Test Flavor |
| 80 | ${id}= Create Flavor ${flavor_name} |
| 81 | Set Suite Variable ${flavor_id} ${id} |
| 82 | |
| 83 | |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 84 | Network Service Instance Test |
| Gabriel Cuba | 8f994cc | 2023-05-12 13:44:16 -0500 | [diff] [blame] | 85 | ${ns_config}= Set Variable {vld: [ {name: mgmtnet, vim-network-name: %{VIM_MGMT_NET}}],vnf: [ {member-vnf-index: charm_vnf, vdu: [{ id: mgmtVM, vim-flavor-id: ${flavor_id}}]}] } |
| garciadeblas | f01b9a4 | 2023-06-02 14:43:43 +0200 | [diff] [blame] | 86 | ${id}= Create Network Service ${nsd_name} %{VIM_TARGET} ${ns_name} ${ns_config} ${publickey} ${ns_timeout} |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 87 | Set Suite Variable ${ns_id} ${id} |
| 88 | |
| 89 | |
| 90 | Get NS Id |
| Mark Beierl | 5871033 | 2022-08-03 14:14:14 -0400 | [diff] [blame] | 91 | [Tags] cleanup |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 92 | ${variables} Get Variables |
| 93 | IF not "\${ns_id}" in "${variables}" |
| 94 | ${id}= Get Ns Id ${ns_name} |
| 95 | Set Suite Variable ${ns_id} ${id} |
| 96 | END |
| 97 | |
| 98 | |
| 99 | Scale Out Charm VNF |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 100 | ${vnf_id}= Get Vnf Id ${ns_id} ${vnf_charm_index} |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 101 | Set Suite Variable ${vnf_charm_id} ${vnf_id} |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 102 | @{vdur_list}= Get Vnf Vdur Names ${vnf_charm_id} |
| 103 | ${vdurs}= Get Length ${vdur_list} |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 104 | Set Suite Variable ${initial_vdur_count} ${vdurs} |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 105 | Execute Manual VNF Scale ${ns_name} ${vnf_charm_index} ${vnf_charm_scaling_group} SCALE_OUT ${scale_wait_time} |
| 106 | @{vdur_list}= Get Vnf Vdur Names ${vnf_charm_id} |
| 107 | ${vdurs}= Get Length ${vdur_list} |
| aguilard | 1032025 | 2022-07-01 12:06:41 +0000 | [diff] [blame] | 108 | Run Keyword If ${vdurs} != ${initial_vdur_count} + 1 Fail msg=There is no new VDU records in the VNF after Scale Out |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 109 | |
| 110 | |
| aguilard | bd91f86 | 2022-12-20 15:13:02 +0000 | [diff] [blame] | 111 | Get VIM Objects |
| 112 | Variable Should Exist ${ns_id} msg=NS is not available |
| 113 | @{vnf_id_list}= Get Ns Vnf List ${ns_id} |
| garciadeblas | 321726f | 2022-12-21 11:43:06 +0100 | [diff] [blame] | 114 | Log ${vnf_id_list} |
| aguilard | bd91f86 | 2022-12-20 15:13:02 +0000 | [diff] [blame] | 115 | FOR ${vnf_id} IN @{vnf_id_list} |
| garciadeblas | 321726f | 2022-12-21 11:43:06 +0100 | [diff] [blame] | 116 | Log ${vnf_id} |
| aguilard | bd91f86 | 2022-12-20 15:13:02 +0000 | [diff] [blame] | 117 | ${id}= Get VNF VIM ID ${vnf_id} |
| 118 | @{vdu_ids}= Split String ${id} |
| 119 | Append To List ${vim_vdus} @{vdu_ids} |
| 120 | END |
| 121 | FOR ${vdu_id} IN @{vim_vdus} |
| 122 | ${volumes_attached}= Get Server Property ${vdu_id} volumes_attached |
| 123 | ${match}= Get Regexp Matches ${volumes_attached} '([0-9a-f\-]+)' 1 |
| 124 | IF ${match} != @{EMPTY} |
| 125 | IF not "${match}[0]" in "@{vim_volumes}" |
| 126 | Append To List ${vim_volumes} ${match}[0] |
| 127 | END |
| 128 | END |
| 129 | END |
| garciadeblas | 321726f | 2022-12-21 11:43:06 +0100 | [diff] [blame] | 130 | Log Many @{vim_vdus} |
| 131 | Log Many @{vim_volumes} |
| aguilard | bd91f86 | 2022-12-20 15:13:02 +0000 | [diff] [blame] | 132 | |
| 133 | |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 134 | Get Charm VNF Info |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 135 | Variable Should Exist ${ns_id} msg=NS is not available |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 136 | ${variables} Get Variables |
| 137 | IF not "\${vnf_charm_id}" in "${variables}" |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 138 | ${vnf_id}= Get Vnf Id ${ns_id} ${vnf_charm_index} |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 139 | Set Suite Variable ${vnf_charm_id} ${vnf_id} |
| 140 | END |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 141 | ${id}= Get VNF VIM ID ${vnf_charm_id} |
| 142 | @{vdu_charm_ids}= Split String ${id} |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 143 | Set Suite Variable @{vdu_charm_ids} @{vdu_charm_ids} |
| garciadeblas | 321726f | 2022-12-21 11:43:06 +0100 | [diff] [blame] | 144 | Log ${vdu_charm_ids}[1] |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 145 | @{charm_ip_list}= Get Vnf Vdur IPs ${vnf_charm_id} |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 146 | Set Suite Variable @{charm_ip_list} @{charm_ip_list} |
| 147 | |
| 148 | |
| aguilard | 8f18bfd | 2022-06-22 10:44:20 +0000 | [diff] [blame] | 149 | Halt Charm VDU |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 150 | Variable Should Exist @{vdu_charm_ids} msg=VDU is not available |
| aguilard | 8f18bfd | 2022-06-22 10:44:20 +0000 | [diff] [blame] | 151 | Halt Server ${vdu_charm_ids}[1] |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 152 | Sleep 15 |
| 153 | |
| 154 | |
| 155 | Heal Charm VDU |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 156 | Variable Should Exist ${vnf_charm_id} msg=VNF is not available |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 157 | Heal Network Service ${ns_id} --vnf ${vnf_charm_id} --cause "Heal VM of charm_vnf" --vdu ${vdu_charm_name} --count-index 1 --run-day1 |
| 158 | |
| 159 | |
| 160 | Check VNF After Healing |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 161 | Variable Should Exist ${vnf_charm_id} msg=VNF is not available |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 162 | |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 163 | @{ip_list}= Get Vnf Vdur IPs ${vnf_charm_id} |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 164 | Should Be Equal ${ip_list} ${charm_ip_list} IP addresses have changed after healing |
| 165 | |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 166 | ${id}= Get VNF VIM ID ${vnf_charm_id} |
| 167 | @{ids}= Split String ${id} |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 168 | Should Be Equal ${vdu_charm_ids}[0] ${ids}[0] VDU[0] id has changed after healing |
| 169 | Should Not Be Equal ${vdu_charm_ids}[1] ${ids}[1] VDU[1] id has not changed after healing |
| 170 | Should Be Equal ${vdu_charm_ids}[2] ${ids}[2] VDU[2] id has changed after healing |
| 171 | |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 172 | ${ip}= Get Vdu Attribute ${vnf_charm_id} ip-address 1 |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 173 | ${stdout}= Execute Remote Command Check Rc Return Output ${ip} ${username} ${password} ${privatekey} sudo ls ${vnf_charm_cloudinit_file} |
| garciadeblas | 321726f | 2022-12-21 11:43:06 +0100 | [diff] [blame] | 174 | Log ${stdout} |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 175 | Check If remote File Exists ${ip} ${username} ${password} ${privatekey} ${vnf_charm_day1_file} |
| Gabriel Cuba | 8f994cc | 2023-05-12 13:44:16 -0500 | [diff] [blame] | 176 | ${vim_info}= Get Vdu Attribute ${vnf_charm_id} vim_info |
| 177 | Should Contain ${vim_info} flavor: {id: ${flavor_id}, msg=Flavor ID is incorrect |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 178 | |
| 179 | |
| aguilard | bd91f86 | 2022-12-20 15:13:02 +0000 | [diff] [blame] | 180 | Update VIM Objects |
| 181 | Variable Should Exist ${ns_id} msg=NS is not available |
| 182 | @{vdu_updated}= Create List |
| 183 | @{vnf_id_list}= Get Ns Vnf List ${ns_id} |
| 184 | FOR ${vnf_id} IN @{vnf_id_list} |
| 185 | ${id}= Get VNF VIM ID ${vnf_id} |
| 186 | @{vdu_ids}= Split String ${id} |
| 187 | Append To List ${vdu_updated} @{vdu_ids} |
| 188 | FOR ${id} IN @{vdu_ids} |
| 189 | IF not "${id}" in "@{vim_vdus}" |
| 190 | Append To List ${vim_vdus} ${id} |
| 191 | END |
| 192 | END |
| 193 | END |
| 194 | FOR ${vdu_id} IN @{vdu_updated} |
| 195 | ${volumes_attached}= Get Server Property ${vdu_id} volumes_attached |
| 196 | ${match}= Get Regexp Matches ${volumes_attached} '([0-9a-f\-]+)' 1 |
| 197 | IF ${match} != @{EMPTY} |
| 198 | IF not "${match}[0]" in "@{vim_volumes}" |
| 199 | Append To List ${vim_volumes} ${match}[0] |
| 200 | END |
| 201 | END |
| 202 | END |
| garciadeblas | 321726f | 2022-12-21 11:43:06 +0100 | [diff] [blame] | 203 | Log Many @{vim_vdus} |
| 204 | Log Many @{vim_volumes} |
| aguilard | bd91f86 | 2022-12-20 15:13:02 +0000 | [diff] [blame] | 205 | |
| 206 | |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 207 | Delete NS Instance |
| 208 | [Tags] cleanup |
| 209 | Delete NS ${ns_name} |
| 210 | |
| 211 | |
| 212 | Delete NS Descriptor |
| 213 | [Tags] cleanup |
| 214 | Delete NSD ${nsd_name} |
| 215 | |
| 216 | |
| 217 | Delete VNF Descriptors |
| 218 | [Tags] cleanup |
| 219 | Delete VNFD ${vnfd_volumes_name} |
| 220 | Delete VNFD ${vnfd_charm_name} |
| 221 | |
| 222 | |
| aguilard | bd91f86 | 2022-12-20 15:13:02 +0000 | [diff] [blame] | 223 | Delete Objects in VIM |
| 224 | [Tags] cleanup |
| 225 | ${error}= Set Variable 0 |
| 226 | FOR ${vol_id} IN @{vim_volumes} |
| garciadeblas | 321726f | 2022-12-21 11:43:06 +0100 | [diff] [blame] | 227 | Log Checking if volume ${vol_id} is still in VIM |
| aguilard | bd91f86 | 2022-12-20 15:13:02 +0000 | [diff] [blame] | 228 | ${exists}= Check If Volume Exists ${vol_id} |
| 229 | IF ${exists}!=0 |
| 230 | ${error}= Set Variable 1 |
| garciadeblas | 321726f | 2022-12-21 11:43:06 +0100 | [diff] [blame] | 231 | Log Deleting volume ${vol_id} |
| aguilard | bd91f86 | 2022-12-20 15:13:02 +0000 | [diff] [blame] | 232 | Run Keyword And Ignore Error Delete Volume ${vol_id} |
| 233 | END |
| 234 | END |
| 235 | FOR ${vdu_id} IN @{vim_vdus} |
| garciadeblas | 321726f | 2022-12-21 11:43:06 +0100 | [diff] [blame] | 236 | Log Checking if server ${vdu_id} is still in VIM |
| aguilard | bd91f86 | 2022-12-20 15:13:02 +0000 | [diff] [blame] | 237 | ${status}= Run Keyword And Ignore Error Get Server Property ${vdu_id} id |
| garciadeblas | 321726f | 2022-12-21 11:43:06 +0100 | [diff] [blame] | 238 | Log ${status}[0] |
| aguilard | bd91f86 | 2022-12-20 15:13:02 +0000 | [diff] [blame] | 239 | IF '${status}[0]' == 'PASS' |
| 240 | ${error}= Set Variable 1 |
| garciadeblas | 321726f | 2022-12-21 11:43:06 +0100 | [diff] [blame] | 241 | Log Deleting server ${vdu_id} |
| aguilard | bd91f86 | 2022-12-20 15:13:02 +0000 | [diff] [blame] | 242 | Run Keyword And Ignore Error Delete Server ${vdu_id} |
| 243 | END |
| 244 | END |
| 245 | IF ${error}==1 |
| 246 | Fail Some objects created by test were not deleted in VIM |
| 247 | END |
| 248 | |
| 249 | |
| Gabriel Cuba | 8f994cc | 2023-05-12 13:44:16 -0500 | [diff] [blame] | 250 | Delete flavor |
| 251 | Delete Flavor ${flavor_id} |
| 252 | |
| 253 | |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 254 | *** Keywords *** |
| 255 | Suite Cleanup |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 256 | [Documentation] Test Suit Cleanup: Deleting Descriptor, instance and vim |
| aguilard | 845c2ea | 2022-04-08 09:36:03 +0000 | [diff] [blame] | 257 | |
| garciadeblas | f4ebaa8 | 2022-06-23 13:33:26 +0200 | [diff] [blame] | 258 | Run Keyword If Any Tests Failed Delete NS ${ns_name} |
| 259 | Run Keyword If Any Tests Failed Delete NSD ${nsd_name} |
| 260 | Run Keyword If Any Tests Failed Delete VNFD ${vnfd_volumes_name} |
| 261 | Run Keyword If Any Tests Failed Delete VNFD ${vnfd_charm_name} |
| aguilard | bd91f86 | 2022-12-20 15:13:02 +0000 | [diff] [blame] | 262 | Run Keyword If Any Tests Failed Delete Objects in VIM |
| Gabriel Cuba | 8f994cc | 2023-05-12 13:44:16 -0500 | [diff] [blame] | 263 | Run Keyword If Any Tests Failed Delete Flavor ${flavor_id} |