lib/ansible/modules/cloud/alicloud/_ali_oss_bucket_facts.py (130 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/. ANSIBLE_METADATA = {'metadata_version': '1.1', 'status': ['preview'], 'supported_by': 'community'} DOCUMENTATION = ''' --- module: ali_oss_bucket_facts version_added: "1.5.0" short_description: Gather facts on buckets of Alibaba Cloud OSS. description: - This module fetches data from the Open API in Alicloud. The module must be called from within the OSS bucket itself. options: bucket: description: - OSS bucket name. aliases: [ 'name' ] bucket_prefix: description: - Prefix of OSS bucket name. author: - "He Guimin (@xiaozhu36)" requirements: - "python >= 2.6" - "footmark" extends_documentation_fragment: - alicloud ''' EXAMPLES = ''' # # provisioning list oss buckets # # Basic provisioning example to create bucket - name: List buckets detail 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 bucket: buctest1 bucket_prefix: buctest1 tasks: - name: List all buckets in the specified region ali_oss_bucket_facts: alicloud_access_key: '{{ alicloud_access_key }}' alicloud_secret_key: '{{ alicloud_secret_key }}' alicloud_region: '{{ alicloud_region }}' bucket: '{{ bucket }}' register: all_buckets - debug: var=all_buckets - name: List all buckets in the specified region by name ali_oss_bucket_facts: alicloud_access_key: '{{ alicloud_access_key }}' alicloud_secret_key: '{{ alicloud_secret_key }}' alicloud_region: '{{ alicloud_region }}' bucket: '{{ bucket }}' bucket_prefix: '{{ bucket_prefix }}' register: buckets_by_name - debug: var=buckets_by_name ''' RETURN = ''' bucket_names: description: List all bucket's names in specified region. returned: when success type: list sample: ["xiaozhubucket", "testbucket"] buckets: description: The list all buckets that has the prefix of 'bucket' value in the specified region returned: when list type: list sample: [ { "id": "xiaozhubucket", "location": "oss-cn-beijing", "name": "xiaozhubucket", "permission": "private" }, { "id": "testbucket", "location": "oss-cn-beijing", "name": "testbucket", "permission": "public-read-write" } ] total: description: The number of all buckets available in region. returned: when success type: int sample: 2 ''' from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.alicloud_oss import oss_bucket_argument_spec, oss_bucket_connect, oss_service_connect HAS_FOOTMARK = False try: from footmark.exception import ECSResponseError, OSSResponseError HAS_FOOTMARK = True except ImportError: HAS_FOOTMARK = False def get_info(bucket): return { 'id': bucket.id, 'name': bucket.name, 'permission': bucket.acl, 'location': bucket.location } def main(): argument_spec = oss_bucket_argument_spec() argument_spec.update( dict( bucket=dict(aliases=["name"]), bucket_prefix=dict(type="str") ) ) module = AnsibleModule(argument_spec=argument_spec) if HAS_FOOTMARK is False: module.fail_json(msg="Package 'footmark' required for this module.") try: oss_service = oss_service_connect(module) keys = oss_service.list_buckets(prefix=module.params['bucket_prefix'], max_keys=200) buckets = [] bucket_names = [] for name in keys: module.params['bucket'] = name bucket = oss_bucket_connect(module) buckets.append(get_info(bucket)) bucket_names.append(bucket.name) module.exit_json(changed=False, bucket_names=bucket_names, buckets=buckets, total=len(buckets)) except Exception as e: module.fail_json(msg="Unable to describe buckets, and got an error: {0}.".format(e)) if __name__ == '__main__': main()