dac2fe8dd36860c318885485f51b83ad9b8536a8
[fuel.git] / deploy / cloud / deploy.py
1 ###############################################################################
2 # Copyright (c) 2015 Ericsson AB and others.
3 # szilard.cserey@ericsson.com
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ###############################################################################
9
10
11 from dea import DeploymentEnvironmentAdapter
12 from configure_environment import ConfigureEnvironment
13 from deployment import Deployment
14
15 from common import (
16     R,
17     exec_cmd,
18     parse,
19     check_file_exists,
20     commafy,
21     ArgParser,
22     log,
23 )
24
25 YAML_CONF_DIR = '/var/lib/opnfv'
26
27
28 class Deploy(object):
29
30     def __init__(self, dea_file, no_health_check, deploy_timeout,
31                  no_deploy_environment):
32         self.dea = DeploymentEnvironmentAdapter(dea_file)
33         self.no_health_check = no_health_check
34         self.deploy_timeout = deploy_timeout
35         self.no_deploy_environment = no_deploy_environment
36         self.macs_per_blade = {}
37         self.blades = self.dea.get_node_ids()
38         self.blade_node_dict = self.dea.get_blade_node_map()
39         self.node_roles_dict = {}
40         self.env_id = None
41         self.wanted_release = self.dea.get_property('wanted_release')
42
43     def assign_roles_to_cluster_node_ids(self):
44         self.node_roles_dict = {}
45         for blade, node in self.blade_node_dict.iteritems():
46             if self.dea.get_node_roles(blade):
47                 roles = commafy(self.dea.get_node_roles(blade))
48                 self.node_roles_dict[node] = (roles, blade)
49
50     def configure_environment(self):
51         release_list = parse(exec_cmd('fuel release -l'))
52         for release in release_list:
53             if release[R['name']] == self.wanted_release:
54                 break
55         config_env = ConfigureEnvironment(self.dea, YAML_CONF_DIR,
56                                           release[R['id']],
57                                           self.node_roles_dict)
58         config_env.configure_environment()
59         self.env_id = config_env.env_id
60
61     def deploy_cloud(self):
62         dep = Deployment(self.dea, YAML_CONF_DIR, self.env_id,
63                          self.node_roles_dict, self.no_health_check,
64                          self.deploy_timeout)
65         if not self.no_deploy_environment:
66             dep.deploy()
67         else:
68             log('Configuration is done. Deployment is not launched.')
69
70     def deploy(self):
71
72         self.assign_roles_to_cluster_node_ids()
73
74         self.configure_environment()
75
76         self.deploy_cloud()
77
78
79 def parse_arguments():
80     parser = ArgParser(prog='python %s' % __file__)
81     parser.add_argument('-nh', dest='no_health_check', action='store_true',
82                         default=False,
83                         help='Don\'t run health check after deployment')
84     parser.add_argument('-dt', dest='deploy_timeout', action='store',
85                         default=240, help='Deployment timeout (in minutes) '
86                         '[default: 240]')
87     parser.add_argument('-nde', dest='no_deploy_environment',
88                         action='store_true', default=False,
89                         help=('Do not launch environment deployment'))
90     parser.add_argument('dea_file', action='store',
91                         help='Deployment Environment Adapter: dea.yaml')
92
93     args = parser.parse_args()
94     check_file_exists(args.dea_file)
95
96     kwargs = {'dea_file': args.dea_file,
97               'no_health_check': args.no_health_check,
98               'deploy_timeout': args.deploy_timeout,
99               'no_deploy_environment': args.no_deploy_environment}
100     return kwargs
101
102
103 def main():
104     kwargs = parse_arguments()
105     deploy = Deploy(**kwargs)
106     deploy.deploy()
107
108 if __name__ == '__main__':
109     main()