fb78c360aa9ae8ce64c47b64658d284785f5d8c5
[bottlenecks.git] / utils / infra_setup / runner / stack.py
1 #!/usr/bin/env python
2 ##############################################################################
3 # Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
4 #
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9 ##############################################################################
10 '''This file realize the function of use config to be born with a template
11 a template is use to create a stack in openstack.
12 This file will be amended in the furture.'''
13
14 import utils.infra_setup.heat.template as Heat
15
16 class stack_api():
17
18     def from_config_template(stack_info):
19         stack_name = stack_info['name']
20         ext_gw_net = os.environ.get("EXTERNAL_NETWORK")
21         heat_parser = HeatTemplate_Parser()
22         heat_parser.add_security_group(stack_name)
23         heat_parser.add_keypair(stack_name)
24         for network in stack_info['networks']:
25             heat_parser.add_network(stack_name)
26             heat_parser.add_subnet(stack_name,
27                                    stack_info['networks'][network]['cidr'])
28
29             heat_parser.add_router(stack_name, ext_gw_net)
30             heat_parser.add_router_interface(stack_name)
31
32         for server in stack_info['servers']:
33             heat_parser.add_port(server, stack_name)
34             heat_parser.add_floating_ip(server, stack_name, ext_gw_net)
35             heat_parser.add_floating_ip_ass(server)
36             heat_parser.add_server(server,
37                                    stack_info['servers'][server]['image'],
38                                    stack_info['servers'][server]['flavor'],
39                                    stack_info['servers'][server]['user'])
40
41         template = heat_parser.get_template_date()
42         stack = Heat.HeatTemplate(name=stack_name, heat_template=template)
43         try:
44             self.stack = stack.create()
45         except KeyboardInterrupt:
46             sys.exit("\nStack create interrupted")
47         except RuntimeError as err:
48             sys.exit("error: failed to deploy stack: '%s'" % err.args)
49         except Exception as err:
50             sys.exit("error: failed to deploy stack: '%s'" % err)
51
52         for server in stack_info['servers']:
53             if len(server.ports) > 0:
54                 # TODO(hafe) can only handle one internal network for now
55                 port = list(server.ports.values())[0]
56                 server.private_ip = self.stack.outputs[port["stack_name"]]
57
58             if server.floating_ip:
59                 server.public_ip = \
60                     self.stack.outputs[server.floating_ip["stack_name"]]
61