# (c) 2012, Jan-Piet Mens # # 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 . from __future__ import (absolute_import, division, print_function) __metaclass__ = type HAVE_DNS=False try: import dns.resolver from dns.exception import DNSException HAVE_DNS=True except ImportError: pass from ansible.errors import AnsibleError from ansible.plugins.lookup import LookupBase # ============================================================== # DNSTXT: DNS TXT records # # key=domainname # TODO: configurable resolver IPs # -------------------------------------------------------------- class LookupModule(LookupBase): def run(self, terms, variables=None, **kwargs): if HAVE_DNS is False: raise AnsibleError("Can't LOOKUP(dnstxt): module dns.resolver is not installed") ret = [] for term in terms: domain = term.split()[0] string = [] try: answers = dns.resolver.query(domain, 'TXT') for rdata in answers: s = rdata.to_text() string.append(s[1:-1]) # Strip outside quotes on TXT rdata except dns.resolver.NXDOMAIN: string = 'NXDOMAIN' except dns.resolver.Timeout: string = '' except DNSException as e: raise AnsibleError("dns.resolver unhandled exception", e) ret.append(''.join(string)) return ret