This commit is contained in:
2026-09-18 12:19:28 +03:00
parent b2cb33e9a8
commit 1c0e5cfdb3
27 changed files with 1045 additions and 753 deletions

View File

@@ -19,13 +19,12 @@ class decort_bservice(DecortController):
validated_acc_id = 0
validated_rg_id = 0
self.bservice_info = None
self.is_bservice_stopped_or_will_be_stopped: None | bool = None
if arg_amodule.params['name'] == "" and arg_amodule.params['id'] == 0:
self.result['failed'] = True
self.result['changed'] = False
self.result['msg'] = "Cannot manage Basic Services when its ID is 0 and name is empty."
self.fail_json(**self.result)
self.amodule.fail_json(**self.result)
if not arg_amodule.params['id']:
if not arg_amodule.params['rg_id']: # RG ID is not set -> locate RG by name -> need account ID
validated_acc_id, self._acc_info = self.account_find(arg_amodule.params['account_name'],
@@ -36,7 +35,7 @@ class decort_bservice(DecortController):
self.result['msg'] = ("Current user does not have access to the account ID {} / "
"name '{}' or non-existent account specified.").format(arg_amodule.params['account_id'],
arg_amodule.params['account_name'])
self.fail_json(**self.result)
self.amodule.fail_json(**self.result)
# fail the module -> exit
# now validate RG
validated_rg_id, validated_rg_model = self.rg_find(
@@ -55,14 +54,27 @@ class decort_bservice(DecortController):
arg_amodule.params['rg_name'] = validated_rg_model.name
validated_acc_id = validated_rg_model.account_id
self.bservice_id, self.bservice_info = self.bservice_find(
validated_acc_id,
validated_rg_id,
arg_amodule.params['name'],
arg_amodule.params['id']
self.bservice_id, self._bservice_info = self.bservice_find(
account_id=validated_acc_id,
rg_id=validated_rg_id,
bservice_name=arg_amodule.params['name'],
bservice_id=arg_amodule.params['id'],
fail_if_not_found=False,
)
self.acc_id = validated_acc_id or self.bservice_info['accountId']
if arg_amodule.params['id'] and self.bservice_id == 0:
if arg_amodule.params['state'] == 'absent':
self.exit()
else:
self.message(
self.MESSAGES.obj_not_found(
obj='bservice',
id=arg_amodule.params['id'],
)
)
self.exit(fail=True)
self.acc_id = validated_acc_id or self.bservice_info['account_id']
if self.bservice_id and self.bservice_info['status'] != 'DESTROYED':
self.bservice_should_exist = True
@@ -92,8 +104,8 @@ class decort_bservice(DecortController):
self.result['changed'] = False
if self.bservice_id:
self.result['msg'] = ("Invalid target state '{}' requested for B-service ID {} in the "
"current status '{}'.").format(self.bservice_id,
self.amodule.params['state'],
"current status '{}'.").format(self.amodule.params['state'],
self.bservice_id,
self.bservice_info['status'])
else:
self.result['msg'] = ("Invalid target state '{}' requested for non-existent B-service name '{}' "
@@ -112,7 +124,7 @@ class decort_bservice(DecortController):
zone_id=self.aparams['zone_id'],
)
if self.bservice_id:
_, self.bservice_info = self.bservice_get_by_id(self.bservice_id)
self._bservice_info = self.bservice_get_by_id(self.bservice_id)
self.bservice_state(self.bservice_info, self.aparams['state'])
self.bservice_should_exist = True
@@ -122,9 +134,9 @@ class decort_bservice(DecortController):
self.bservice_state(self.bservice_info,d_state)
aparam_zone_id = self.aparams['zone_id']
if aparam_zone_id is not None and aparam_zone_id != self.bservice_info['zoneId']:
self.bservice_migrate_to_zone(
bs_id=self.bservice_id,
if aparam_zone_id is not None and aparam_zone_id != self.bservice_info['zone_id']:
self.sdk_checkmode(self.api.cloudapi.bservice.migrate_to_zone)(
bservice_id=self.bservice_id,
zone_id=aparam_zone_id,
)
return
@@ -155,18 +167,9 @@ class decort_bservice(DecortController):
)
if check_mode:
# in check mode return immediately with the default values
return ret_dict
ret_dict['id'] = self.bservice_info['id']
ret_dict['name'] = self.bservice_info['name']
ret_dict['techStatus'] = self.bservice_info['techStatus']
ret_dict['state'] = self.bservice_info['status']
ret_dict['rg_id'] = self.bservice_info['rgId']
ret_dict['account_id'] = self.bservice_info['accountId']
ret_dict['groups'] = self.bservice_info['groups']
ret_dict['zone_id'] = self.bservice_info['zoneId']
return ret_dict
return self.bservice_info
@property
def amodule_init_args(self) -> dict:
@@ -228,14 +231,14 @@ class decort_bservice(DecortController):
self.is_bservice_stopped_or_will_be_stopped = (
(
self.bservice_info['techStatus'] == 'STOPPED'
self.bservice_info['tech_status'] == 'STOPPED'
and (
self.aparams['state'] is None
or self.aparams['state'] in ('present', 'stopped')
)
)
or (
self.bservice_info['techStatus'] != 'STOPPED'
self.bservice_info['tech_status'] != 'STOPPED'
and self.aparams['state'] == 'stopped'
)
)
@@ -244,7 +247,7 @@ class decort_bservice(DecortController):
check_errors = True
if (
self.aparams['zone_id'] is not None
and self.aparams['zone_id'] != self.bservice_info['zoneId']
and self.aparams['zone_id'] != self.bservice_info['zone_id']
and not self.is_bservice_stopped_or_will_be_stopped
):
check_errors = True
@@ -270,7 +273,10 @@ class decort_bservice(DecortController):
if self.amodule.check_mode:
self.result['changed'] = False
if self.bservice_id:
if (
self.bservice_id
or (self.aparams['rg_id'] and self.aparams['name'])
):
self.result['failed'] = False
self.result['facts'] = self.package_facts(amodule.check_mode)
amodule.exit_json(**self.result)
@@ -309,10 +315,12 @@ class decort_bservice(DecortController):
else:
self.action(amodule.params['state'])
elif self.bservice_info['status'] == "DESTROYED":
if amodule.params['state'] in ('present','enabled'):
if amodule.params['state'] == 'present':
self.create()
self.action(amodule.params['state'])
if amodule.params['state'] == 'absent':
elif amodule.params['state'] in ['enabled', 'disabled']:
self.error()
elif amodule.params['state'] == 'absent':
self.nop()
else:
state = amodule.params['state']
@@ -329,7 +337,9 @@ class decort_bservice(DecortController):
amodule.fail_json(**self.result)
else:
if self.bservice_should_exist:
_, self.bservice_info = self.bservice_get_by_id(self.bservice_id)
self._bservice_info = self.bservice_get_by_id(
self.bservice_id
)
self.result['facts'] = self.package_facts(amodule.check_mode)
amodule.exit_json(**self.result)
else: