From 38d9dc8bffd053d06a0b39f79fa40e8c23cc1195 Mon Sep 17 00:00:00 2001 From: Jan-Piet Mens Date: Fri, 9 Nov 2012 11:06:49 +0100 Subject: [PATCH] Add DNS TXT record LOOKUP plugin --- lib/ansible/runner/lookup_plugins/dnstxt.py | 51 +++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 lib/ansible/runner/lookup_plugins/dnstxt.py diff --git a/lib/ansible/runner/lookup_plugins/dnstxt.py b/lib/ansible/runner/lookup_plugins/dnstxt.py new file mode 100644 index 0000000000..a26fa28f82 --- /dev/null +++ b/lib/ansible/runner/lookup_plugins/dnstxt.py @@ -0,0 +1,51 @@ +# (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 ansible import utils, errors +import os +HAVE_DNS=False +try: + import dns.resolver + HAVE_DNS=True +except ImportError: + pass + +# ============================================================== +# DNSTXT: DNS TXT records +# +# key=domainname +# TODO: configurable resolver IPs +# -------------------------------------------------------------- + +class LookupModule(object): + + def __init__(self, basedir=None, **kwargs): + self.basedir = basedir + + if HAVE_DNS == False: + raise errors.AnsibleError("Can't LOOKUP(dnstxt): module dns.resolver is not installed") + + def run(self, terms, **kwargs): + + domain = terms.split()[0] + string = [] + 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 + + return ''.join(string)