2 ##############################################################################
3 # Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
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.'''
14 import utils.infra_setup.heat.template as Heat
17 import utils.parser as Parser
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'])
36 heat_parser.add_router(stack_name, ext_gw_net)
37 heat_parser.add_router_interface(stack_name)
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'])
48 template = heat_parser.get_template_date()
49 stack = Heat.HeatTemplate(name=stack_name, heat_template=template)
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)
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"]]
65 if server.floating_ip:
67 self.stack.outputs[server.floating_ip["stack_name"]]