plugins/modules/ali_rds_backup_info.py (155 lines of code) (raw):

#!/usr/bin/python # Copyright (c) 2017-present Alibaba Group Holding Limited. <xiaozhu36> # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) 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_backup_info short_description: Gather info on backup of Alibaba Cloud. description: - Gather info on backup of Alibaba Cloud and Support to use id, status, mode to filter backup. options: db_instance_id: description: - Id of rds instance. aliases: ["instance_id"] type: str backup_id: description: - The ID of the backup set. type: str backup_status: description: - The status of the backup. type: str backup_mode: description: - The backup mode. type: str author: - "He Guimin (@xiaozhu36)" requirements: - "python >= 3.6" - "footmark >= 1.16.0" extends_documentation_fragment: - alibaba.alicloud.alicloud ''' EXAMPLES = ''' # Fetch backup according to setting different filters - name: Get the existing backup with backup_status alibaba.alicloud.ali_rds_backup_info: db_instance_id: '{{ db_instance_id }}' backup_status: Success - name: Get the existing backup with backup_mode alibaba.alicloud.ali_rds_backup_info: db_instance_id: '{{ db_instance_id }}' backup_mode: Automated ''' RETURN = ''' backups: description: backup info. returned: when success type: complex contains: backup_id: description: The ID of the backup set. returned: always type: str sample: 321020562 db_instance_id: description: The ID of the instance. returned: always type: str sample: rm-uf6wjk5xxxxxxx backup_status: description: The status of the backup set. returned: always type: str sample: Success backup_type: description: The backup type. returned: always type: str sample: FullBackup backup_mode: description: The backup mode. returned: always type: str sample: Automated backup_method: description: The ID of the instance. returned: always type: str sample: Physical status: description: alias of backup_status. returned: always type: str sample: Success id: description: alias of backup_id. returned: always type: str sample: 321020562 instance_id: description: alias of dbinstance_id. returned: always type: str sample: rm-uf6wjk5xxxxxxx backup_start_time: description: The start time of the current backup. returned: always type: str sample: '2019-12-17T01:51:13Z' backup_end_time: description: The end time of the current backup. returned: always type: str sample: '2019-12-17T01:52:36Z' backup_intranet_download_url: description: The download link for the private network access. If the download is unavailable, this parameter is a null string. returned: always type: str sample: 'http://rdsbak-bj-v4.oss-cn-beijing-internal.aliyuncs.com/xxxxx' backup_size: description: The size of the backup file. Unit Byte. returned: always type: str sample: 10240 ''' from ansible.module_utils.basic import AnsibleModule from ansible_collections.alibaba.alicloud.plugins.module_utils.alicloud_ecs import 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), backup_id=dict(type='str'), backup_status=dict(type='str', choice=['Success', 'Failed']), backup_mode=dict(type='str', choice=['Automated', 'Manual']) )) module = AnsibleModule(argument_spec=argument_spec) if HAS_FOOTMARK is False: module.fail_json(msg="Package 'footmark' required for this module.") result = [] backup_status = module.params['backup_status'] backup_mode = module.params['backup_mode'] try: rds = rds_connect(module) for backup in rds.describe_backups(**module.params): if backup_status and backup.status.lower() != backup_status.lower(): continue if backup_mode and backup.mode.lower() != backup_status.lower(): continue result.append(backup.read()) except Exception as e: module.fail_json(msg="Unable to describe rds backup, and got an error: {0}.".format(e)) module.exit_json(changed=True, backups=result) if __name__ == '__main__': main()