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
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'])
29 heat_parser.add_router(stack_name, ext_gw_net)
30 heat_parser.add_router_interface(stack_name)
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'])
41 template = heat_parser.get_template_date()
42 stack = Heat.HeatTemplate(name=stack_name, heat_template=template)
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)
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"]]
58 if server.floating_ip:
60 self.stack.outputs[server.floating_ip["stack_name"]]