diff --git a/command b/command index 780e50dd6da..b1a9ce30213 100755 --- a/command +++ b/command @@ -4,17 +4,26 @@ try: import json except ImportError: import simplejson as json + import subprocess import sys import datetime +import traceback args = sys.argv[1:] startd = datetime.datetime.now() -cmd = subprocess.Popen(args, shell=False, - stdout=subprocess.PIPE, stderr=subprocess.PIPE) +try: + cmd = subprocess.Popen(args, shell=False, + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + out, err = cmd.communicate() +except: + print json.dumps({ + "failed" : 1, + "traceback" : traceback.format_exc() + }) + sys.exit(1) -out, err = cmd.communicate() endd = datetime.datetime.now() delta = endd - startd diff --git a/setup b/setup index 77cc1c23005..de52cba7098 100755 --- a/setup +++ b/setup @@ -2,7 +2,6 @@ ANSIBLE_DIR = "/etc/ansible" ANSIBLE_SETUP = "/etc/ansible/setup" -ANSIBLE_TEMPLATES = "/srv/ansible/templates" import sys import os @@ -18,12 +17,6 @@ except ImportError: input_data = sys.argv[1:] new_options = dict([ x.split("=") for x in input_data ]) -# make a directory to store templates -# if it does not already exist - -if not os.path.exists(ANSIBLE_TEMPLATES): - os.makedirs(ANSIBLE_TEMPLATES) - # create the config dir if it doesn't exist if not os.path.exists(ANSIBLE_DIR): diff --git a/template b/template index db68911cea7..5348dd6147b 100644 --- a/template +++ b/template @@ -1,3 +1,72 @@ #!/usr/bin/python -print {} +import sys +import os +import jinja2 +try: + import json +except ImportError: + import simplejson as json + +source = sys.argv[1] +dest = sys.argv[2] +metadata = sys.argv[3] + +# raise an error if there is no template metadata +if not os.path.exists(metadata): + print json.dumps({ + "failed" : 1, + "msg" : "Missing %s, did you run the setup module yet?" % metadata + }) + sys.exit(1) + +# raise an error if we can't parse the template metadata +try: + f = open(metadata) + data = json.loads(f.read()) + f.close() +except: + print json.dumps({ + "failed" : 1, + "msg" : "Failed to parse/load %s, rerun the setup module?" % metadata + }) + sys.exit(1) + +if not os.path.exists(source): + print json.dumps({ + "failed" : 1, + "msg" : "Source template could not be read: %s" % source + }) + sys.exit(1) + +source = file(source).read() + +# record md5sum of original source file so we can report if it changed +changed = False +md5sum = None +if os.path.exists(dest): + md5sum = os.popen("md5sum %s" % dest).read() + +# call Jinja2 here and save the new template file +template = jinja2.Template(source) +data_out = template.render(data) +f = open(dest, "w+") +f.write(data_out) +f.close() + +# TODO: catch templating errors and do not clobber the file on the +# other end unless things were successful + +# record m5sum and return success and whether things have changed +md5sum2 = os.popen("md5sum %s" % dest).read() + +if md5sum != md5sum2: + changed = True + +# mission accomplished +print json.dumps({ + "md5sum" : md5sum2, + "changed" : changed +}) + +