This commit is contained in:
2025-07-21 13:31:14 +03:00
parent 4113719334
commit 06336697a6
201 changed files with 2228 additions and 80456 deletions

View File

@@ -4,7 +4,7 @@ DOCUMENTATION = r'''
---
module: decort_account
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home).
description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). # noqa: E501
'''
from typing import Iterable
@@ -114,6 +114,9 @@ class DecortAccount(DecortController):
description=dict(
type='str',
),
default_zone_id=dict(
type='int',
),
),
required_one_of=[
('id', 'name')
@@ -164,15 +167,24 @@ class DecortAccount(DecortController):
if check_error:
self.exit(fail=True)
def check_amodule_args_for_change(self):
check_error = False
if self.check_aparam_default_zone_id() is False:
check_error = True
if check_error:
self.exit(fail=True)
def run(self):
self.get_info()
self.check_amodule_args_for_change()
self.change()
self.exit()
def get_info(self):
# If this is the first getting info
if not getattr(self, 'id', None):
self.id, self.facts = self.account_find(
if self._acc_info is None:
self.acc_id, self._acc_info = self.account_find(
account_name=self.aparams['name'],
account_id=self.aparams['id'],
)
@@ -181,7 +193,10 @@ class DecortAccount(DecortController):
# If check mode is enabled, there is no needed to
# request info again
if not self.amodule.check_mode:
self.id, self.facts = self.account_find(account_id=self.id)
self.acc_id, self._acc_info = self.account_find(
account_id=self.acc_id,
)
self.facts = self.acc_info
def change(self):
self.change_state()
@@ -189,12 +204,12 @@ class DecortAccount(DecortController):
self.change_acl()
if self.account_update_args:
self.account_update(account_id=self.id,
self.account_update(account_id=self.acc_id,
**self.account_update_args)
self.get_info()
def change_state(self):
match self.facts:
match self._acc_info:
case None:
self.message(self.MESSAGES.obj_not_found(obj=self.OBJ))
match self.aparams:
@@ -208,7 +223,7 @@ class DecortAccount(DecortController):
self.message(
self.MESSAGES.obj_deleted(
obj=self.OBJ,
id=self.id,
id=self.acc_id,
permanently=True,
already=True,
)
@@ -216,7 +231,7 @@ class DecortAccount(DecortController):
case {'state': 'confirmed' | 'disabled' | 'present'}:
self.message(
self.MESSAGES.obj_not_restored(obj=self.OBJ,
id=self.id)
id=self.acc_id)
)
self.exit(fail=True)
case {'status': 'DELETED'}:
@@ -225,7 +240,7 @@ class DecortAccount(DecortController):
self.message(
self.MESSAGES.obj_deleted(
obj=self.OBJ,
id=self.id,
id=self.acc_id,
permanently=False,
already=True,
)
@@ -259,26 +274,28 @@ class DecortAccount(DecortController):
pass
def delete(self, permanently=False):
self.account_delete(account_id=self.id, permanently=permanently)
self.account_delete(account_id=self.acc_id, permanently=permanently)
self.get_info()
def disable(self):
self.account_disable(account_id=self.id)
self.account_disable(account_id=self.acc_id)
self.get_info()
def enable(self):
self.account_enable(account_id=self.id)
self.account_enable(account_id=self.acc_id)
self.get_info()
def restore(self):
self.account_restore(account_id=self.id)
self.account_restore(account_id=self.acc_id)
self.get_info()
def change_acl(self):
if not self.aparams['acl']:
return
actual_users = {u['userGroupId']: u['right'] for u in self.facts['acl']}
actual_users = {
u['userGroupId']: u['right'] for u in self.acc_info['acl']
}
actual_users_ids = set(actual_users.keys())
aparams_acl = self.aparams['acl']
@@ -291,9 +308,13 @@ class DecortAccount(DecortController):
match aparams_acl:
case {'mode': 'revoke'}:
del_users_ids = aparams_users_ids.intersection(actual_users_ids)
del_users_ids = aparams_users_ids.intersection(
actual_users_ids,
)
case {'mode': 'update' | 'match' as mode}:
new_users_ids = aparams_users_ids.difference(actual_users_ids)
new_users_ids = aparams_users_ids.difference(
actual_users_ids,
)
new_users = dict(
u for u in aparams_users.items() if u[0] in new_users_ids
)
@@ -315,7 +336,7 @@ class DecortAccount(DecortController):
actual_users_ids.difference(aparams_users_ids)
if del_users_ids or new_users or upd_users:
self.account_change_acl(account_id=self.id,
self.account_change_acl(account_id=self.acc_id,
del_users=del_users_ids,
add_users=new_users,
upd_users=upd_users)
@@ -327,12 +348,12 @@ class DecortAccount(DecortController):
aparam_access_emails = self.aparams['access_emails']
if (aparam_access_emails is not None
and self.facts['sendAccessEmails'] != aparam_access_emails):
and self.acc_info['sendAccessEmails'] != aparam_access_emails):
result_args['access_emails'] = aparam_access_emails
aparam_name = self.aparams['name']
if (self.aparams['id'] and aparam_name
and self.facts['name'] != aparam_name):
and self.acc_info['name'] != aparam_name):
result_args['name'] = aparam_name
aparam_quotas = self.aparams['quotas']
@@ -346,7 +367,7 @@ class DecortAccount(DecortController):
['ram', 'CU_M', 'ram_quota'],
]
for aparam, info_key, result_arg in quotas_naming:
current_value = int(self.facts['resourceLimits'][info_key])
current_value = int(self.acc_info['resourceLimits'][info_key])
if (aparam_quotas[aparam] is not None
and current_value != aparam_quotas[aparam]):
result_args[result_arg] = aparam_quotas[aparam]
@@ -359,18 +380,38 @@ class DecortAccount(DecortController):
sep_pools.add(
f'{sep["sep_id"]}_{pool_name}'
)
if set(self.facts['uniqPools']) != sep_pools:
if set(self.acc_info['uniqPools']) != sep_pools:
result_args['sep_pools'] = sep_pools
aparam_desc = self.aparams['description']
if (
aparam_desc is not None
and self.facts['description'] != aparam_desc
and self.acc_info['description'] != aparam_desc
):
result_args['description'] = aparam_desc
aparam_default_zone_id = self.aparams['default_zone_id']
if (
aparam_default_zone_id is not None
and self.acc_info['defaultZoneId'] != aparam_default_zone_id
):
result_args['default_zone_id'] = aparam_default_zone_id
return result_args
def check_aparam_default_zone_id(self) -> bool | None:
aparam_default_zone_id = self.aparams['default_zone_id']
if aparam_default_zone_id is not None:
if aparam_default_zone_id in self.acc_zone_ids:
return True
else:
self.message(
'Check for parameter "default_zone_id" failed: '
f'zone ID {aparam_default_zone_id} not available '
f'for account ID {self.acc_id}.'
)
return False
def main():
DecortAccount().run()