lib/ansible/modules/cloud/alicloud/ali_rds_account_info.py (90 lines of code) (raw):

#!/usr/bin/python # -*- coding: utf-8 -*- # Copyright (c) 2017-present Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # # This file is part of Ansible # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ansible is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ansible. If not, see http://www.gnu.org/licenses/. from __future__ import (absolute_import, division, print_function) __metaclass__ = type ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ['preview'], 'supported_by': 'community'} DOCUMENTATION = """ --- module: ali_rds_account_info short_description: Gather info on RDS accounts of Alibaba Cloud. description: - Gather info on RDS accounts of Alibaba Cloud and Support to use name_prefix to filter accounts. options: db_instance_id: description: - The ID of the instance. aliases: ['instance_id'] required: True type: str name_prefix: description: - Use name prefix to filter accounts. type: str author: - "He Guimin (@xiaozhu36)" requirements: - "python >= 3.6" - "footmark >= 1.16.0" extends_documentation_fragment: - alicloud """ EXAMPLES = """ # Fetch rds account details according to setting different filters - name: No Changed. get rds account with name_prefix. ali_rds_account_info: db_instance_id: '{{ db_instance_id }}' name_prefix: account_ - name: No Changed. Retrieving all rds account ali_rds_account_info: db_instance_id: '{{ db_instance_id }}' """ RETURN = ''' rds_accounts: description: Details about the rds accounts. returned: when success type: complex contains: account_description: description: Account remarks returned: always type: str sample: account from ansible account_name: description: The name of account. returned: always type: str sample: account account_type: description: Privilege type of account. returned: always type: str sample: Normal db_instance_id: description: The ID of the instance to which the account belongs. returned: always type: str sample: rm-2zeib35bbexxxxxx name: description: alias of account_name. returned: always type: str sample: account account_status: description: The status of the account. returned: always type: str sample: Available account_type: description: The type of the account. returned: always type: str sample: Super status: description: alias of account_status. returned: always type: str sample: Available type: description: alias of account_type. returned: always type: str sample: Super ''' from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.alicloud_ecs import get_acs_connection_info, ecs_argument_spec, rds_connect HAS_FOOTMARK = False try: from footmark.exception import RDSResponseError HAS_FOOTMARK = True except ImportError: HAS_FOOTMARK = False def main(): argument_spec = ecs_argument_spec() argument_spec.update(dict( db_instance_id=dict(type='str', aliases=['instance_id'], required=True), name_prefix=dict(type='str') )) module = AnsibleModule(argument_spec=argument_spec) if HAS_FOOTMARK is False: module.fail_json("Package 'footmark' required for this module.") # Get values of variable db_instance_id = module.params['db_instance_id'] name_prefix = module.params['name_prefix'] result = [] try: rds = rds_connect(module) for account in rds.describe_accounts(db_instance_id=db_instance_id): if name_prefix and not account.name.startswith(name_prefix): continue result.append(account.read()) module.exit_json(changed=False, rds_accounts=result) except Exception as e: module.fail_json(msg="Unable to describe rds accounts, and got an error: {0}.".format(e)) if __name__ == "__main__": main()