Created
March 20, 2015 05:16
-
-
Save benbramley/df51c2548ff8ceeafa5b to your computer and use it in GitHub Desktop.
Ansible lookup plugin for XML files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from ansible import utils, errors | |
import os | |
import xml.etree.ElementTree as etree | |
class LookupModule(object): | |
def __init__(self, basedir=None, **kwargs): | |
self.basedir = basedir | |
def tostr(self, node): | |
if isinstance(node, etree._Element): | |
if len(node.getchildren()) == 0: | |
return node.text | |
return etree.tostring(node) | |
return str(node) | |
def read_xml(self, filename, dflt=None, xpath=None): | |
try: | |
xmlreader = etree.parse(filename) | |
nodes = xmlreader.findall(xpath) | |
values = [self.tostr(node) for node in nodes] | |
return values | |
except Exception, e: | |
raise errors.AnsibleError("xmlfile: %s" % str(e)) | |
return dflt | |
def run(self, terms, inject=None, **kwargs): | |
terms = utils.listify_lookup_plugin_terms(terms, self.basedir, inject) | |
if isinstance(terms, basestring): | |
terms = [ terms ] | |
ret = [] | |
for term in terms: | |
params = term.split() | |
key = params[0] | |
paramvals = { | |
'file' : 'ansible.xml', | |
'default' : None, | |
'xpath' : None, | |
} | |
# parameters specified? | |
try: | |
for param in params: | |
name, value = param.split('=') | |
assert(name in paramvals) | |
paramvals[name] = value | |
except (ValueError, AssertionError), e: | |
raise errors.AnsibleError(e) | |
path = utils.path_dwim(self.basedir, paramvals['file']) | |
var = self.read_xml(path, paramvals['default'], paramvals['xpath']) | |
if var is not None: | |
if type(var) is list: | |
for v in var: | |
ret.append(v) | |
else: | |
ret.append(var) | |
return ret |
in case some one want to perform lookup using ansible-xml
- name: playing with ansible xml
xml:
path: /root/akhil/config.xml
xpath: //name[text()='hive.cli.print.header']/../value
content: text
register: header_value
- name: debug hits
debug:
msg: "var hits = {{ header_value.matches[0].value }}"
reference - https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/files/xml.py#L181
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I created a version for Ansible 2.0 based off of yours that should function the same: https://gist.github.com/danieldbower/7b34c45ad5e39576e2e5