X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fopenstack_observer%2Fansible.py;h=41dc6f0cabceb5936b4a3b15a6659c9883b39387;hb=c2a04089f3a939dcbeac87ad2757f4827f8ca13d;hp=8570c17292b65a8ae1c8cf42720dd696642fbe82;hpb=119eeed7783d2e26805685527eb779083dd10f9f;p=plstackapi.git diff --git a/planetstack/openstack_observer/ansible.py b/planetstack/openstack_observer/ansible.py old mode 100755 new mode 100644 index 8570c17..41dc6f0 --- a/planetstack/openstack_observer/ansible.py +++ b/planetstack/openstack_observer/ansible.py @@ -6,6 +6,7 @@ import json import pdb import string import random +import re try: step_dir = Config().observer_steps_dir @@ -42,17 +43,18 @@ def parse_output(msg): def id_generator(size=6, chars=string.ascii_uppercase + string.digits): return ''.join(random.choice(chars) for _ in range(size)) -def run_template(name, opts,path=''): +def shellquote(s): + return "'" + s.replace("'", "'\\''") + "'" + +def run_template(name, opts,path='', expected_num=None): template = os_template_env.get_template(name) buffer = template.render(opts) - import pdb - - #f = open('/tmp/obsans','w') try: objname = opts['ansible_tag'] except: objname= id_generator() + os.system('mkdir -p %s'%'/'.join([sys_dir,path])) fqp = '/'.join([sys_dir,path,objname]) @@ -61,16 +63,27 @@ def run_template(name, opts,path=''): f.write(buffer) f.flush() - #os.system('cp %s %s-backup'%(fqp,fqp)) - run = os.popen('/opt/planetstack/observer/run_ansible '+fqp) + run = os.popen('/opt/planetstack/observer/run_ansible %s'%shellquote(fqp)) + #run = os.popen('ansible-playbook -v %s'%shellquote(fqp)) msg = run.read() status = run.close() try: ok_results = parse_output(msg) + if (len(ok_results) != expected_num): + raise ValueError('Unexpected num') except ValueError,e: - print str(e) - raise e + all_fatal = re.findall(r'^msg: (.*)',msg,re.MULTILINE) + all_fatal2 = re.findall(r'^ERROR: (.*)',msg,re.MULTILINE) + + + all_fatal.extend(all_fatal2) + try: + error = ' // '.join(all_fatal) + except: + pass + raise Exception(error) + return ok_results def main():