lib/ansible/modules/cloud/alicloud/ali_disk_info.py (165 lines of code) (raw):

#!/usr/bin/python # -*- coding: utf-8 -*- # 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/. from __future__ import (absolute_import, division, print_function) __metaclass__ = type ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ['preview'], 'supported_by': 'community'} DOCUMENTATION = ''' --- module: ali_disk_info short_description: Gather facts on disks of Alibaba Cloud ECS. description: - This module fetches data from the Open API in Alicloud. The module must be called from within the ECS disk itself. options: name_prefix: description: - Use a disk name prefix to filter disks. type: str filters: description: - A dict of filters to apply. Each dict item consists of a filter key and a filter value. The filter keys can be all of request parameters. See U(https://www.alibabacloud.com/help/zh/doc-detail/25514.htm) for parameter details. Filter keys can be same as request parameter name or be lower case and use underscore ("_") or dash ("-") to connect different words in one parameter. type: dict tags: description: - A hash/dictionaries of disk tags. C({"key":"value"}) type: dict author: - "He Guimin (@xiaozhu36)" requirements: - "python >= 3.6" - "footmark >= 1.19.0" extends_documentation_fragment: - alicloud ''' EXAMPLES = ''' # Fetch disk details according to setting different filters - name: Filter disk using filters ali_disk_info: filters: disk_ids: ['d-2ze3carakr2qxxxxxx', 'd-2zej6cuwzmummxxxxxx'] zone_id: 'cn-beijing-c' instance_id: 'i-2zeii6c3xxxxxxx' - name: Filter disk using name_prefix ali_disk_info: name_prefix: 'YourDiskNamePrefix' - name: Filter all disks ali_disk_info: ''' RETURN = ''' disk_ids: description: List all disk's id after operating ecs disk. returned: when success type: list sample: ["d-2ze8ohezcyvm4omrabud","d-2zeakwizkdjdu4q4lfco"] disks: description: Details about the ecs disks that were created. returned: when success type: list sample: [ { "attached_time": "2017-08-15T06:47:55Z", "category": "cloud_efficiency", "creation_time": "2017-08-15T06:47:45Z", "delete_auto_snapshot": false, "delete_with_instance": true, "description": "helloworld", "detached_time": "", "device": "/dev/xvda", "disk_charge_type": "PostPaid", "enable_auto_snapshot": true, "encrypted": false, "id": "d-2ze8ohezcyvm4omrabud", "image_id": "ubuntu_140405_32_40G_cloudinit_20161115.vhd", "instance_id": "i-2zegc3s8ihxq2pcysekk", "name": "test1", "operation_locks": { "operation_lock": [] }, "portable": false, "product_code": "", "region_id": "cn-beijing", "size": 40, "snapshop_id": "", "status": "in_use", "type": "system", "zone_id": "cn-beijing-a" }, { "attached_time": "2017-08-13T06:57:37Z", "category": "cloud_efficiency", "creation_time": "2017-08-13T06:57:30Z", "delete_auto_snapshot": false, "delete_with_instance": true, "description": "", "detached_time": "", "device": "/dev/xvda", "disk_charge_type": "PostPaid", "enable_auto_snapshot": true, "encrypted": false, "id": "d-2zeakwizkdjdu4q4lfco", "image_id": "ubuntu_140405_64_40G_cloudinit_20161115.vhd", "instance_id": "i-2zeenj8meljkoi85lz3c", "name": "test2", "operation_locks": { "operation_lock": [] }, "portable": false, "product_code": "", "region_id": "cn-beijing", "size": 40, "snapshop_id": "", "status": "in_use", "type": "system", "zone_id": "cn-beijing-a" } ] total: description: The number of all disks after operating ecs disk. returned: when success type: int sample: 2 ''' from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.alicloud_ecs import ecs_argument_spec, ecs_connect HAS_FOOTMARK = False try: from footmark.exception import ECSResponseError HAS_FOOTMARK = True except ImportError: HAS_FOOTMARK = False def main(): argument_spec = ecs_argument_spec() argument_spec.update(dict( filters=dict(type='dict'), name_prefix=dict(type='str'), tags=dict(type='dict') ) ) module = AnsibleModule(argument_spec=argument_spec) if HAS_FOOTMARK is False: module.fail_json(msg='footmark required for this module') ecs = ecs_connect(module) disks = [] disk_ids = [] filters = module.params['filters'] if not filters: filters = {} name_prefix = module.params['name_prefix'] tags = module.params['tags'] for disk in ecs.describe_disks(**filters): if name_prefix and not str(disk.name).startswith(name_prefix): continue if tags: flag = False for key, value in list(tags.items()): if key in list(disk.tags.keys()) and value == disk.tags[key]: flag = True if not flag: continue disks.append(disk.read()) disk_ids.append(disk.id) module.exit_json(changed=False, disk_ids=disk_ids, disks=disks, total=len(disks)) if __name__ == '__main__': main()