#!/usr/bin/python # Copyright: ... # ... DOCUMENTATION = r''' --- module: decort_account_info version_added: "2.16" description: See L(Module Documentation,https://repository.basistech.ru/BASIS/decort-ansible/wiki/Home). ''' # EXAMPLES = r''' # ''' # RETURN = r''' # ''' from ansible.module_utils.basic import AnsibleModule, env_fallback from ansible.module_utils.decort_utils import DecortController class DecortAccountInfo(DecortController): def __init__(self): amodule = AnsibleModule(**self.amodule_init_args) super().__init__(amodule) self.id, self.facts = self.account_find( account_name=amodule.params['name'], account_id=amodule.params['id'], computes_args=self.mapped_computes_args, disks_args=self.mapped_disks_args, images_args=self.mapped_images_args, resource_consumption=amodule.params['resource_consumption'], resource_groups_args=self.mapped_rg_args, vinses_args=self.mapped_vinses_args, fail_if_not_found=True, ) @property def amodule_init_args(self) -> dict: return dict( argument_spec=dict( app_id=dict( type='str', fallback=(env_fallback, ['DECORT_APP_ID']) ), app_secret=dict( type='str', fallback=(env_fallback, ['DECORT_APP_SECRET']), no_log=True ), authenticator=dict( type='str', required=True, choices=['oauth2', 'jwt'] ), computes=dict( type='dict', options=dict( filter=dict( type='dict', options=dict( ext_net_id=dict( type='int', ), ext_net_name=dict( type='str' ), id=dict( type='int', ), ip=dict( type='str' ), name=dict( type='str' ), rg_id=dict( type='int', ), rg_name=dict( type='str' ), tech_status=dict( type='str', choices=self.COMPUTE_TECH_STATUSES, ), ), ), pagination=dict( type='dict', options=dict( number=dict( type='int', default=1, ), size=dict( type='int', required=True, ), ), ), sorting=dict( type='dict', options=dict( asc=dict( type='bool', default=True, ), field=dict( type='str', choices=\ self.FIELDS_FOR_SORTING_ACCOUNT_COMPUTE_LIST, required=True, ), ), ), ), ), controller_url=dict( type='str', required=True ), disks=dict( type='dict', options=dict( filter=dict( type='dict', options=dict( id=dict( type='int', ), name=dict( type='str', ), size=dict( type='int', ), type=dict( type='str', choices=self.DISK_TYPES, ), ), ), pagination=dict( type='dict', options=dict( number=dict( type='int', default=1, ), size=dict( type='int', required=True, ), ), ), sorting=dict( type='dict', options=dict( asc=dict( type='bool', default=True, ), field=dict( type='str', choices=\ self.FIELDS_FOR_SORTING_ACCOUNT_DISK_LIST, required=True, ), ), ), ), ), id=dict( type='int', ), images=dict( type='dict', options=dict( deleted=dict( type='bool', default=False, ), filter=dict( type='dict', options=dict( id=dict( type='int', ), name=dict( type='str', ), type=dict( type='str', choices=self.IMAGE_TYPES, ), ), ), pagination=dict( type='dict', options=dict( number=dict( type='int', default=1, ), size=dict( type='int', required=True, ), ), ), sorting=dict( type='dict', options=dict( asc=dict( type='bool', default=True, ), field=dict( type='str', choices=\ self.FIELDS_FOR_SORTING_ACCOUNT_IMAGE_LIST, required=True, ), ), ), ), ), jwt=dict( type='str', fallback=(env_fallback, ['DECORT_JWT']), no_log=True ), name=dict( type='str', ), oauth2_url=dict( type='str', fallback=(env_fallback, ['DECORT_OAUTH2_URL']) ), resource_groups=dict( type='dict', options=dict( filter=dict( type='dict', options=dict( id=dict( type='int', ), name=dict( type='str' ), status=dict( type='str', choices=self.RESOURCE_GROUP_STATUSES, ), vins_id=dict( type='int' ), vm_id=dict( type='int' ), ), ), pagination=dict( type='dict', options=dict( number=dict( type='int', default=1, ), size=dict( type='int', required=True, ), ), ), sorting=dict( type='dict', options=dict( asc=dict( type='bool', default=True, ), field=dict( type='str', choices=\ self.FIELDS_FOR_SORTING_ACCOUNT_RG_LIST, required=True, ), ), ), ), ), resource_consumption=dict( type='bool', default=False ), verify_ssl=dict( type='bool', default=True ), vinses=dict( type='dict', options=dict( filter=dict( type='dict', options=dict( ext_ip=dict( type='int', ), id=dict( type='int', ), name=dict( type='str' ), rg_id=dict( type='int', ), ), ), pagination=dict( type='dict', options=dict( number=dict( type='int', default=1, ), size=dict( type='int', required=True, ), ), ), sorting=dict( type='dict', options=dict( asc=dict( type='bool', default=True, ), field=dict( type='str', choices=\ self.FIELDS_FOR_SORTING_ACCOUNT_VINS_LIST, required=True, ), ), ), ), ), ), mutually_exclusive=[ ('id', 'name') ], required_one_of=[ ('id', 'name') ], required_if=[ ('authenticator', 'oauth2', ('oauth2_url', 'app_id', 'app_secret')), ('authenticator', 'jwt', ('jwt',)) ], supports_check_mode=True, ) @property def mapped_computes_args(self) -> None | dict: """ Map the module argument `computes` to arguments dictionary for the method `DecortController.account_computes` (excluding for `account_id`). """ input_args = self.amodule.params['computes'] if not input_args: return input_args mapped_args = {} if input_args['filter']: mapped_args['compute_id'] = input_args['filter']['id'] mapped_args['compute_ip'] = input_args['filter']['ip'] mapped_args['compute_name'] = input_args['filter']['name'] mapped_args['compute_tech_status'] =\ input_args['filter']['tech_status'] mapped_args['ext_net_id'] = input_args['filter']['ext_net_id'] mapped_args['ext_net_name'] =\ input_args['filter']['ext_net_name'] mapped_args['rg_id'] = input_args['filter']['rg_id'] mapped_args['rg_name'] = input_args['filter']['rg_name'] if input_args['pagination']: mapped_args['page_number'] =\ input_args['pagination']['number'] mapped_args['page_size'] =\ input_args['pagination']['size'] if input_args['sorting']: mapped_args['sort_by_asc'] =\ input_args['sorting']['asc'] mapped_args['sort_by_field'] =\ input_args['sorting']['field'] return mapped_args @property def mapped_disks_args(self) -> None | dict: """ Map the module argument `disks` to arguments dictionary for the method `DecortController.account_disks` (excluding for `account_id`). """ input_args = self.amodule.params['disks'] if not input_args: return input_args mapped_args = {} if input_args['filter']: mapped_args['disk_id'] = input_args['filter']['id'] mapped_args['disk_name'] = input_args['filter']['name'] mapped_args['disk_size'] = input_args['filter']['size'] mapped_args['disk_type'] = input_args['filter']['type'] if input_args['pagination']: mapped_args['page_number'] =\ input_args['pagination']['number'] mapped_args['page_size'] =\ input_args['pagination']['size'] if input_args['sorting']: mapped_args['sort_by_asc'] =\ input_args['sorting']['asc'] mapped_args['sort_by_field'] =\ input_args['sorting']['field'] return mapped_args @property def mapped_images_args(self) -> None | dict: """ Map the module argument `images` to arguments dictionary for the method `DecortController.account_images` (excluding for `account_id`). """ input_args = self.amodule.params['images'] if not input_args: return input_args mapped_args = {} mapped_args['deleted'] = input_args['deleted'] if input_args['filter']: mapped_args['image_id'] = input_args['filter']['id'] mapped_args['image_name'] = input_args['filter']['name'] mapped_args['image_type'] = input_args['filter']['type'] if input_args['pagination']: mapped_args['page_number'] =\ input_args['pagination']['number'] mapped_args['page_size'] =\ input_args['pagination']['size'] if input_args['sorting']: mapped_args['sort_by_asc'] =\ input_args['sorting']['asc'] mapped_args['sort_by_field'] =\ input_args['sorting']['field'] return mapped_args @property def mapped_rg_args(self) -> None | dict: """ Map the module argument `resource_groups` to arguments dictionary for the method `DecortController.account_resource_groups` (excluding for `account_id`). """ input_args = self.amodule.params['resource_groups'] if not input_args: return input_args mapped_args = {} if input_args['filter']: mapped_args['rg_id'] =\ input_args['filter']['id'] mapped_args['rg_name'] =\ input_args['filter']['name'] mapped_args['rg_status'] =\ input_args['filter']['status'] mapped_args['vins_id'] =\ input_args['filter']['vins_id'] mapped_args['vm_id'] =\ input_args['filter']['vm_id'] if input_args['pagination']: mapped_args['page_number'] =\ input_args['pagination']['number'] mapped_args['page_size'] =\ input_args['pagination']['size'] if input_args['sorting']: mapped_args['sort_by_asc'] =\ input_args['sorting']['asc'] mapped_args['sort_by_field'] =\ input_args['sorting']['field'] return mapped_args @property def mapped_vinses_args(self) -> None | dict: """ Map the module argument `vinses` to arguments dictionary for the method `DecortController.account_vinses` (excluding for `account_id`). """ input_args = self.amodule.params['vinses'] if not input_args: return input_args mapped_args = {} if input_args['filter']: mapped_args['vins_id'] = input_args['filter']['id'] mapped_args['vins_name'] = input_args['filter']['name'] mapped_args['ext_ip'] = input_args['filter']['ext_ip'] mapped_args['rg_id'] = input_args['filter']['rg_id'] if input_args['pagination']: mapped_args['page_number'] =\ input_args['pagination']['number'] mapped_args['page_size'] =\ input_args['pagination']['size'] if input_args['sorting']: mapped_args['sort_by_asc'] =\ input_args['sorting']['asc'] mapped_args['sort_by_field'] =\ input_args['sorting']['field'] return mapped_args def exit(self): self.result['facts'] = self.facts self.amodule.exit_json(**self.result) def main(): decort_account_info = DecortAccountInfo() decort_account_info.exit() if __name__ == '__main__': main()