lib/ansible/modules/cloud/alicloud/_ali_rds_account_facts.py (84 lines of code) (raw):
#!/usr/bin/python
# 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/.
__metaclass__ = type
ANSIBLE_METADATA = {'metadata_version': '1.1',
'status': ['preview'],
'supported_by': 'community'}
DOCUMENTATION = """
---
module: ali_rds_account_facts
version_added: "1.5.0"
short_description: Gather facts on RDS accounts of Alibaba Cloud.
description:
- This module fetches data from the Open API in Alicloud.
The module must be called from within the RDS account itself.
options:
db_instance_id:
description:
- ID of RDS instance.
account_names:
description:
- A list of RDS account names.
aliases: ["names"]
author:
- "He Guimin (@xiaozhu36)"
requirements:
- "python >= 2.6"
- "footmark"
extends_documentation_fragment:
- alicloud
"""
EXAMPLES = """
# Fetch rds account details according to setting different filters
- name: fetch rds account details example
hosts: localhost
vars:
alicloud_access_key: <your-alicloud-access-key>
alicloud_secret_key: <your-alicloud-secret-key>
alicloud_region: cn-beijing
db_instance_id: rm-dj13c34832w21g47j
account_names:
- demoaccount
- testaccount
tasks:
- name: Find all accounts in the rds instance
ali_rds_account_facts:
alicloud_access_key: '{{ alicloud_access_key }}'
alicloud_secret_key: '{{ alicloud_secret_key }}'
alicloud_region: '{{ alicloud_region }}'
db_instance_id: '{{ db_instance_id }}'
register: all_accounts
- debug: var=all_accounts
- name: Find accounts in the rds instance by account name
ali_rds_account_facts:
alicloud_access_key: '{{ alicloud_access_key }}'
alicloud_secret_key: '{{ alicloud_secret_key }}'
alicloud_region: '{{ alicloud_region }}'
db_instance_id: '{{ db_instance_id }}'
account_names: '{{ account_names }}'
register: accounts_by_name
- debug: var=accounts_by_name
"""
RETURN = '''
account_names:
description: List all account's name of rds instance.
returned: when success
type: list
sample: [ "demoaccount", "testaccount" ]
rds_accounts:
description: Details about the rds accounts that were created.
returned: when success
type: list
sample: [
{
"account_description": "",
"account_name": "demoaccount",
"account_status": "Available",
"account_type": "Normal",
"database_privileges": {
"database_privilege": []
},
"db_instance_id": "rm-dj13c34832w21g47j"
},
{
"account_description": "",
"account_name": "testaccount",
"account_status": "Available",
"account_type": "Normal",
"database_privileges": {
"database_privilege": []
},
"db_instance_id": "rm-dj13c34832w21g47j"
}
]
total:
description: The number of all rds accounts.
returned: when success
type: int
sample: 2
'''
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 get_info(obj):
"""
get info from account obj
:type obj: account object
:param obj: the object of account
:return: dict of account info
"""
if obj:
return dict(db_instance_id=obj.dbinstance_id,
account_name=obj.account_name,
account_status=obj.account_status,
account_type=obj.account_type,
account_description=obj.account_description,
database_privileges=obj.database_privileges)
return {}
def main():
argument_spec = ecs_argument_spec()
argument_spec.update(dict(
db_instance_id=dict(type='str', required=True),
account_names=dict(type='list', aliases=['names'])
))
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']
names = module.params['account_names']
result = []
try:
rds = rds_connect(module)
if names and (not isinstance(names, list) or len(names)) < 1:
module.fail_json(msg='account_name should be a list of account name, aborting')
# fetch rds accounts by name
if names:
for name in names:
rds_accounts = rds.list_account(db_instance_id=db_instance_id, account_name=name)
if rds_accounts and len(rds_accounts) == 1:
result.append(get_info(rds_accounts[0]))
# fetch all rds accounts
else:
names = []
for account in rds.list_account(db_instance_id=db_instance_id):
names.append(account.account_name)
result.append(get_info(account))
module.exit_json(changed=False, account_names=names, rds_accounts=result, total=len(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()