summaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
authorliyin <liyin11@huawei.com>2017-02-07 11:26:14 +0800
committerliyin <liyin11@huawei.com>2017-02-07 11:26:53 +0800
commitfd7583e843493495e5e15f62b5f7d9ca484bf167 (patch)
tree9a027c5497f867a48ceb7dba132714d8e62a53ec /utils
parentcb7f830d3e4a2a5665ff95687838c80a353687bf (diff)
Bottlenecks stack config parser.
JIRA:BOTTLENECK-126 realize the function of parsering stack config. include the function all the jira mationed. it's important for stack creating. this patch also include manager.py. This file modify some file such like template intial. Change-Id: Iaa6fdbde6bf9cb1ff9875d47268440dfe70ecc49 Signed-off-by: liyin <liyin11@huawei.com>
Diffstat (limited to 'utils')
-rwxr-xr-xutils/infra_setup/heat/template.py15
-rw-r--r--utils/parser.py201
2 files changed, 213 insertions, 3 deletions
diff --git a/utils/infra_setup/heat/template.py b/utils/infra_setup/heat/template.py
index cc652fb4..98a68f7d 100755
--- a/utils/infra_setup/heat/template.py
+++ b/utils/infra_setup/heat/template.py
@@ -7,7 +7,9 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-"""Heat template and stack management"""
+"""Heat template and stack management,
+This file could manage stack include the function:
+create stack delete stack and so on"""
import time
import sys
@@ -131,7 +133,11 @@ class HeatStack(HeatObject):
class HeatTemplate(HeatObject):
'''Describes a Heat template and a method to deploy template to a stack'''
- def __init__(self, name, template_file=None, heat_parameters=None):
+ def __init__(self,
+ name,
+ template_file=None,
+ heat_parameters=None,
+ heat_template=None):
super(HeatTemplate, self).__init__()
self.name = name
self.state = "NOT_CREATED"
@@ -151,7 +157,10 @@ class HeatTemplate(HeatObject):
self._template = template_str
self._parameters = heat_parameters
else:
- sys.exit("\nno such template file.")
+ if heat_template:
+ self._template = heat_template
+ else:
+ sys.exit("can't init template file!")
# holds results of requested output after deployment
self.outputs = {}
diff --git a/utils/parser.py b/utils/parser.py
index c8715859..7b1f4e2e 100644
--- a/utils/parser.py
+++ b/utils/parser.py
@@ -82,3 +82,204 @@ class Parser():
# TO-DO add cli parameters to stack_config.
return test_cfg, stack_cfg
+
+class HeatTemplate_Parser():
+ """parser a Heat template and a method to deploy template to a stack"""
+
+ def __init__(self):
+ self.heat_date = {}
+ self.heat_date["resources"] = {}
+ self.heat_date["outputs"] = {}
+ self.heat_date["heat_template_version"] = "2013-05-23"
+ self.heat_date["description"] = {"Stack built by the bottlenecks"
+ " framework for root."}
+
+ def add_security_group(self, name):
+ """add to the template a Neutron SecurityGroup"""
+ security_name = name + "-security_group"
+ self.heat_date["resources"][security_name] = {
+ "type": "OS::Neutron::SecurityGroup",
+ "properties": {
+ "name": security_name,
+ "description": "Group allowing icmp and upd/tcp on all ports",
+ "rules": [
+ {"remote_ip_prefix": "0.0.0.0/0",
+ "protocol": "tcp",
+ "port_range_min": "1",
+ "port_range_max": "65535"},
+ {"remote_ip_prefix": "0.0.0.0/0",
+ "protocol": "udp",
+ "port_range_min": "1",
+ "port_range_max": "65535"},
+ {"remote_ip_prefix": "0.0.0.0/0",
+ "protocol": "icmp"}
+ ]
+ }
+ }
+
+ self.heat_date["outputs"][security_name] = {
+ "description": "ID of Security Group",
+ "value": {"get_resource": security_name}
+ }
+
+ def add_keypair(self, name):
+ """add to the template a Nova KeyPair"""
+ key_name = name + "key"
+ with open(Parser.root_dir +
+ "utils/infra_setup/"
+ "bottlenecks_key/bottlenecks_key.pub") as f:
+ key_content = f.read()
+ self.heat_date["resources"][key_name] = {
+ "type": "OS::Nova::KeyPair",
+ "properties": {
+ "name": key_name,
+ "public_key": key_content
+ }
+ }
+
+ def add_network(self, name):
+ """add to the template a Neutron Net"""
+ network_name = name + "-net"
+ self.heat_date["resources"][network_name] = {
+ "type": "OS::Neutron::Net",
+ "properties": {"name": network_name}
+ }
+
+ def add_subnet(self, name, cidr):
+ """add to the template a Neutron Subnet"""
+ network_name = name + "-net"
+ subnet_name = name + "-subnet"
+ self.heat_date["resources"][subnet_name] = {
+ "type": "OS::Neutron::Subnet",
+ "depends_on": network_name,
+ "properties": {
+ "name": subnet_name,
+ "cidr": cidr,
+ "network_id": {"get_resource": network_name}
+ }
+ }
+
+ self.heat_date["outputs"][subnet_name] = {
+ "description": "subnet %s ID" % subnet_name,
+ "value": {"get_resource": subnet_name}
+ }
+
+ def add_router(self, name, ext_gw_net):
+ """add to the template a Neutron Router and interface"""
+ router_name = name + "-route"
+ subnet_name = name + "-subnet"
+
+ self.heat_date["resources"][router_name] = {
+ "type": "OS::Neutron::Router",
+ "depends_on": [subnet_name],
+ "properties": {
+ "name": router_name,
+ "external_gateway_info": {
+ "network": ext_gw_net
+ }
+ }
+ }
+
+ def add_router_interface(self, name):
+ """add to the template a Neutron RouterInterface and interface"""
+ router_name = name + "-route"
+ subnet_name = name + "-subnet"
+ router_if_name = name + "-interface"
+
+ self.heat_date["resources"][router_if_name] = {
+ "type": "OS::Neutron::RouterInterface",
+ "depends_on": [router_name, subnet_name],
+ "properties": {
+ "router_id": {"get_resource": router_name},
+ "subnet_id": {"get_resource": subnet_name}
+ }
+ }
+
+ def add_server(self, name, image, flavor, user, ports=None):
+ """add to the template a Nova Server"""
+
+ key_name = "bottlenecks-poscakey"
+ port_name = name + "-port"
+ self.heat_date["resources"][name] = {
+ "type": "OS::Nova::Server",
+ "properties": {
+ "name": name,
+ "flavor": flavor,
+ "image": image,
+ "key_name": {"get_resource": key_name},
+ "admin_user": user,
+ "networks": [{
+ "port": {"get_resource": port_name}
+ }]
+ }
+ }
+
+ self.heat_date["outputs"][name] = {
+ "description": "VM UUID",
+ "value": {"get_resource": name}
+ }
+
+ def add_port(self, name, stack_name=None):
+ """add to the template a named Neutron Port"""
+ network_name = stack_name + "-net"
+ subnet_name = stack_name + "-subnet"
+ port_name = name + "-port"
+ security_name = stack_name + "-security_group"
+
+ self.heat_date["resources"][port_name] = {
+ "type": "OS::Neutron::Port",
+ "depends_on": [subnet_name],
+ "properties": {
+ "name": port_name,
+ "fixed_ips": [{"subnet": {"get_resource": subnet_name}}],
+ "network_id": {"get_resource": network_name},
+ "replacement_policy": "AUTO",
+ "security_groups": [{"get_resource": security_name}]
+ }
+ }
+
+ self.heat_date["outputs"][port_name] = {
+ "description": "Address for interface %s" % port_name,
+ "value": {"get_attr": [port_name, "fixed_ips", 0, "ip_address"]}
+ }
+
+ def add_floating_ip(self, name, stack_name, network_ext):
+ """add to the template a Nova FloatingIP resource
+ see: https://bugs.launchpad.net/heat/+bug/1299259
+ """
+ port_name = name + "-port"
+ floating_ip_name = name + "-floating"
+ router_if_name = stack_name + "-interface"
+
+ self.heat_date["resources"][floating_ip_name] = {
+ "depends_on": [router_if_name, port_name],
+ "type": "OS::Nova::FloatingIP",
+ "properties": {
+ "pool": network_ext,
+ }
+ }
+ self.heat_date['outputs'][floating_ip_name] = {
+ 'description': 'floating ip %s' % name,
+ 'value': {'get_attr': [name, 'ip']}
+ }
+
+ def add_floating_ip_ass(self, name):
+ """add to the template a Nova FloatingIP resource
+ see: https://bugs.launchpad.net/heat/+bug/1299259
+ """
+ port_name = name + "-port"
+ floating_ip_name = name + "-floating"
+ floating_ass = name + "-floating_ass"
+
+ self.heat_date["resources"][floating_ass] = {
+ "type": 'OS::Neutron::FloatingIPAssociation',
+ "depends_on": [port_name, floating_ip_name],
+ "properties": {
+ "floatingip_id": {'get_resource': floating_ip_name},
+ "port_id": {"get_resource": port_name}
+ }
+ }
+
+ def get_template_date(self):
+ return self.heat_date
+