9.0.0
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user