13 exec_cmd = common.exec_cmd
14 run_proc = common.run_proc
20 class Deployment(object):
22 def __init__(self, dea, yaml_config_dir, env_id, node_id_roles_dict):
24 self.yaml_config_dir = yaml_config_dir
26 self.node_id_roles_dict = node_id_roles_dict
28 def download_deployment_info(self):
29 log('Download deployment info for environment %s' % self.env_id)
30 deployment_dir = '%s/deployment_%s' \
31 % (self.yaml_config_dir, self.env_id)
32 if os.path.exists(deployment_dir):
33 shutil.rmtree(deployment_dir)
34 exec_cmd('fuel deployment --env %s --download --dir %s'
35 % (self.env_id, self.yaml_config_dir))
37 def upload_deployment_info(self):
38 log('Upload deployment info for environment %s' % self.env_id)
39 exec_cmd('fuel --env %s deployment --upload --dir %s'
40 % (self.env_id, self.yaml_config_dir))
42 def config_opnfv(self):
43 log('Configure OPNFV settings on environment %s' % self.env_id)
44 opnfv_compute = self.dea.get_opnfv('compute')
45 opnfv_controller = self.dea.get_opnfv('controller')
46 self.download_deployment_info()
47 for node_file in glob.glob('%s/deployment_%s/*.yaml'
48 % (self.yaml_config_dir, self.env_id)):
49 with io.open(node_file) as stream:
50 node = yaml.load(stream)
51 if node['role'] == 'compute':
52 node.update(opnfv_compute)
54 node.update(opnfv_controller)
55 with io.open(node_file, 'w') as stream:
56 yaml.dump(node, stream, default_flow_style=False)
57 self.upload_deployment_info()
62 LOG_FILE = 'cloud.log'
64 log('Starting deployment of environment %s' % self.env_id)
65 run_proc('fuel --env %s deploy-changes | strings | tee %s'
66 % (self.env_id, LOG_FILE))
69 for i in range(WAIT_LOOP):
70 env = parse(exec_cmd('fuel env --env %s' % self.env_id))
71 log('Environment status: %s' % env[0][E['status']])
72 r, _ = exec_cmd('tail -2 %s | head -1' % LOG_FILE, False)
75 if env[0][E['status']] == 'operational':
78 elif (env[0][E['status']] == 'error'
79 or env[0][E['status']] == 'stopped'):
82 time.sleep(SLEEP_TIME)
83 exec_cmd('rm %s' % LOG_FILE)
86 log('Environment %s successfully deployed' % self.env_id)
88 err('Deployment failed, environment %s is not operational'
91 def verify_node_status(self):
92 node_list = parse(exec_cmd('fuel node list'))
94 for node in node_list:
95 if node[N['status']] != 'ready':
96 failed_nodes.append((node[N['id']], node[N['status']]))
100 for node, status in failed_nodes:
101 summary += '[node %s, status %s]\n' % (node, status)
102 err('Deployment failed: %s' % summary)
104 def health_check(self):
105 log('Now running sanity and smoke health checks')
106 log(exec_cmd('fuel health --env %s --check sanity,smoke --force'
112 self.verify_node_status()