12.0.0
This commit is contained in:
@@ -58,6 +58,7 @@ class decort_disk(DecortController):
|
||||
name=arg_amodule.params['name'] if "name" in arg_amodule.params else "",
|
||||
account_id=self.acc_id,
|
||||
check_state=False,
|
||||
fail_if_not_found=False,
|
||||
)
|
||||
|
||||
if arg_amodule.params['place_with']:
|
||||
@@ -67,18 +68,30 @@ class decort_disk(DecortController):
|
||||
self.disk_id = validated_disk_id
|
||||
self.disk_info = validated_disk_facts
|
||||
|
||||
if self.disk_id:
|
||||
self.acc_id = validated_disk_facts['accountId']
|
||||
if self.disk_id and self.disk_info.status not in [
|
||||
sdk_types.DiskStatus.DESTROYED,
|
||||
sdk_types.DiskStatus.PURGED,
|
||||
]:
|
||||
self.acc_id = validated_disk_facts.account_id
|
||||
self.check_amodule_args_for_change()
|
||||
else:
|
||||
elif (
|
||||
self.amodule.params['state'] == 'present'
|
||||
and not arg_amodule.params['id']
|
||||
):
|
||||
self.check_amodule_args_for_create()
|
||||
|
||||
def compare_iotune_params(self, new_iotune: dict, current_iotune: dict):
|
||||
def compare_iotune_params(
|
||||
self,
|
||||
new_iotune: dict,
|
||||
current_iotune: sdk_types.IOTuneAPIResultNM,
|
||||
):
|
||||
io_fields = sdk_types.IOTuneAPIResultNM.model_fields.keys()
|
||||
|
||||
for field in io_fields:
|
||||
new_value = new_iotune.get(field)
|
||||
current_value = current_iotune.get(field)
|
||||
if new_value is None:
|
||||
continue
|
||||
current_value = getattr(current_iotune, field, None)
|
||||
|
||||
if new_value != current_value:
|
||||
return False
|
||||
@@ -115,7 +128,11 @@ class decort_disk(DecortController):
|
||||
)
|
||||
#IO tune
|
||||
aparam_limit_io: dict[str, int | None] = self.amodule.params['limitIO']
|
||||
self.limit_io(aparam_limit_io=aparam_limit_io)
|
||||
if (
|
||||
aparam_limit_io
|
||||
and any(value is not None for value in aparam_limit_io.values())
|
||||
):
|
||||
self.limit_io(aparam_limit_io=aparam_limit_io)
|
||||
#set share status
|
||||
if self.amodule.params['shareable']:
|
||||
self.sdk_checkmode(self.api.cloudapi.disks.share)(
|
||||
@@ -133,13 +150,13 @@ class decort_disk(DecortController):
|
||||
#rename if id present
|
||||
if (
|
||||
self.amodule.params['name'] is not None
|
||||
and self.amodule.params['name'] != self.disk_info['name']
|
||||
and self.amodule.params['name'] != self.disk_info.name
|
||||
):
|
||||
self.rename()
|
||||
#resize
|
||||
if (
|
||||
self.amodule.params['size'] is not None
|
||||
and self.amodule.params['size'] != self.disk_info['sizeMax']
|
||||
and self.amodule.params['size'] != self.disk_info.size_max_gb
|
||||
):
|
||||
self.sdk_checkmode(self.api.cloudapi.disks.resize2)(
|
||||
disk_id=self.disk_id,
|
||||
@@ -147,16 +164,19 @@ class decort_disk(DecortController):
|
||||
)
|
||||
#IO TUNE
|
||||
aparam_limit_io: dict[str, int | None] = self.amodule.params['limitIO']
|
||||
if aparam_limit_io:
|
||||
if (
|
||||
aparam_limit_io
|
||||
and any(value is not None for value in aparam_limit_io.values())
|
||||
):
|
||||
if not self.compare_iotune_params(
|
||||
new_iotune=aparam_limit_io,
|
||||
current_iotune=self.disk_info['iotune'],
|
||||
current_iotune=self.disk_info.io_tune,
|
||||
):
|
||||
self.limit_io(aparam_limit_io=aparam_limit_io)
|
||||
|
||||
#share check/update
|
||||
#raise Exception(self.amodule.params['shareable'])
|
||||
if self.amodule.params['shareable'] != self.disk_info['shareable']:
|
||||
if self.amodule.params['shareable'] != self.disk_info.shared:
|
||||
if self.amodule.params['shareable']:
|
||||
self.sdk_checkmode(self.api.cloudapi.disks.share)(
|
||||
disk_id=self.disk_id,
|
||||
@@ -169,7 +189,7 @@ class decort_disk(DecortController):
|
||||
aparam_storage_policy_id = self.aparams['storage_policy_id']
|
||||
if (
|
||||
aparam_storage_policy_id is not None
|
||||
and aparam_storage_policy_id != self.disk_info['storage_policy_id']
|
||||
and aparam_storage_policy_id != self.disk_info.storage_policy_id
|
||||
):
|
||||
self.sdk_checkmode(self.api.ca.disks.change_disk_storage_policy)(
|
||||
disk_id=self.disk_id,
|
||||
@@ -183,7 +203,7 @@ class decort_disk(DecortController):
|
||||
detach=self.amodule.params['force_detach'],
|
||||
permanently=self.amodule.params['permanently'],
|
||||
)
|
||||
self.disk_id, self.disk_info = self._disk_get_by_id(self.disk_id)
|
||||
self.disk_info = self._disk_get_by_id(disk_id=self.disk_id)
|
||||
return
|
||||
|
||||
def rename(self):
|
||||
@@ -199,7 +219,7 @@ class decort_disk(DecortController):
|
||||
self.result['changed'] = False
|
||||
if self.disk_id:
|
||||
self.result['msg'] = ("No state change required for Disk ID {} because of its "
|
||||
"current status '{}'.").format(self.disk_id, self.disk_info['status'])
|
||||
"current status '{}'.").format(self.disk_id, self.disk_info.status)
|
||||
else:
|
||||
self.result['msg'] = ("No state change to '{}' can be done for "
|
||||
"non-existent Disk.").format(self.amodule.params['state'])
|
||||
@@ -219,28 +239,7 @@ class decort_disk(DecortController):
|
||||
if check_mode or self.disk_info is None:
|
||||
return ret_dict
|
||||
|
||||
# remove io param with zero value
|
||||
clean_io = [param for param in self.disk_info['iotune'] if self.disk_info['iotune'][param] == 0]
|
||||
for key in clean_io: del self.disk_info['iotune'][key]
|
||||
|
||||
ret_dict['id'] = self.disk_info['id']
|
||||
ret_dict['name'] = self.disk_info['name']
|
||||
ret_dict['size'] = self.disk_info['sizeMax']
|
||||
ret_dict['state'] = self.disk_info['status']
|
||||
ret_dict['account_id'] = self.disk_info['accountId']
|
||||
ret_dict['sep_id'] = self.disk_info['sepId']
|
||||
ret_dict['pool'] = self.disk_info['pool']
|
||||
ret_dict['computes'] = self.disk_info['computes']
|
||||
ret_dict['gid'] = self.disk_info['gid']
|
||||
ret_dict['iotune'] = self.disk_info['iotune']
|
||||
ret_dict['size_available'] = self.disk_info['sizeAvailable']
|
||||
ret_dict['size_used'] = self.disk_info['sizeUsed']
|
||||
ret_dict['storage_policy_id'] = self.disk_info['storage_policy_id']
|
||||
ret_dict['to_clean'] = self.disk_info['to_clean']
|
||||
ret_dict['cache_mode'] = self.disk_info['cache']
|
||||
ret_dict['blkdiscard'] = self.disk_info['blkdiscard']
|
||||
|
||||
return ret_dict
|
||||
return self.disk_info.model_dump()
|
||||
|
||||
@property
|
||||
def amodule_init_args(self) -> dict:
|
||||
@@ -391,8 +390,8 @@ class decort_disk(DecortController):
|
||||
aparam_storage_policy_id = self.aparams['storage_policy_id']
|
||||
if (
|
||||
aparam_storage_policy_id is not None
|
||||
and aparam_storage_policy_id
|
||||
not in self.acc_info['storage_policy_ids']
|
||||
and aparam_storage_policy_id
|
||||
not in self.acc_info.storage_policy_ids
|
||||
):
|
||||
check_errors = True
|
||||
self.message(
|
||||
@@ -431,24 +430,24 @@ class decort_disk(DecortController):
|
||||
amodule = self.amodule
|
||||
if self.disk_id:
|
||||
#disk exist
|
||||
if self.disk_info['status'] in ["MODELED", "CREATING"]:
|
||||
if self.disk_info.status in [sdk_types.DiskStatus.MODELED, sdk_types.DiskStatus.CREATING]:
|
||||
self.result['failed'] = True
|
||||
self.result['changed'] = False
|
||||
self.result['msg'] = ("No change can be done for existing Disk ID {} because of its current "
|
||||
"status '{}'").format(self.disk_id, self.disk_info['status'])
|
||||
"status '{}'").format(self.disk_id, self.disk_info.status)
|
||||
# "ASSIGNED","CREATED","DELETED","PURGED", "DESTROYED"
|
||||
elif self.disk_info['status'] in ["ASSIGNED","CREATED"]:
|
||||
elif self.disk_info.status in [sdk_types.DiskStatus.CREATED, sdk_types.DiskStatus.ASSIGNED]:
|
||||
if amodule.params['state'] == 'absent':
|
||||
self.delete()
|
||||
elif amodule.params['state'] == 'present':
|
||||
self.action()
|
||||
elif self.disk_info['status'] in ["PURGED", "DESTROYED"]:
|
||||
elif self.disk_info.status in [sdk_types.DiskStatus.PURGED, sdk_types.DiskStatus.DESTROYED]:
|
||||
#re-provision disk
|
||||
if amodule.params['state'] in ('present'):
|
||||
self.create()
|
||||
else:
|
||||
self.nop()
|
||||
elif self.disk_info['status'] == "DELETED":
|
||||
elif self.disk_info.status == sdk_types.DiskStatus.DELETED:
|
||||
if amodule.params['state'] in ('present'):
|
||||
self.action(restore=True)
|
||||
elif (amodule.params['state'] == 'absent' and
|
||||
@@ -459,8 +458,24 @@ class decort_disk(DecortController):
|
||||
else:
|
||||
# preexisting Disk was not found
|
||||
if amodule.params['state'] == 'absent':
|
||||
self.nop()
|
||||
else:
|
||||
self.exit()
|
||||
|
||||
if (
|
||||
(
|
||||
amodule.params['state'] == 'present'
|
||||
or amodule.params['state'] is None
|
||||
)
|
||||
and amodule.params['id']
|
||||
):
|
||||
self.message(
|
||||
f'Disk with ID {amodule.params['id']} not found.'
|
||||
)
|
||||
self.exit(fail=True)
|
||||
|
||||
if (
|
||||
amodule.params['state'] == 'present'
|
||||
and not amodule.params['id']
|
||||
):
|
||||
self.create()
|
||||
|
||||
if self.result['failed']:
|
||||
|
||||
Reference in New Issue
Block a user