Fix code style issues for specificed path
[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 import os
16 import sys
17 import utils.parser as Parser
18
19
20 class stack_api():
21
22     def __init__(self):
23         pass
24
25     def from_config_template(self, stack_info):
26         stack_name = stack_info['name']
27         ext_gw_net = os.environ.get("EXTERNAL_NETWORK")
28         heat_parser = Parser.HeatTemplate_Parser()
29         heat_parser.add_security_group(stack_name)
30         heat_parser.add_keypair(stack_name)
31         for network in stack_info['networks']:
32             heat_parser.add_network(stack_name)
33             heat_parser.add_subnet(stack_name,
34                                    stack_info['networks'][network]['cidr'])
35
36             heat_parser.add_router(stack_name, ext_gw_net)
37             heat_parser.add_router_interface(stack_name)
38
39         for server in stack_info['servers']:
40             heat_parser.add_port(server, stack_name)
41             heat_parser.add_floating_ip(server, stack_name, ext_gw_net)
42             heat_parser.add_floating_ip_ass(server)
43             heat_parser.add_server(server,
44                                    stack_info['servers'][server]['image'],
45                                    stack_info['servers'][server]['flavor'],
46                                    stack_info['servers'][server]['user'])
47
48         template = heat_parser.get_template_date()
49         stack = Heat.HeatTemplate(name=stack_name, heat_template=template)
50         try:
51             self.stack = stack.create()
52         except KeyboardInterrupt:
53             sys.exit("\nStack create interrupted")
54         except RuntimeError as err:
55             sys.exit("error: failed to deploy stack: '%s'" % err.args)
56         except Exception as err:
57             sys.exit("error: failed to deploy stack: '%s'" % err)
58
59         for server in stack_info['servers']:
60             if len(server.ports) > 0:
61                 # TODO(hafe) can only handle one internal network for now
62                 port = list(server.ports.values())[0]
63                 server.private_ip = self.stack.outputs[port["stack_name"]]
64
65             if server.floating_ip:
66                 server.public_ip = \
67                     self.stack.outputs[server.floating_ip["stack_name"]]