diff --git a/library/decort_kvmvm.py b/library/decort_kvmvm.py index 1ee2dae..ebdf0a5 100644 --- a/library/decort_kvmvm.py +++ b/library/decort_kvmvm.py @@ -570,8 +570,22 @@ class decort_kvmvm(DecortController): start_on_create=start_compute) self.comp_should_exist = True - # Need to re-read comp_info after VM was provisioned - _, self.comp_info, _ = self.compute_find(self.comp_id) + # Originally we would have had to re-read comp_info after VM was provisioned + # _, self.comp_info, _ = self.compute_find(self.comp_id) + + # However, to avoid extra call to compute/get API we need to construct comp_info so that + # the below calls to compute_networks and compute_data_disks work properly. + # + # Here we are imitating comp_info structure as if it has been returned by a real call + # to API compute/get + self.comp_info = { + 'id': self.comp_id, + 'accountId': self.acc_id, + 'status': "ENABLED", + 'techStatus': "STOPPED", + 'interfaces': [], # new compute instance is created network-less + 'disks': [], # new compute instance is created without any data disks attached + } # # Compute was created diff --git a/module_utils/decort_utils.py b/module_utils/decort_utils.py index 4aba567..be8b4d8 100644 --- a/module_utils/decort_utils.py +++ b/module_utils/decort_utils.py @@ -2273,16 +2273,15 @@ class DecortController(object): return 0, None elif disk_name != "": if account_id > 0: - api_params = dict(accountId=account_id, - name=disk_name, - showAll=False) # we do not want to see disks in DESTROYED, PURGED or invalid states - api_resp = self.decort_api_call(requests.post, "/restmachine/cloudapi/disks/search", api_params) + api_params = dict(accountId=account_id) + api_resp = self.decort_api_call(requests.post, "/restmachine/cloudapi/disks/list", api_params) # the above call may return more than one matching disk disks_list = json.loads(api_resp.content.decode('utf8')) for runner in disks_list: - # return first disk on this list that fulfills status matching rule - if not check_state or ret_disk_facts['status'] not in DISK_INVALID_STATES: - return runner['id'], runner + # return the first disk of the specified name that fulfills status matching rule + if runner['name'] == disk_name: + if not check_state or runner['status'] not in DISK_INVALID_STATES: + return runner['id'], runner else: return 0, None else: # we are missing meaningful account_id - fail the module