import pdb
import string
import random
+import re
try:
step_dir = Config().observer_steps_dir
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])
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():