12 step_dir = Config().observer_steps_dir
13 sys_dir = Config().observer_sys_dir
15 step_dir = '/opt/planetstack/observer/steps'
16 sys_dir = '/opt/opencloud'
18 os_template_loader = jinja2.FileSystemLoader( searchpath=step_dir)
19 os_template_env = jinja2.Environment(loader=os_template_loader)
21 def parse_output(msg):
22 lines = msg.splitlines()
27 magic_str = 'ok: [127.0.0.1] => '
28 magic_str2 = 'changed: [127.0.0.1] => '
29 if (l.startswith(magic_str)):
34 elif (l.startswith(magic_str2)):
43 def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
44 return ''.join(random.choice(chars) for _ in range(size))
47 return "'" + s.replace("'", "'\\''") + "'"
49 def run_template(name, opts,path='', expected_num=None):
50 template = os_template_env.get_template(name)
51 buffer = template.render(opts)
54 objname = opts['ansible_tag']
56 objname= id_generator()
58 os.system('mkdir -p %s'%'/'.join([sys_dir,path]))
59 fqp = '/'.join([sys_dir,path,objname])
66 run = os.popen('/opt/planetstack/observer/run_ansible %s'%shellquote(fqp))
67 #run = os.popen('ansible-playbook -v %s'%shellquote(fqp))
72 ok_results = parse_output(msg)
73 if (len(ok_results) != expected_num):
74 raise ValueError('Unexpected num')
76 all_fatal = re.findall(r'^msg: (.*)',msg,re.MULTILINE)
77 all_fatal2 = re.findall(r'^ERROR: (.*)',msg,re.MULTILINE)
80 all_fatal.extend(all_fatal2)
82 error = ' // '.join(all_fatal)
85 raise Exception(error)
90 run_template('ansible/sync_user_deployments.yaml',{ "endpoint" : "http://172.31.38.128:5000/v2.0/",
91 "name" : "Sapan Bhatia",
92 "email": "gwsapan@gmail.com",
95 "admin_password":"6a789bf69dd647e2",
96 "admin_tenant":"admin",
98 "roles":['user','admin'] })