Merge "Added support for LBaas v2 multiple listeners" into stable/mitaka

This commit is contained in:
Jenkins
2016-11-23 20:09:01 +00:00
committed by Gerrit Code Review
2 changed files with 138 additions and 8 deletions

View File

@@ -0,0 +1,113 @@
{
"heat_template_version": "2015-10-15",
"description": "Configuration for Haproxy Neutron Loadbalacer V2 service",
"parameters": {
"lb_port": {
"type": "number",
"default": 80,
"description": "Port used by the listener"
},
"lb_port2": {
"type": "number",
"default": 8080,
"description": "Port used by the listener2"
},
"app_port": {
"type": "number",
"default": 80,
"description": "Port used by the servers in pool"
},
"app_port2": {
"type": "number",
"default": 8080,
"description": "Port used by the servers in pool2"
},
"Subnet": {
"type": "string",
"description": "Subnet on which the load balancer will be located"
},
"vip_ip": {
"type": "string",
"description": "VIP IP Address"
},
"service_chain_metadata": {
"type": "string",
"description": "sc metadata"
}
},
"resources": {
"monitor": {
"type": "OS::Neutron::LBaaS::HealthMonitor",
"properties": {
"delay": 3,
"type": "HTTP",
"timeout": 3,
"max_retries": 3,
"pool": {
"get_resource": "pool"
}
}
},
"pool": {
"type": "OS::Neutron::LBaaS::Pool",
"description": "{'app_port_param_name': 'app_port'}",
"properties": {
"lb_algorithm": "ROUND_ROBIN",
"protocol": "HTTP",
"listener": {
"get_resource": "listener"
}
}
},
"pool2": {
"type": "OS::Neutron::LBaaS::Pool",
"description": "{'app_port_param_name': 'app_port2'}",
"properties": {
"lb_algorithm": "ROUND_ROBIN",
"protocol": "HTTP",
"listener": {
"get_resource": "listener2"
}
}
},
"listener": {
"type": "OS::Neutron::LBaaS::Listener",
"properties": {
"loadbalancer": {
"get_resource": "loadbalancer"
},
"protocol": "HTTP",
"protocol_port": {
"get_param": "lb_port"
}
}
},
"listener2": {
"type": "OS::Neutron::LBaaS::Listener",
"properties": {
"loadbalancer": {
"get_resource": "loadbalancer"
},
"protocol": "HTTP",
"protocol_port": {
"get_param": "lb_port2"
}
}
},
"loadbalancer": {
"type": "OS::Neutron::LBaaS::LoadBalancer",
"properties": {
"vip_subnet": {
"get_param": "Subnet"
},
"provider": "loadbalancerv2",
"vip_address": {
"get_param": "vip_ip"
},
"description": {
"get_param": "service_chain_metadata"
}
}
}
}
}

View File

@@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
import ast
import copy
import time
@@ -452,7 +453,8 @@ class HeatDriver(object):
properties_key]['vip']['name'] += ptg_name
def _generate_lbv2_member_template(self, is_template_aws_version,
member_ip, stack_template):
member_ip, stack_template,
pool_name="pool"):
type_key = 'Type' if is_template_aws_version else 'type'
properties_key = ('Properties' if is_template_aws_version
else 'properties')
@@ -466,11 +468,18 @@ class HeatDriver(object):
subnet = stack_template[resources_key][lbaas_loadbalancer_key][
properties_key]['vip_subnet']
app_port = "app_port"
if stack_template[resources_key][pool_name].get("description"):
desc_dict = ast.literal_eval(
stack_template[resources_key][pool_name].get("description"))
if desc_dict.get("app_port_param_name"):
app_port = desc_dict.get("app_port_param_name")
return {type_key: "OS::Neutron::LBaaS::PoolMember",
properties_key: {
"pool": {res_key: "pool"},
"pool": {res_key: pool_name},
"address": member_ip,
"protocol_port": {"get_param": "app_port"},
"protocol_port": {"get_param": app_port},
"subnet": subnet,
"weight": 1}}
@@ -487,12 +496,20 @@ class HeatDriver(object):
member_ips = self._get_member_ips(auth_token, provider_ptg)
if not member_ips:
return
pools = self._get_all_heat_resource_keys(
stack_template[resources_key],
is_template_aws_version,
"OS::Neutron::LBaaS::Pool"
)
if not pools:
return
for member_ip in member_ips:
member_name = 'mem-' + member_ip
stack_template[resources_key][member_name] = (
self._generate_lbv2_member_template(
is_template_aws_version,
member_ip, stack_template))
for pool in pools:
member_name = 'mem-' + member_ip + '-' + pool
stack_template[resources_key][member_name] = (
self._generate_lbv2_member_template(
is_template_aws_version,
member_ip, stack_template, pool_name=pool))
def _generate_pool_members(self, auth_token, stack_template,
config_param_values, provider_ptg,