blob: 96c8b7f0d0dddad8ae5f5b1bad0e384036d36d6d [file] [log] [blame]
S.Çağlar Onur3e92b4d2015-02-09 13:34:11 -05001#!/usr/bin/env python
Sapan Bhatia88181f22014-11-19 15:25:38 -05002import jinja2
3import tempfile
4import os
5import json
Sapan810240c2014-12-02 23:50:37 -05006import pdb
7import string
8import random
Sapan Bhatia58da6612015-01-23 16:15:37 +00009import re
Sapan Bhatia8034bac2015-04-15 13:04:08 -040010from xos.config import Config
Sapan Bhatia88181f22014-11-19 15:25:38 -050011
Scott Baker7069c162015-02-04 16:59:45 -080012# XXX hardcoded path
Scott Baker86e132c2015-02-11 21:38:09 -080013# is there any reason why we aren't importing xos.config ?
Scott Baker06116da2015-02-04 21:50:08 -080014XOS_DIR="/opt/xos"
Scott Baker7069c162015-02-04 16:59:45 -080015
Sapan Bhatia88181f22014-11-19 15:25:38 -050016try:
17 step_dir = Config().observer_steps_dir
Sapan810240c2014-12-02 23:50:37 -050018 sys_dir = Config().observer_sys_dir
Sapan Bhatia88181f22014-11-19 15:25:38 -050019except:
Scott Baker7069c162015-02-04 16:59:45 -080020 step_dir = XOS_DIR + '/observer/steps'
Sapan810240c2014-12-02 23:50:37 -050021 sys_dir = '/opt/opencloud'
Sapan Bhatia88181f22014-11-19 15:25:38 -050022
23os_template_loader = jinja2.FileSystemLoader( searchpath=step_dir)
24os_template_env = jinja2.Environment(loader=os_template_loader)
25
26def parse_output(msg):
27 lines = msg.splitlines()
28 results = []
29 print msg
30
31 for l in lines:
Sapan810240c2014-12-02 23:50:37 -050032 magic_str = 'ok: [127.0.0.1] => '
33 magic_str2 = 'changed: [127.0.0.1] => '
Sapan Bhatia88181f22014-11-19 15:25:38 -050034 if (l.startswith(magic_str)):
Sapan810240c2014-12-02 23:50:37 -050035 w = len(magic_str)
36 str = l[w:]
37 d = json.loads(str)
38 results.append(d)
39 elif (l.startswith(magic_str2)):
40 w = len(magic_str2)
41 str = l[w:]
42 d = json.loads(str)
43 results.append(d)
Sapan Bhatia88181f22014-11-19 15:25:38 -050044
45
46 return results
Sapan810240c2014-12-02 23:50:37 -050047
48def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
49 return ''.join(random.choice(chars) for _ in range(size))
50
Sapan Bhatia58da6612015-01-23 16:15:37 +000051def shellquote(s):
52 return "'" + s.replace("'", "'\\''") + "'"
53
54def run_template(name, opts,path='', expected_num=None):
Sapan Bhatia88181f22014-11-19 15:25:38 -050055 template = os_template_env.get_template(name)
56 buffer = template.render(opts)
Sapan810240c2014-12-02 23:50:37 -050057
Sapan810240c2014-12-02 23:50:37 -050058 try:
59 objname = opts['ansible_tag']
60 except:
61 objname= id_generator()
Sapan Bhatia58da6612015-01-23 16:15:37 +000062
Sapan810240c2014-12-02 23:50:37 -050063 os.system('mkdir -p %s'%'/'.join([sys_dir,path]))
64 fqp = '/'.join([sys_dir,path,objname])
65
Sapan Bhatia6d6b76c2015-03-13 18:43:46 -040066
Sapan810240c2014-12-02 23:50:37 -050067 f = open(fqp,'w')
Sapan Bhatia88181f22014-11-19 15:25:38 -050068 f.write(buffer)
69 f.flush()
Sapan810240c2014-12-02 23:50:37 -050070
Sapan Bhatia01dd5d22015-03-13 18:51:02 -040071
72 if (Config().observer_steps):
73 run = os.popen(XOS_DIR + '/observer/run_ansible %s'%shellquote(fqp))
74 msg = run.read()
75 status = run.close()
Sapan Bhatia88181f22014-11-19 15:25:38 -050076
Sapan Bhatia01dd5d22015-03-13 18:51:02 -040077
78 else:
79 msg = open(fqp+'.out').read()
80
Sapan Bhatia6d6b76c2015-03-13 18:43:46 -040081 try:
82 ok_results = parse_output(msg)
Sapan Bhatia01dd5d22015-03-13 18:51:02 -040083 if (len(ok_results) != expected_num):
84 raise ValueError('Unexpected num')
Sapan Bhatia6d6b76c2015-03-13 18:43:46 -040085 except ValueError,e:
86 all_fatal = re.findall(r'^msg: (.*)',msg,re.MULTILINE)
87 all_fatal2 = re.findall(r'^ERROR: (.*)',msg,re.MULTILINE)
Sapan Bhatia01dd5d22015-03-13 18:51:02 -040088
89
90 all_fatal.extend(all_fatal2)
Sapan Bhatiab2cef882014-12-21 02:33:13 -050091 try:
Sapan Bhatia6d6b76c2015-03-13 18:43:46 -040092 error = ' // '.join(all_fatal)
93 except:
94 pass
95 raise Exception(error)
Sapan Bhatiab2cef882014-12-21 02:33:13 -050096
Sapan Bhatia88181f22014-11-19 15:25:38 -050097 return ok_results
98
99def main():
Sapan810240c2014-12-02 23:50:37 -0500100 run_template('ansible/sync_user_deployments.yaml',{ "endpoint" : "http://172.31.38.128:5000/v2.0/",
101 "name" : "Sapan Bhatia",
102 "email": "gwsapan@gmail.com",
103 "password": "foobar",
104 "admin_user":"admin",
105 "admin_password":"6a789bf69dd647e2",
106 "admin_tenant":"admin",
107 "tenant":"demo",
108 "roles":['user','admin'] })