11.0.0
This commit is contained in:
@@ -365,102 +365,106 @@ class decort_vins(DecortController):
|
||||
# 4) if ViNS exists: check desired state, desired configuration -> initiate action(s) accordingly
|
||||
# 5) report result to Ansible
|
||||
|
||||
def main():
|
||||
decon = decort_vins()
|
||||
amodule = decon.amodule
|
||||
#
|
||||
# Initial validation of module arguments is complete
|
||||
#
|
||||
# At this point non-zero vins_id means that we will be managing pre-existing ViNS
|
||||
# Otherwise we are about to create a new one as follows:
|
||||
# - if validated_rg_id is non-zero, create ViNS @ RG level
|
||||
# - if validated_rg_id is zero, create ViNS @ account level
|
||||
#
|
||||
# When managing existing ViNS we need to account for both "static" and "transient"
|
||||
# status. Full range of ViNS statii is as follows:
|
||||
#
|
||||
# "MODELED", "CREATED", "ENABLED", "ENABLING", "DISABLED", "DISABLING", "DELETED", "DELETING", "DESTROYED", "DESTROYING"
|
||||
#
|
||||
# if cconfig_save is true, only config save without other updates
|
||||
vins_should_exist = False
|
||||
@DecortController.handle_sdk_exceptions
|
||||
def run(self):
|
||||
amodule = self.amodule
|
||||
#
|
||||
# Initial validation of module arguments is complete
|
||||
#
|
||||
# At this point non-zero vins_id means that we will be managing pre-existing ViNS
|
||||
# Otherwise we are about to create a new one as follows:
|
||||
# - if validated_rg_id is non-zero, create ViNS @ RG level
|
||||
# - if validated_rg_id is zero, create ViNS @ account level
|
||||
#
|
||||
# When managing existing ViNS we need to account for both "static" and "transient"
|
||||
# status. Full range of ViNS statii is as follows:
|
||||
#
|
||||
# "MODELED", "CREATED", "ENABLED", "ENABLING", "DISABLED", "DISABLING", "DELETED", "DELETING", "DESTROYED", "DESTROYING"
|
||||
#
|
||||
# if cconfig_save is true, only config save without other updates
|
||||
vins_should_exist = False
|
||||
|
||||
if decon.vins_id:
|
||||
vins_should_exist = True
|
||||
if decon.vins_facts['status'] in ["MODELED", "DISABLING", "ENABLING", "DELETING", "DESTROYING"]:
|
||||
# error: nothing can be done to existing ViNS in the listed statii regardless of
|
||||
# the requested state
|
||||
decon.result['failed'] = True
|
||||
decon.result['changed'] = False
|
||||
decon.result['msg'] = ("No change can be done for existing ViNS ID {} because of its current "
|
||||
"status '{}'").format(decon.vins_id, decon.vins_facts['status'])
|
||||
elif decon.vins_facts['status'] == "DISABLED":
|
||||
if amodule.params['state'] == 'absent':
|
||||
decon.delete()
|
||||
vins_should_exist = False
|
||||
elif amodule.params['state'] in ('present', 'disabled'):
|
||||
# update ViNS, leave in disabled state
|
||||
decon.action()
|
||||
elif amodule.params['state'] == 'enabled':
|
||||
# update ViNS and enable
|
||||
decon.action('enabled')
|
||||
elif decon.vins_facts['status'] in ["CREATED", "ENABLED"]:
|
||||
if amodule.params['state'] == 'absent':
|
||||
decon.delete()
|
||||
vins_should_exist = False
|
||||
elif amodule.params['state'] in ('present', 'enabled'):
|
||||
# update ViNS
|
||||
decon.action()
|
||||
elif amodule.params['state'] == 'disabled':
|
||||
# disable and update ViNS
|
||||
decon.action('disabled')
|
||||
elif decon.vins_facts['status'] == "DELETED":
|
||||
if amodule.params['state'] in ['present', 'enabled']:
|
||||
# restore and enable
|
||||
decon.action(restore=True)
|
||||
vins_should_exist = True
|
||||
elif amodule.params['state'] == 'absent':
|
||||
# destroy permanently
|
||||
if decon.amodule.params['permanently']:
|
||||
decon.delete()
|
||||
vins_should_exist = False
|
||||
elif amodule.params['state'] == 'disabled':
|
||||
decon.error()
|
||||
vins_should_exist = False
|
||||
elif decon.vins_facts['status'] == "DESTROYED":
|
||||
if amodule.params['state'] in ('present', 'enabled'):
|
||||
# need to re-provision ViNS;
|
||||
decon.create()
|
||||
vins_should_exist = True
|
||||
elif amodule.params['state'] == 'absent':
|
||||
decon.nop()
|
||||
vins_should_exist = False
|
||||
elif amodule.params['state'] == 'disabled':
|
||||
decon.error()
|
||||
else:
|
||||
# Preexisting ViNS was not found.
|
||||
vins_should_exist = False # we will change it back to True if ViNS is created or restored
|
||||
# If requested state is 'absent' - nothing to do
|
||||
if amodule.params['state'] == 'absent':
|
||||
decon.nop()
|
||||
elif amodule.params['state'] in ('present', 'enabled'):
|
||||
decon.check_amodule_argument('vins_name')
|
||||
# as we already have account ID and RG ID we can create ViNS and get vins_id on success
|
||||
decon.create()
|
||||
if self.vins_id:
|
||||
vins_should_exist = True
|
||||
elif amodule.params['state'] == 'disabled':
|
||||
decon.error()
|
||||
#
|
||||
# conditional switch end - complete module run
|
||||
#
|
||||
if decon.result['failed']:
|
||||
amodule.fail_json(**decon.result)
|
||||
else:
|
||||
# prepare ViNS facts to be returned as part of decon.result and then call exit_json(...)
|
||||
if decon.result['changed']:
|
||||
_, decon.vins_facts = decon.vins_find(decon.vins_id)
|
||||
decon.result['facts'] = decon.package_facts(amodule.check_mode)
|
||||
amodule.exit_json(**decon.result)
|
||||
if self.vins_facts['status'] in ["MODELED", "DISABLING", "ENABLING", "DELETING", "DESTROYING"]:
|
||||
# error: nothing can be done to existing ViNS in the listed statii regardless of
|
||||
# the requested state
|
||||
self.result['failed'] = True
|
||||
self.result['changed'] = False
|
||||
self.result['msg'] = ("No change can be done for existing ViNS ID {} because of its current "
|
||||
"status '{}'").format(self.vins_id, self.vins_facts['status'])
|
||||
elif self.vins_facts['status'] == "DISABLED":
|
||||
if amodule.params['state'] == 'absent':
|
||||
self.delete()
|
||||
vins_should_exist = False
|
||||
elif amodule.params['state'] in ('present', 'disabled'):
|
||||
# update ViNS, leave in disabled state
|
||||
self.action()
|
||||
elif amodule.params['state'] == 'enabled':
|
||||
# update ViNS and enable
|
||||
self.action('enabled')
|
||||
elif self.vins_facts['status'] in ["CREATED", "ENABLED"]:
|
||||
if amodule.params['state'] == 'absent':
|
||||
self.delete()
|
||||
vins_should_exist = False
|
||||
elif amodule.params['state'] in ('present', 'enabled'):
|
||||
# update ViNS
|
||||
self.action()
|
||||
elif amodule.params['state'] == 'disabled':
|
||||
# disable and update ViNS
|
||||
self.action('disabled')
|
||||
elif self.vins_facts['status'] == "DELETED":
|
||||
if amodule.params['state'] in ['present', 'enabled']:
|
||||
# restore and enable
|
||||
self.action(restore=True)
|
||||
vins_should_exist = True
|
||||
elif amodule.params['state'] == 'absent':
|
||||
# destroy permanently
|
||||
if self.amodule.params['permanently']:
|
||||
self.delete()
|
||||
vins_should_exist = False
|
||||
elif amodule.params['state'] == 'disabled':
|
||||
self.error()
|
||||
vins_should_exist = False
|
||||
elif self.vins_facts['status'] == "DESTROYED":
|
||||
if amodule.params['state'] in ('present', 'enabled'):
|
||||
# need to re-provision ViNS;
|
||||
self.create()
|
||||
vins_should_exist = True
|
||||
elif amodule.params['state'] == 'absent':
|
||||
self.nop()
|
||||
vins_should_exist = False
|
||||
elif amodule.params['state'] == 'disabled':
|
||||
self.error()
|
||||
else:
|
||||
# Preexisting ViNS was not found.
|
||||
vins_should_exist = False # we will change it back to True if ViNS is created or restored
|
||||
# If requested state is 'absent' - nothing to do
|
||||
if amodule.params['state'] == 'absent':
|
||||
self.nop()
|
||||
elif amodule.params['state'] in ('present', 'enabled'):
|
||||
self.check_amodule_argument('vins_name')
|
||||
# as we already have account ID and RG ID we can create ViNS and get vins_id on success
|
||||
self.create()
|
||||
vins_should_exist = True
|
||||
elif amodule.params['state'] == 'disabled':
|
||||
self.error()
|
||||
#
|
||||
# conditional switch end - complete module run
|
||||
#
|
||||
if self.result['failed']:
|
||||
amodule.fail_json(**self.result)
|
||||
else:
|
||||
# prepare ViNS facts to be returned as part of self.result and then call exit_json(...)
|
||||
if self.result['changed']:
|
||||
_, self.vins_facts = self.vins_find(self.vins_id)
|
||||
self.result['facts'] = self.package_facts(amodule.check_mode)
|
||||
amodule.exit_json(**self.result)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
def main():
|
||||
decort_vins().run()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user