Merge "Added support for LBaas v2 multiple listeners" into stable/mitaka
This commit is contained in:
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user