diff options
author | liyin <liyin11@huawei.com> | 2017-02-07 11:26:14 +0800 |
---|---|---|
committer | liyin <liyin11@huawei.com> | 2017-02-07 11:26:53 +0800 |
commit | fd7583e843493495e5e15f62b5f7d9ca484bf167 (patch) | |
tree | 9a027c5497f867a48ceb7dba132714d8e62a53ec /utils | |
parent | cb7f830d3e4a2a5665ff95687838c80a353687bf (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-x | utils/infra_setup/heat/template.py | 15 | ||||
-rw-r--r-- | utils/parser.py | 201 |
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 + |