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