11.0.0
This commit is contained in:
@@ -73,81 +73,124 @@ class decort_disk(DecortController):
|
||||
else:
|
||||
self.check_amodule_args_for_create()
|
||||
|
||||
def compare_iotune_params(self, new_iotune: dict, current_iotune: dict):
|
||||
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 != current_value:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def limit_io(self, aparam_limit_io: dict):
|
||||
self.sdk_checkmode(self.api.cloudapi.disks.limit_io)(
|
||||
disk_id=self.disk_id,
|
||||
read_bytes_sec_max=(aparam_limit_io.get('read_bytes_sec_max')),
|
||||
read_bytes_sec=(aparam_limit_io.get('read_bytes_sec')),
|
||||
read_iops_sec_max=(aparam_limit_io.get('read_iops_sec_max')),
|
||||
read_iops_sec=(aparam_limit_io.get('read_iops_sec')),
|
||||
size_iops_sec=(aparam_limit_io.get('size_iops_sec')),
|
||||
total_bytes_sec_max=(aparam_limit_io.get('total_bytes_sec_max')),
|
||||
total_bytes_sec=(aparam_limit_io.get('total_bytes_sec')),
|
||||
total_iops_sec_max=(aparam_limit_io.get('total_iops_sec_max')),
|
||||
total_iops_sec=(aparam_limit_io.get('total_iops_sec')),
|
||||
write_bytes_sec_max=(aparam_limit_io.get('write_bytes_sec_max')),
|
||||
write_bytes_sec=(aparam_limit_io.get('write_bytes_sec')),
|
||||
write_iops_sec_max=(aparam_limit_io.get('write_iops_sec_max')),
|
||||
write_iops_sec=(aparam_limit_io.get('write_iops_sec')),
|
||||
)
|
||||
|
||||
def create(self):
|
||||
self.disk_id = self.disk_create(
|
||||
accountId=self.acc_id,
|
||||
name = self.amodule.params['name'],
|
||||
description=self.amodule.params['description'],
|
||||
size=self.amodule.params['size'],
|
||||
sep_id=self.amodule.params['sep_id'],
|
||||
pool=self.amodule.params['pool'],
|
||||
self.disk_id = self.sdk_checkmode(self.api.cloudapi.disks.create)(
|
||||
account_id=self.acc_id,
|
||||
name=self.amodule.params['name'],
|
||||
size_gb=self.amodule.params['size'],
|
||||
storage_policy_id=self.aparams['storage_policy_id'],
|
||||
description=self.amodule.params['description'],
|
||||
sep_id=self.amodule.params['sep_id'],
|
||||
sep_pool_name=self.amodule.params['pool'],
|
||||
)
|
||||
#IO tune
|
||||
if self.amodule.params['limitIO']:
|
||||
self.disk_limitIO(disk_id=self.disk_id,
|
||||
limits=self.amodule.params['limitIO'])
|
||||
aparam_limit_io: dict[str, int | None] = self.amodule.params['limitIO']
|
||||
self.limit_io(aparam_limit_io=aparam_limit_io)
|
||||
#set share status
|
||||
if self.amodule.params['shareable']:
|
||||
self.disk_share(self.disk_id,self.amodule.params['shareable'])
|
||||
self.sdk_checkmode(self.api.cloudapi.disks.share)(
|
||||
disk_id=self.disk_id,
|
||||
)
|
||||
return
|
||||
|
||||
def action(self,restore=False):
|
||||
|
||||
#restore never be done
|
||||
if restore:
|
||||
self.disk_restore(self.disk_id)
|
||||
self.sdk_checkmode(self.api.cloudapi.disks.restore)(
|
||||
disk_id=self.disk_id,
|
||||
)
|
||||
#rename if id present
|
||||
if (
|
||||
self.amodule.params['name'] is not None
|
||||
and self.amodule.params['name'] != self.disk_info['name']
|
||||
):
|
||||
self.disk_rename(disk_id=self.disk_id,
|
||||
name=self.amodule.params['name'])
|
||||
self.rename()
|
||||
#resize
|
||||
if (
|
||||
self.amodule.params['size'] is not None
|
||||
and self.amodule.params['size'] != self.disk_info['sizeMax']
|
||||
):
|
||||
self.disk_resize(self.disk_info,self.amodule.params['size'])
|
||||
self.sdk_checkmode(self.api.cloudapi.disks.resize2)(
|
||||
disk_id=self.disk_id,
|
||||
disk_size_gb=self.amodule.params['size'],
|
||||
)
|
||||
#IO TUNE
|
||||
if self.amodule.params['limitIO']:
|
||||
clean_io = [param for param in self.amodule.params['limitIO'] \
|
||||
if self.amodule.params['limitIO'][param] == None]
|
||||
for key in clean_io: del self.amodule.params['limitIO'][key]
|
||||
if self.amodule.params['limitIO'] != self.disk_info['iotune']:
|
||||
self.disk_limitIO(self.disk_id,self.amodule.params['limitIO'])
|
||||
aparam_limit_io: dict[str, int | None] = self.amodule.params['limitIO']
|
||||
if aparam_limit_io:
|
||||
if not self.compare_iotune_params(
|
||||
new_iotune=aparam_limit_io,
|
||||
current_iotune=self.disk_info['iotune'],
|
||||
):
|
||||
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']:
|
||||
self.disk_share(self.disk_id,self.amodule.params['shareable'])
|
||||
if self.amodule.params['shareable'] != self.disk_info['shareable']:
|
||||
if self.amodule.params['shareable']:
|
||||
self.sdk_checkmode(self.api.cloudapi.disks.share)(
|
||||
disk_id=self.disk_id,
|
||||
)
|
||||
else:
|
||||
self.sdk_checkmode(self.api.cloudapi.disks.unshare)(
|
||||
disk_id=self.disk_id,
|
||||
)
|
||||
|
||||
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']
|
||||
):
|
||||
self.disk_change_storage_policy(
|
||||
self.sdk_checkmode(self.api.ca.disks.change_disk_storage_policy)(
|
||||
disk_id=self.disk_id,
|
||||
storage_policy_id=aparam_storage_policy_id,
|
||||
)
|
||||
|
||||
return
|
||||
|
||||
|
||||
def delete(self):
|
||||
self.disk_delete(disk_id=self.disk_id,
|
||||
detach=self.amodule.params['force_detach'],
|
||||
permanently=self.amodule.params['permanently'],
|
||||
reason=self.amodule.params['reason'])
|
||||
self.sdk_checkmode(self.api.cloudapi.disks.delete)(
|
||||
disk_id=self.disk_id,
|
||||
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)
|
||||
return
|
||||
|
||||
def rename(self):
|
||||
|
||||
|
||||
self.disk_rename(diskId = self.disk_id,
|
||||
name = self.amodule.params['name'])
|
||||
self.disk_info['name'] = self.amodule.params['name']
|
||||
self.sdk_checkmode(self.api.cloudapi.disks.rename)(
|
||||
disk_id=self.disk_id,
|
||||
name=self.amodule.params['name'],
|
||||
)
|
||||
return
|
||||
|
||||
def nop(self):
|
||||
@@ -194,6 +237,8 @@ class decort_disk(DecortController):
|
||||
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
|
||||
|
||||
@@ -240,6 +285,7 @@ class decort_disk(DecortController):
|
||||
),
|
||||
limitIO=dict(
|
||||
type='dict',
|
||||
apply_defaults=True,
|
||||
options=dict(
|
||||
total_bytes_sec=dict(
|
||||
type='int',
|
||||
@@ -290,10 +336,6 @@ class decort_disk(DecortController):
|
||||
type='bool',
|
||||
default=False,
|
||||
),
|
||||
reason=dict(
|
||||
type='str',
|
||||
default='Managed by Ansible decort_disk',
|
||||
),
|
||||
state=dict(
|
||||
type='str',
|
||||
default='present',
|
||||
@@ -379,57 +421,60 @@ class decort_disk(DecortController):
|
||||
|
||||
return not check_errors
|
||||
|
||||
def main():
|
||||
decon = decort_disk()
|
||||
amodule = decon.amodule
|
||||
#
|
||||
#Full range of Disk status is as follows:
|
||||
#
|
||||
# "ASSIGNED","MODELED", "CREATING","CREATED","DELETED", "DESTROYED","PURGED",
|
||||
#
|
||||
if decon.disk_id:
|
||||
#disk exist
|
||||
if decon.disk_info['status'] in ["MODELED", "CREATING"]:
|
||||
decon.result['failed'] = True
|
||||
decon.result['changed'] = False
|
||||
decon.result['msg'] = ("No change can be done for existing Disk ID {} because of its current "
|
||||
"status '{}'").format(decon.disk_id, decon.disk_info['status'])
|
||||
# "ASSIGNED","CREATED","DELETED","PURGED", "DESTROYED"
|
||||
elif decon.disk_info['status'] in ["ASSIGNED","CREATED"]:
|
||||
if amodule.params['state'] == 'absent':
|
||||
decon.delete()
|
||||
elif amodule.params['state'] == 'present':
|
||||
decon.action()
|
||||
elif decon.disk_info['status'] in ["PURGED", "DESTROYED"]:
|
||||
#re-provision disk
|
||||
if amodule.params['state'] in ('present'):
|
||||
decon.create()
|
||||
else:
|
||||
decon.nop()
|
||||
elif decon.disk_info['status'] == "DELETED":
|
||||
if amodule.params['state'] in ('present'):
|
||||
decon.action(restore=True)
|
||||
elif (amodule.params['state'] == 'absent' and
|
||||
amodule.params['permanently']):
|
||||
decon.delete()
|
||||
else:
|
||||
decon.nop()
|
||||
else:
|
||||
# preexisting Disk was not found
|
||||
if amodule.params['state'] == 'absent':
|
||||
decon.nop()
|
||||
@DecortController.handle_sdk_exceptions
|
||||
def run(self):
|
||||
#
|
||||
#Full range of Disk status is as follows:
|
||||
#
|
||||
# "ASSIGNED","MODELED", "CREATING","CREATED","DELETED", "DESTROYED","PURGED",
|
||||
#
|
||||
amodule = self.amodule
|
||||
if self.disk_id:
|
||||
#disk exist
|
||||
if self.disk_info['status'] in ["MODELED", "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'])
|
||||
# "ASSIGNED","CREATED","DELETED","PURGED", "DESTROYED"
|
||||
elif self.disk_info['status'] in ["ASSIGNED","CREATED"]:
|
||||
if amodule.params['state'] == 'absent':
|
||||
self.delete()
|
||||
elif amodule.params['state'] == 'present':
|
||||
self.action()
|
||||
elif self.disk_info['status'] in ["PURGED", "DESTROYED"]:
|
||||
#re-provision disk
|
||||
if amodule.params['state'] in ('present'):
|
||||
self.create()
|
||||
else:
|
||||
self.nop()
|
||||
elif self.disk_info['status'] == "DELETED":
|
||||
if amodule.params['state'] in ('present'):
|
||||
self.action(restore=True)
|
||||
elif (amodule.params['state'] == 'absent' and
|
||||
amodule.params['permanently']):
|
||||
self.delete()
|
||||
else:
|
||||
self.nop()
|
||||
else:
|
||||
decon.create()
|
||||
# preexisting Disk was not found
|
||||
if amodule.params['state'] == 'absent':
|
||||
self.nop()
|
||||
else:
|
||||
self.create()
|
||||
|
||||
if decon.result['failed']:
|
||||
amodule.fail_json(**decon.result)
|
||||
else:
|
||||
if decon.result['changed']:
|
||||
_, decon.disk_info = decon.disk_find(decon.disk_id)
|
||||
decon.result['facts'] = decon.package_facts(amodule.check_mode)
|
||||
amodule.exit_json(**decon.result)
|
||||
if self.result['failed']:
|
||||
amodule.fail_json(**self.result)
|
||||
else:
|
||||
if self.result['changed']:
|
||||
_, self.disk_info = self.disk_find(self.disk_id)
|
||||
self.result['facts'] = self.package_facts(amodule.check_mode)
|
||||
amodule.exit_json(**self.result)
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
def main():
|
||||
decort_disk().run()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
#SHARE
|
||||
|
||||
Reference in New Issue
Block a user