lib/ansible/modules/cloud/alicloud/ali_dns_domain_info.py (111 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_dns_domain_info short_description: Gather info on dns of Alibaba Cloud. description: - This module fetches data from the Open API in Alicloud. The module must be called from within the dns itself. options: domain_name: description: - The name to give your DNS. aliases: ['name'] 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. type: dict requirements: - "python >= 3.6" - "footmark >= 1.15.0" extends_documentation_fragment: - alicloud author: - "He Guimin (@xiaozhu36)" """ EXAMPLES = """ # Note: These examples do not set authentication details, see the Alibaba Cloud Guide for details. - name: Retrieving dns using domain name ali_dns_domain_info: domain_name: '{{ domain_name }}' - name: Retrieving all dns ali_dns_domain_info: """ RETURN = ''' dns: description: info about the DNS that was created or deleted. returned: always type: complex contains: ali_domain: description: Whether it is the domain name of Alibaba Cloud. returned: always type: bool sample: false dns_servers: description: The DNS list of the domain name in the resolution system. returned: always sample: dns_servers: dns_server: - xx1.alidns.com - xx2.alidns.com domain_name: description: The name of domain. returned: always type: str sample: ansiblexxx.abc name: description: alias of 'domain_name'. returned: always type: str sample: ansiblexxx.abc id: description: alias of 'domain_id'. returned: always type: str sample: dns-c2e00da5 puny_code: description: Chinese domain name punycode code, English domain name returned empty type: bool sample: ansiblexxx.abc record_count: description: The number of parsing records contained in the domain name returned: always type: int sample: 0 remark: description: A comment for dns returned: always type: str sample: ansible_test_dns_domain starmark: description: Whether to query the domain name star. returned: always type: bool sample: false domain_id: description: DNS resource id returned: always type: str sample: dns-c2e00da5 version_code: description: Cloud resolution version Code returned: always type: str sample: mianfei version_name: description: Cloud resolution product name returned: always type: str sample: Alibaba Cloud DNS ''' from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.alicloud_ecs import ecs_argument_spec, dns_connect HAS_FOOTMARK = False try: from footmark.exception import DNSResponseError HAS_FOOTMARK = True except ImportError: HAS_FOOTMARK = False def main(): argument_spec = ecs_argument_spec() argument_spec.update(dict( domain_name=dict(type='str', aliases=['name']), filters=dict(type='dict') ) ) module = AnsibleModule(argument_spec=argument_spec) if HAS_FOOTMARK is False: module.fail_json(msg="Package 'footmark' required for this module.") filters = module.params['filters'] if not filters: filters = {} domain_name = module.params['domain_name'] try: dns = [] names = [] for _dns in dns_connect(module).describe_domains(**filters): if domain_name and _dns.domain_name != domain_name: continue dns.append(_dns.read()) names.append(_dns.domain_name) module.exit_json(changed=False, names=names, dns=dns) except Exception as e: module.fail_json(msg=str("Unable to get dns, error:{0}".format(e))) if __name__ == '__main__': main()