lib/ansible/modules/cloud/alicloud/_ali_rds_instance_facts.py (253 lines of code) (raw):
#!/usr/bin/python
# Copyright (c) 2017-present Alibaba Group Holding Limited. He Guimin <heguimin36@163.com.com>
# 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_instance_facts
version_added: "1.5.0"
short_description: Gather facts on database instance of Alibaba Cloud RDS.
description:
- This module fetches data from the Open API in Alicloud.
The module must be called from within the RDS instance itself.
options:
instance_ids:
description:
- A list of RDS database instance ids.
aliases: [ "db_instance_ids" ]
engine:
description:
- Type of the database.
dbinstance_type:
description:
- Instance type.
instance_network_type:
description:
- Instance network type.
connection_mode:
description:
- Instance connection mode.
tags:
description:
- Database tags.
author:
- "He Guimin (@xiaozhu36)"
requirements:
- "python >= 2.6"
- "footmark"
extends_documentation_fragment:
- alicloud
'''
EXAMPLES = '''
# Fetch database instance details according to setting different filters
- name: fetch database instance details example
hosts: localhost
connection: local
vars:
alicloud_access_key: <your-alicloud-access-key-id>
alicloud_secret_key: <your-alicloud-access-secret-key>
alicloud_region: cn-beijing
engine: MySQL
dbinstance_type: Temp
instance_network_type: Classic
connection_mode: Safe
tags:
rds: '01'
instance_ids:
- rm-dj163498yvlgy80ug
tasks:
- name: Find all database instance in the specified region
ali_rds_instance_facts:
alicloud_access_key: '{{ alicloud_access_key }}'
alicloud_secret_key: '{{ alicloud_secret_key }}'
alicloud_region: '{{ alicloud_region }}'
register: all_db_instance
- debug: var=all_db_instance
- name: Find all database instance in the specified region based on instance ids
ali_rds_instance_facts:
alicloud_access_key: '{{ alicloud_access_key }}'
alicloud_secret_key: '{{ alicloud_secret_key }}'
alicloud_region: '{{ alicloud_region }}'
instance_ids: '{{ instance_ids }}'
register: db_instance_by_ids
- debug: var=db_instance_by_ids
- name: Find all database instance in the specified region based on database instance type
ali_rds_instance_facts:
alicloud_access_key: '{{ alicloud_access_key }}'
alicloud_secret_key: '{{ alicloud_secret_key }}'
alicloud_region: '{{ alicloud_region }}'
instance_ids: '{{ instance_ids }}'
engine: '{{ engine }}'
register: db_instance_by_dbtype
- debug: var=db_instance_by_dbtype
- name: Find all database instance in the specified region based on instance type
ali_rds_instance_facts:
alicloud_access_key: '{{ alicloud_access_key }}'
alicloud_secret_key: '{{ alicloud_secret_key }}'
alicloud_region: '{{ alicloud_region }}'
instance_ids: '{{ instance_ids }}'
dbinstance_type: '{{ dbinstance_type }}'
register: db_instance_by_type
- debug: var=db_instance_by_type
- name: Find all database instance in the specified region based on instance network type
ali_rds_instance_facts:
alicloud_access_key: '{{ alicloud_access_key }}'
alicloud_secret_key: '{{ alicloud_secret_key }}'
alicloud_region: '{{ alicloud_region }}'
instance_ids: '{{ instance_ids }}'
instance_network_type: '{{ instance_network_type }}'
register: db_instance_by_network_type
- debug: var=db_instance_by_network_type
- name: Find all database instance in the specified region based on instance connection mode and tags
ali_rds_instance_facts:
alicloud_access_key: '{{ alicloud_access_key }}'
alicloud_secret_key: '{{ alicloud_secret_key }}'
alicloud_region: '{{ alicloud_region }}'
instance_ids: '{{ instance_ids }}'
connection_mode: '{{ connection_mode }}'
tags: '{{ tags }}'
register: db_instance_by_connection_mode
- debug: var=db_instance_by_connection_mode
'''
RETURN = '''
instance_ids:
description: List all database instance's id after operating RDS database instances.
returned: when success
type: list
sample: [ "rm-dj1d7a046kur7syix", "rm-dj164ju77728joefu" ]
rds_db_instances:
description: Details about the rds database instances that were created.
returned: when success
type: list
sample: [
{
"connection_mode": "Safe",
"create_time": "2017-11-07T18:47Z",
"dbinstance_class": "rds.mysql.t1.small",
"dbinstance_id": "rm-dj1d7a046kur7syix",
"dbinstance_net_type": "Intranet",
"dbinstance_status": "Running",
"dbinstance_type": "Primary",
"engine": "MySQL",
"engine_version": "5.6",
"expire_time": "",
"ins_id": 1,
"instance_network_type": "Classic",
"lock_mode": "Unlock",
"lock_reason": "",
"mutri_orsignle": false,
"pay_type": "Postpaid",
"read_only_dbinstance_ids": {
"read_only_dbinstance_id": []
},
"region_id": "cn-beijing",
"resource_group_id": "rg-acfmv53ndviljcy",
"zone_id": "cn-beijing-a"
},
{
"connection_mode": "Safe",
"create_time": "2017-11-07T18:23Z",
"dbinstance_class": "rds.mysql.t1.small",
"dbinstance_id": "rm-dj164ju77728joefu",
"dbinstance_net_type": "Intranet",
"dbinstance_status": "Running",
"dbinstance_type": "Primary",
"engine": "MySQL",
"engine_version": "5.6",
"expire_time": "",
"ins_id": 1,
"instance_network_type": "Classic",
"lock_mode": "Unlock",
"lock_reason": "",
"mutri_orsignle": false,
"pay_type": "Postpaid",
"read_only_dbinstance_ids": {
"read_only_dbinstance_id": []
},
"region_id": "cn-beijing",
"resource_group_id": "rg-acfmv53ndviljcy",
"zone_id": "cn-beijing-a"
}
]
total:
description: The number of all database instances after operating RDS database instances.
returned: when success
type: int
sample: 2
'''
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.alicloud_ecs import ecs_argument_spec, rds_connect, vpc_connect
HAS_FOOTMARK = False
try:
from footmark.exception import RDSResponseError
HAS_FOOTMARK = True
except ImportError:
HAS_FOOTMARK = False
def get_info(obj):
if not obj:
return None
return dict(
resource_group_id=obj.resource_group_id,
region_id=obj.region_id,
mutri_orsignle=obj.mutri_orsignle,
create_time=obj.create_time,
dbinstance_class=obj.dbinstance_class,
dbinstance_net_type=obj.dbinstance_net_type,
lock_mode=obj.lock_mode,
pay_type=obj.pay_type,
read_only_dbinstance_ids=obj.read_only_dbinstance_ids,
dbinstance_type=obj.dbinstance_type,
engine=obj.engine,
instance_network_type=obj.instance_network_type,
dbinstance_status=obj.dbinstance_status,
expire_time=obj.expire_time,
dbinstance_id=obj.dbinstance_id,
zone_id=obj.zone_id,
lock_reason=obj.lock_reason,
connection_mode=obj.connection_mode,
ins_id=obj.ins_id,
engine_version=obj.engine_version
)
def main():
argument_spec = ecs_argument_spec()
argument_spec.update(dict(
instance_ids=dict(type='list', aliases=['db_instance_ids']),
engine=dict(type='str'),
dbinstance_type=dict(type='str'),
instance_network_type=dict(type='str'),
connection_mode=dict(type='str'),
tags = dict(type='dict')
))
module = AnsibleModule(argument_spec=argument_spec)
if HAS_FOOTMARK is False:
module.fail_json(msg="Package 'footmark' required for this module.")
result = []
ids = []
instance_ids = module.params['instance_ids']
engine = module.params['engine']
dbinstance_type = module.params['dbinstance_type']
instance_network_type = module.params['instance_network_type']
connection_mode = module.params['connection_mode']
tags = module.params['tags']
if instance_ids and (not isinstance(instance_ids, list) or len(instance_ids)) < 1:
module.fail_json(msg='instance_ids should be a list of db_instance id, aborting')
try:
rds = rds_connect(module)
# list rds db_instance by instance ids
if instance_ids:
instance_id = ",".join(instance_ids)
for rds_instance in rds.get_rds_instances(instance_id=instance_id, engine=engine,
dbinstance_type=dbinstance_type,
instance_network_type=instance_network_type,
connection_mode=connection_mode, tags=tags):
result.append(get_info(rds_instance))
ids.append(rds_instance.dbinstance_id)
# list all db_instance available in specified region
else:
for rds_instance in rds.get_rds_instances():
result.append(get_info(rds_instance))
ids.append(rds_instance.dbinstance_id)
except Exception as e:
module.fail_json(msg="Unable to describe rds db instance, and got an error: {0}.".format(e))
module.exit_json(changed=False, db_instance_ids=ids, rds_db_instances=result, total=len(result))
if __name__ == '__main__':
main()