aboutsummaryrefslogtreecommitdiffstats
path: root/network
diff options
context:
space:
mode:
Diffstat (limited to 'network')
-rw-r--r--network/config/bond-with-vlans/controller-v6.yaml180
-rw-r--r--network/config/multiple-nics/controller-v6.yaml174
-rw-r--r--network/config/single-nic-vlans/controller-v6.yaml158
-rw-r--r--network/config/single-nic-vlans/controller.yaml2
-rwxr-xr-xnetwork/endpoints/build_endpoint_map.py277
-rw-r--r--network/endpoints/endpoint.yaml60
-rw-r--r--network/endpoints/endpoint_data.yaml194
-rw-r--r--network/endpoints/endpoint_map.yaml2470
-rw-r--r--network/external_v6.yaml69
-rw-r--r--network/internal_api_v6.yaml69
-rw-r--r--network/ports/ctlplane_vip.yaml9
-rw-r--r--network/ports/external.yaml9
-rw-r--r--network/ports/external_from_pool.yaml9
-rw-r--r--network/ports/external_v6.yaml68
-rw-r--r--network/ports/from_service.yaml3
-rw-r--r--network/ports/internal_api.yaml10
-rw-r--r--network/ports/internal_api_from_pool.yaml9
-rw-r--r--network/ports/internal_api_v6.yaml63
-rw-r--r--network/ports/management.yaml15
-rw-r--r--network/ports/management_from_pool.yaml46
-rw-r--r--network/ports/management_v6.yaml54
-rw-r--r--network/ports/net_ip_map.yaml36
-rw-r--r--network/ports/net_vip_map_external.yaml25
-rw-r--r--network/ports/noop.yaml3
-rw-r--r--network/ports/storage.yaml9
-rw-r--r--network/ports/storage_from_pool.yaml9
-rw-r--r--network/ports/storage_mgmt.yaml10
-rw-r--r--network/ports/storage_mgmt_from_pool.yaml9
-rw-r--r--network/ports/storage_mgmt_v6.yaml63
-rw-r--r--network/ports/storage_v6.yaml63
-rw-r--r--network/ports/tenant.yaml9
-rw-r--r--network/ports/tenant_from_pool.yaml9
-rw-r--r--network/ports/tenant_v6.yaml63
-rw-r--r--network/ports/vip.yaml9
-rw-r--r--network/ports/vip_v6.yaml65
-rw-r--r--network/storage_mgmt_v6.yaml69
-rw-r--r--network/storage_v6.yaml69
-rw-r--r--network/tenant_v6.yaml69
38 files changed, 3949 insertions, 588 deletions
diff --git a/network/config/bond-with-vlans/controller-v6.yaml b/network/config/bond-with-vlans/controller-v6.yaml
new file mode 100644
index 00000000..7869ebfc
--- /dev/null
+++ b/network/config/bond-with-vlans/controller-v6.yaml
@@ -0,0 +1,180 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Software Config to drive os-net-config with 2 bonded nics on a bridge
+ with VLANs attached for the controller role with IPv6 on the External
+ network. The IPv6 default route is on the External network, and the
+ IPv4 default route is on the Control Plane.
+
+parameters:
+ ControlPlaneIp:
+ default: ''
+ description: IP address/subnet on the ctlplane network
+ type: string
+ ExternalIpSubnet:
+ default: ''
+ description: IP address/subnet on the external network
+ type: string
+ InternalApiIpSubnet:
+ default: ''
+ description: IP address/subnet on the internal API network
+ type: string
+ StorageIpSubnet:
+ default: ''
+ description: IP address/subnet on the storage network
+ type: string
+ StorageMgmtIpSubnet:
+ default: ''
+ description: IP address/subnet on the storage mgmt network
+ type: string
+ TenantIpSubnet:
+ default: ''
+ description: IP address/subnet on the tenant network
+ type: string
+ ManagementIpSubnet: # Only populated when including environments/network-management.yaml
+ default: ''
+ description: IP address/subnet on the management network
+ type: string
+ BondInterfaceOvsOptions:
+ default: 'bond_mode=active-backup'
+ description: The ovs_options string for the bond interface. Set things like
+ lacp=active and/or bond_mode=balance-slb using this option.
+ type: string
+ ExternalNetworkVlanID:
+ default: 10
+ description: Vlan ID for the external network traffic.
+ type: number
+ InternalApiNetworkVlanID:
+ default: 20
+ description: Vlan ID for the internal_api network traffic.
+ type: number
+ StorageNetworkVlanID:
+ default: 30
+ description: Vlan ID for the storage network traffic.
+ type: number
+ StorageMgmtNetworkVlanID:
+ default: 40
+ description: Vlan ID for the storage mgmt network traffic.
+ type: number
+ TenantNetworkVlanID:
+ default: 50
+ description: Vlan ID for the tenant network traffic.
+ type: number
+ ManagementNetworkVlanID:
+ default: 60
+ description: Vlan ID for the management network traffic.
+ type: number
+ ExternalInterfaceDefaultRoute:
+ default: '10.0.0.1'
+ description: default route for the external network
+ type: string
+ ControlPlaneSubnetCidr: # Override this via parameter_defaults
+ default: '24'
+ description: The subnet CIDR of the control plane network.
+ type: string
+ ControlPlaneDefaultRoute: # Override this via parameter_defaults
+ description: The default route of the control plane network.
+ type: string
+ DnsServers: # Override this via parameter_defaults
+ default: []
+ description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
+ type: comma_delimited_list
+ EC2MetadataIp: # Override this via parameter_defaults
+ description: The IP address of the EC2 metadata server.
+ type: string
+
+resources:
+ OsNetConfigImpl:
+ type: OS::Heat::StructuredConfig
+ properties:
+ group: os-apply-config
+ config:
+ os_net_config:
+ network_config:
+ -
+ type: interface
+ name: nic1
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask:
+ list_join:
+ - '/'
+ - - {get_param: ControlPlaneIp}
+ - {get_param: ControlPlaneSubnetCidr}
+ routes:
+ -
+ ip_netmask: 169.254.169.254/32
+ next_hop: {get_param: EC2MetadataIp}
+ -
+ default: true
+ next_hop: {get_param: ControlPlaneDefaultRoute}
+ -
+ type: ovs_bridge
+ name: {get_input: bridge_name}
+ dns_servers: {get_param: DnsServers}
+ members:
+ -
+ type: ovs_bond
+ name: bond1
+ ovs_options: {get_param: BondInterfaceOvsOptions}
+ members:
+ -
+ type: interface
+ name: nic2
+ primary: true
+ -
+ type: interface
+ name: nic3
+ -
+ type: vlan
+ device: bond1
+ vlan_id: {get_param: ExternalNetworkVlanID}
+ addresses:
+ -
+ ip_netmask: {get_param: ExternalIpSubnet}
+ routes:
+ -
+ default: true
+ next_hop: {get_param: ExternalInterfaceDefaultRoute}
+ -
+ type: vlan
+ device: bond1
+ vlan_id: {get_param: InternalApiNetworkVlanID}
+ addresses:
+ -
+ ip_netmask: {get_param: InternalApiIpSubnet}
+ -
+ type: vlan
+ device: bond1
+ vlan_id: {get_param: StorageNetworkVlanID}
+ addresses:
+ -
+ ip_netmask: {get_param: StorageIpSubnet}
+ -
+ type: vlan
+ device: bond1
+ vlan_id: {get_param: StorageMgmtNetworkVlanID}
+ addresses:
+ -
+ ip_netmask: {get_param: StorageMgmtIpSubnet}
+ -
+ type: vlan
+ device: bond1
+ vlan_id: {get_param: TenantNetworkVlanID}
+ addresses:
+ -
+ ip_netmask: {get_param: TenantIpSubnet}
+ # Uncomment when including environments/network-management.yaml
+ #-
+ # type: vlan
+ # device: bond1
+ # vlan_id: {get_param: ManagementNetworkVlanID}
+ # addresses:
+ # -
+ # ip_netmask: {get_param: ManagementIpSubnet}
+
+outputs:
+ OS::stack_id:
+ description: The OsNetConfigImpl resource.
+ value: {get_resource: OsNetConfigImpl}
diff --git a/network/config/multiple-nics/controller-v6.yaml b/network/config/multiple-nics/controller-v6.yaml
new file mode 100644
index 00000000..b69879fb
--- /dev/null
+++ b/network/config/multiple-nics/controller-v6.yaml
@@ -0,0 +1,174 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Software Config to drive os-net-config to configure multiple interfaces
+ for the controller role with IPv6 on the External network. The IPv6
+ default route is on the External network, and the IPv4 default route
+ is on the Control Plane.
+
+parameters:
+ ControlPlaneIp:
+ default: ''
+ description: IP address/subnet on the ctlplane network
+ type: string
+ ExternalIpSubnet:
+ default: ''
+ description: IP address/subnet on the external network
+ type: string
+ InternalApiIpSubnet:
+ default: ''
+ description: IP address/subnet on the internal API network
+ type: string
+ StorageIpSubnet:
+ default: ''
+ description: IP address/subnet on the storage network
+ type: string
+ StorageMgmtIpSubnet:
+ default: ''
+ description: IP address/subnet on the storage mgmt network
+ type: string
+ TenantIpSubnet:
+ default: ''
+ description: IP address/subnet on the tenant network
+ type: string
+ ManagementIpSubnet: # Only populated when including environments/network-management.yaml
+ default: ''
+ description: IP address/subnet on the management network
+ type: string
+ ExternalNetworkVlanID:
+ default: 10
+ description: Vlan ID for the external network traffic.
+ type: number
+ InternalApiNetworkVlanID:
+ default: 20
+ description: Vlan ID for the internal_api network traffic.
+ type: number
+ StorageNetworkVlanID:
+ default: 30
+ description: Vlan ID for the storage network traffic.
+ type: number
+ StorageMgmtNetworkVlanID:
+ default: 40
+ description: Vlan ID for the storage mgmt network traffic.
+ type: number
+ TenantNetworkVlanID:
+ default: 50
+ description: Vlan ID for the tenant network traffic.
+ type: number
+ ManagementNetworkVlanID:
+ default: 60
+ description: Vlan ID for the management network traffic.
+ type: number
+ ExternalInterfaceDefaultRoute:
+ default: '10.0.0.1'
+ description: default route for the external network
+ type: string
+ ControlPlaneSubnetCidr: # Override this via parameter_defaults
+ default: '24'
+ description: The subnet CIDR of the control plane network.
+ type: string
+ ControlPlaneDefaultRoute: # Override this via parameter_defaults
+ description: The default route of the control plane network.
+ type: string
+ DnsServers: # Override this via parameter_defaults
+ default: []
+ description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
+ type: comma_delimited_list
+ EC2MetadataIp: # Override this via parameter_defaults
+ description: The IP address of the EC2 metadata server.
+ type: string
+
+resources:
+ OsNetConfigImpl:
+ type: OS::Heat::StructuredConfig
+ properties:
+ group: os-apply-config
+ config:
+ os_net_config:
+ network_config:
+ -
+ type: interface
+ name: nic1
+ use_dhcp: false
+ dns_servers: {get_param: DnsServers}
+ addresses:
+ -
+ ip_netmask:
+ list_join:
+ - '/'
+ - - {get_param: ControlPlaneIp}
+ - {get_param: ControlPlaneSubnetCidr}
+ routes:
+ -
+ ip_netmask: 169.254.169.254/32
+ next_hop: {get_param: EC2MetadataIp}
+ -
+ default: true
+ next_hop: {get_param: ControlPlaneDefaultRoute}
+ -
+ type: interface
+ name: nic2
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: StorageIpSubnet}
+ -
+ type: interface
+ name: nic3
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: StorageMgmtIpSubnet}
+ -
+ type: interface
+ name: nic4
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: InternalApiIpSubnet}
+ -
+ # Create a bridge which can also be used for VLAN-mode bridge mapping
+ type: ovs_bridge
+ name: br-tenant
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: TenantIpSubnet}
+ members:
+ -
+ type: interface
+ name: nic5
+ use_dhcp: false
+ # force the MAC address of the bridge to this interface
+ primary: true
+ -
+ type: ovs_bridge
+ name: {get_input: bridge_name}
+ dns_servers: {get_param: DnsServers}
+ use_dhcp: false
+ addresses:
+ -
+ ip_netmask: {get_param: ExternalIpSubnet}
+ routes:
+ -
+ default: true
+ next_hop: {get_param: ExternalInterfaceDefaultRoute}
+ members:
+ -
+ type: interface
+ name: nic6
+ # force the MAC address of the bridge to this interface
+ primary: true
+ # Uncomment when including environments/network-management.yaml
+ #-
+ # type: interface
+ # name: nic7
+ # use_dhcp: false
+ # addresses:
+ # -
+ # ip_netmask: {get_param: ManagementIpSubnet}
+
+outputs:
+ OS::stack_id:
+ description: The OsNetConfigImpl resource.
+ value: {get_resource: OsNetConfigImpl}
diff --git a/network/config/single-nic-vlans/controller-v6.yaml b/network/config/single-nic-vlans/controller-v6.yaml
new file mode 100644
index 00000000..472e539d
--- /dev/null
+++ b/network/config/single-nic-vlans/controller-v6.yaml
@@ -0,0 +1,158 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Software Config to drive os-net-config to configure VLANs for the
+ controller role with IPv6 on the External network. The IPv6 default
+ route is on the External network, and the IPv4 default route is on
+ the Control Plane.
+
+parameters:
+ ControlPlaneIp:
+ default: ''
+ description: IP address/subnet on the ctlplane network
+ type: string
+ ExternalIpSubnet:
+ default: ''
+ description: IP address/subnet on the external network
+ type: string
+ InternalApiIpSubnet:
+ default: ''
+ description: IP address/subnet on the internal API network
+ type: string
+ StorageIpSubnet:
+ default: ''
+ description: IP address/subnet on the storage network
+ type: string
+ StorageMgmtIpSubnet:
+ default: ''
+ description: IP address/subnet on the storage mgmt network
+ type: string
+ TenantIpSubnet:
+ default: ''
+ description: IP address/subnet on the tenant network
+ type: string
+ ManagementIpSubnet: # Only populated when including environments/network-management.yaml
+ default: ''
+ description: IP address/subnet on the management network
+ type: string
+ ExternalNetworkVlanID:
+ default: 10
+ description: Vlan ID for the external network traffic.
+ type: number
+ InternalApiNetworkVlanID:
+ default: 20
+ description: Vlan ID for the internal_api network traffic.
+ type: number
+ StorageNetworkVlanID:
+ default: 30
+ description: Vlan ID for the storage network traffic.
+ type: number
+ StorageMgmtNetworkVlanID:
+ default: 40
+ description: Vlan ID for the storage mgmt network traffic.
+ type: number
+ TenantNetworkVlanID:
+ default: 50
+ description: Vlan ID for the tenant network traffic.
+ type: number
+ ManagementNetworkVlanID:
+ default: 60
+ description: Vlan ID for the management network traffic.
+ type: number
+ ExternalInterfaceDefaultRoute:
+ default: '10.0.0.1'
+ description: default route for the external network
+ type: string
+ ControlPlaneSubnetCidr: # Override this via parameter_defaults
+ default: '24'
+ description: The subnet CIDR of the control plane network.
+ type: string
+ ControlPlaneDefaultRoute: # Override this via parameter_defaults
+ description: The default route of the control plane network.
+ type: string
+ DnsServers: # Override this via parameter_defaults
+ default: []
+ description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
+ type: comma_delimited_list
+ EC2MetadataIp: # Override this via parameter_defaults
+ description: The IP address of the EC2 metadata server.
+ type: string
+
+resources:
+ OsNetConfigImpl:
+ type: OS::Heat::StructuredConfig
+ properties:
+ group: os-apply-config
+ config:
+ os_net_config:
+ network_config:
+ -
+ type: ovs_bridge
+ name: {get_input: bridge_name}
+ use_dhcp: false
+ dns_servers: {get_param: DnsServers}
+ addresses:
+ -
+ ip_netmask:
+ list_join:
+ - '/'
+ - - {get_param: ControlPlaneIp}
+ - {get_param: ControlPlaneSubnetCidr}
+ routes:
+ -
+ ip_netmask: 169.254.169.254/32
+ next_hop: {get_param: EC2MetadataIp}
+ -
+ default: true
+ next_hop: {get_param: ControlPlaneDefaultRoute}
+ members:
+ -
+ type: interface
+ name: nic1
+ # force the MAC address of the bridge to this interface
+ primary: true
+ -
+ type: vlan
+ vlan_id: {get_param: ExternalNetworkVlanID}
+ addresses:
+ -
+ ip_netmask: {get_param: ExternalIpSubnet}
+ routes:
+ -
+ default: true
+ next_hop: {get_param: ExternalInterfaceDefaultRoute}
+ -
+ type: vlan
+ vlan_id: {get_param: InternalApiNetworkVlanID}
+ addresses:
+ -
+ ip_netmask: {get_param: InternalApiIpSubnet}
+ -
+ type: vlan
+ vlan_id: {get_param: StorageNetworkVlanID}
+ addresses:
+ -
+ ip_netmask: {get_param: StorageIpSubnet}
+ -
+ type: vlan
+ vlan_id: {get_param: StorageMgmtNetworkVlanID}
+ addresses:
+ -
+ ip_netmask: {get_param: StorageMgmtIpSubnet}
+ -
+ type: vlan
+ vlan_id: {get_param: TenantNetworkVlanID}
+ addresses:
+ -
+ ip_netmask: {get_param: TenantIpSubnet}
+ #- # Uncomment when including environments/network-management.yaml
+ # type: vlan
+ # vlan_id: {get_param: ManagementNetworkVlanID}
+ # addresses:
+ # -
+ # ip_netmask: {get_param: ManagementIpSubnet}
+
+outputs:
+ OS::stack_id:
+ description: The OsNetConfigImpl resource.
+ value: {get_resource: OsNetConfigImpl}
diff --git a/network/config/single-nic-vlans/controller.yaml b/network/config/single-nic-vlans/controller.yaml
index 3b22b36b..a5a0745d 100644
--- a/network/config/single-nic-vlans/controller.yaml
+++ b/network/config/single-nic-vlans/controller.yaml
@@ -111,7 +111,7 @@ resources:
ip_netmask: {get_param: ExternalIpSubnet}
routes:
-
- ip_netmask: 0.0.0.0/0
+ default: true
next_hop: {get_param: ExternalInterfaceDefaultRoute}
-
type: vlan
diff --git a/network/endpoints/build_endpoint_map.py b/network/endpoints/build_endpoint_map.py
new file mode 100755
index 00000000..d8cdee3d
--- /dev/null
+++ b/network/endpoints/build_endpoint_map.py
@@ -0,0 +1,277 @@
+#!/usr/bin/env python
+
+"""
+Generate the endpoint_map.yaml template from data in the endpoint_data.yaml
+file.
+
+By default the files in the same directory as this script are operated on, but
+different files can be optionally specified on the command line.
+
+The --check option verifies that the current output file is up-to-date with the
+latest data in the input file. The script exits with status code 2 if a
+mismatch is detected.
+"""
+
+from __future__ import print_function
+
+
+__all__ = ['load_endpoint_data', 'generate_endpoint_map_template',
+ 'write_template', 'build_endpoint_map', 'check_up_to_date']
+
+
+import collections
+import copy
+import itertools
+import os
+import sys
+import yaml
+
+
+(IN_FILE, OUT_FILE) = ('endpoint_data.yaml', 'endpoint_map.yaml')
+
+SUBST = (SUBST_IP_ADDRESS, SUBST_CLOUDNAME) = ('IP_ADDRESS', 'CLOUDNAME')
+PARAMS = (PARAM_CLOUDNAME, PARAM_ENDPOINTMAP) = ('CloudName', 'EndpointMap')
+FIELDS = (F_PORT, F_PROTOCOL, F_HOST) = ('port', 'protocol', 'host')
+
+ENDPOINT_TYPES = frozenset(['Internal', 'Public', 'Admin'])
+
+
+def get_file(default_fn, override=None, writable=False):
+ if override == '-':
+ if writable:
+ return sys.stdout
+ else:
+ return sys.stdin
+
+ if override is not None:
+ filename = override
+ else:
+ filename = os.path.join(os.path.dirname(__file__), default_fn)
+
+ return open(filename, 'w' if writable else 'r')
+
+
+def load_endpoint_data(infile=None):
+ with get_file(IN_FILE, infile) as f:
+ return yaml.safe_load(f)
+
+
+def vip_param_name(endpoint_type_defn):
+ return endpoint_type_defn['vip_param'] + 'VirtualIP'
+
+
+def vip_param_names(config):
+ def ep_types(svc):
+ return (v for k, v in svc.items() if k in ENDPOINT_TYPES or not k)
+
+ return set(vip_param_name(defn)
+ for svc in config.values() for defn in ep_types(svc))
+
+
+def endpoint_map_default(config):
+ def map_item(ep_name, ep_type, svc):
+ values = collections.OrderedDict([
+ (F_PROTOCOL, svc.get(F_PROTOCOL, 'http')),
+ (F_PORT, str(svc[ep_type].get(F_PORT, svc[F_PORT]))),
+ (F_HOST, SUBST_IP_ADDRESS),
+ ])
+ return ep_name + ep_type, values
+
+ return collections.OrderedDict(map_item(ep_name, ep_type, svc)
+ for ep_name, svc in sorted(config.items())
+ for ep_type in sorted(set(svc) &
+ ENDPOINT_TYPES))
+
+
+def make_parameter(ptype, default, description=None):
+ param = collections.OrderedDict([('type', ptype), ('default', default)])
+ if description is not None:
+ param['description'] = description
+ return param
+
+
+def template_parameters(config):
+ params = collections.OrderedDict((n, make_parameter('string', ''))
+ for n in sorted(vip_param_names(config)))
+
+ params[PARAM_ENDPOINTMAP] = make_parameter('json',
+ endpoint_map_default(config),
+ 'Mapping of service endpoint '
+ '-> protocol. Typically set '
+ 'via parameter_defaults in the '
+ 'resource registry.')
+
+ params[PARAM_CLOUDNAME] = make_parameter('string',
+ 'overcloud',
+ 'The DNS name of this cloud. '
+ 'e.g. ci-overcloud.tripleo.org')
+ return params
+
+
+def template_output_definition(endpoint_name,
+ endpoint_variant,
+ endpoint_type,
+ vip_param,
+ uri_suffix=None,
+ name_override=None):
+ def extract_field(field):
+ assert field in FIELDS
+ return {'get_param': ['EndpointMap',
+ endpoint_name + endpoint_type,
+ copy.copy(field)]}
+
+ port = extract_field(F_PORT)
+ protocol = extract_field(F_PROTOCOL)
+ host = {
+ 'str_replace': collections.OrderedDict([
+ ('template', extract_field(F_HOST)),
+ ('params', {
+ SUBST_IP_ADDRESS: {'get_param': vip_param},
+ SUBST_CLOUDNAME: {'get_param': PARAM_CLOUDNAME},
+ })
+ ])
+ }
+ uri_fields = [protocol, '://', copy.deepcopy(host), ':', port]
+ uri_fields_suffix = (copy.deepcopy(uri_fields) +
+ ([uri_suffix] if uri_suffix is not None else []))
+
+ name = name_override if name_override is not None else (endpoint_name +
+ endpoint_variant +
+ endpoint_type)
+
+ return name, {
+ 'host': host,
+ 'port': extract_field('port'),
+ 'protocol': extract_field('protocol'),
+ 'uri': {
+ 'list_join': ['', uri_fields_suffix]
+ },
+ 'uri_no_suffix': {
+ 'list_join': ['', uri_fields]
+ },
+ }
+
+
+def template_endpoint_items(config):
+ def get_svc_endpoints(ep_name, svc):
+ for ep_type in set(svc) & ENDPOINT_TYPES:
+ defn = svc[ep_type]
+ for variant, suffix in defn.get('uri_suffixes',
+ {'': None}).items():
+ name_override = defn.get('names', {}).get(variant)
+ yield template_output_definition(ep_name, variant, ep_type,
+ vip_param_name(defn),
+ suffix,
+ name_override)
+
+ return itertools.chain.from_iterable(sorted(get_svc_endpoints(ep_name,
+ svc))
+ for (ep_name,
+ svc) in sorted(config.items()))
+
+
+def generate_endpoint_map_template(config):
+ return collections.OrderedDict([
+ ('heat_template_version', '2015-04-30'),
+ ('description', 'A map of OpenStack endpoints. Since the endpoints '
+ 'are URLs, we need to have brackets around IPv6 IP addresses. The '
+ 'inputs to these parameters come from net_ip_uri_map, which will '
+ 'include these brackets in IPv6 addresses.'),
+ ('parameters', template_parameters(config)),
+ ('outputs', {
+ 'endpoint_map': {
+ 'value':
+ collections.OrderedDict(template_endpoint_items(config))
+ }
+ }),
+ ])
+
+
+autogen_warning = """### DO NOT MODIFY THIS FILE
+### This file is automatically generated from endpoint_data.yaml
+### by the script build_endpoint_map.py
+
+"""
+
+
+class TemplateDumper(yaml.SafeDumper):
+ def represent_ordered_dict(self, data):
+ return self.represent_dict(data.items())
+
+
+TemplateDumper.add_representer(collections.OrderedDict,
+ TemplateDumper.represent_ordered_dict)
+
+
+def write_template(template, filename=None):
+ with get_file(OUT_FILE, filename, writable=True) as f:
+ f.write(autogen_warning)
+ yaml.dump(template, f, TemplateDumper, width=68)
+
+
+def read_template(template, filename=None):
+ with get_file(OUT_FILE, filename) as f:
+ return yaml.safe_load(f)
+
+
+def build_endpoint_map(output_filename=None, input_filename=None):
+ if output_filename is not None and output_filename == input_filename:
+ raise Exception('Cannot read from and write to the same file')
+ config = load_endpoint_data(input_filename)
+ template = generate_endpoint_map_template(config)
+ write_template(template, output_filename)
+
+
+def check_up_to_date(output_filename=None, input_filename=None):
+ if output_filename is not None and output_filename == input_filename:
+ raise Exception('Input and output filenames must be different')
+ config = load_endpoint_data(input_filename)
+ template = generate_endpoint_map_template(config)
+ existing_template = read_template(output_filename)
+ return existing_template == template
+
+
+def get_options():
+ from optparse import OptionParser
+
+ parser = OptionParser('usage: %prog'
+ ' [-i INPUT_FILE] [-o OUTPUT_FILE] [--check]',
+ description=__doc__)
+ parser.add_option('-i', '--input', dest='input_file', action='store',
+ default=None,
+ help='Specify a different endpoint data file')
+ parser.add_option('-o', '--output', dest='output_file', action='store',
+ default=None,
+ help='Specify a different endpoint map template file')
+ parser.add_option('-c', '--check', dest='check', action='store_true',
+ default=False, help='Check that the output file is '
+ 'up to date with the data')
+ parser.add_option('-d', '--debug', dest='debug', action='store_true',
+ default=False, help='Print stack traces on error')
+
+ return parser.parse_args()
+
+
+def main():
+ options, args = get_options()
+ if args:
+ print('Warning: ignoring positional args: %s' % ' '.join(args),
+ file=sys.stderr)
+
+ try:
+ if options.check:
+ if not check_up_to_date(options.output_file, options.input_file):
+ print('EndpointMap template does not match input data',
+ file=sys.stderr)
+ sys.exit(2)
+ else:
+ build_endpoint_map(options.output_file, options.input_file)
+ except Exception as exc:
+ if options.debug:
+ raise
+ print('%s: %s' % (type(exc).__name__, str(exc)), file=sys.stderr)
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/network/endpoints/endpoint.yaml b/network/endpoints/endpoint.yaml
deleted file mode 100644
index 6246cfdd..00000000
--- a/network/endpoints/endpoint.yaml
+++ /dev/null
@@ -1,60 +0,0 @@
-heat_template_version: 2015-04-30
-
-description: >
- OpenStack Endpoint
-
-parameters:
- EndpointName:
- type: string
- description: The name of the Endpoint being evaluated
- EndpointMap:
- type: json
- default: {}
- description: Mapping of service endpoint -> protocol. Typically set
- via parameter_defaults in the resource registry.
- IP:
- type: string
- description: The IP address of the Neutron Port that the endpoint is attached to
- UriSuffix:
- type: string
- default: ''
- description: A suffix attached to the URL
- CloudName:
- type: string
- default: ''
- description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
-
-outputs:
- endpoint:
- description: >
- A Hash containing a mapping of service endpoints to ports, protocols, uris
- assigned IPs, and hostnames for a specific endpoint
- value:
- port: {get_param: [EndpointMap, {get_param: EndpointName }, port] }
- protocol: {get_param: [EndpointMap, {get_param: EndpointName }, protocol] }
- ip: {get_param: IP}
- host:
- str_replace:
- template: {get_param: [EndpointMap, {get_param: EndpointName }, host]}
- params: {IP_ADDRESS: {get_param: IP}, CLOUDNAME: {get_param: CloudName}}
- uri:
- list_join:
- - ''
- - - {get_param: [EndpointMap, {get_param: EndpointName }, protocol] }
- - '://'
- - str_replace:
- template: {get_param: [EndpointMap, {get_param: EndpointName }, host]}
- params: {IP_ADDRESS: {get_param: IP}, CLOUDNAME: {get_param: CloudName }}
- - ':'
- - {get_param: [EndpointMap, {get_param: EndpointName }, port] }
- - {get_param: UriSuffix }
- uri_no_suffix:
- list_join:
- - ''
- - - {get_param: [EndpointMap, {get_param: EndpointName }, protocol] }
- - '://'
- - str_replace:
- template: {get_param: [EndpointMap, {get_param: EndpointName }, host]}
- params: {IP_ADDRESS: {get_param: IP}, CLOUDNAME: {get_param: CloudName} }
- - ':'
- - {get_param: [EndpointMap, {get_param: EndpointName }, port] }
diff --git a/network/endpoints/endpoint_data.yaml b/network/endpoints/endpoint_data.yaml
new file mode 100644
index 00000000..7a0bbf4a
--- /dev/null
+++ b/network/endpoints/endpoint_data.yaml
@@ -0,0 +1,194 @@
+# Data in this file is used to generate the endpoint_map.yaml template.
+# Run the script build_endpoint_map.py to regenerate the file.
+
+Ceilometer:
+ Internal:
+ vip_param: CeilometerApi
+ Public:
+ vip_param: Public
+ Admin:
+ vip_param: CeilometerApi
+ port: 8777
+
+Cinder:
+ Internal:
+ vip_param: CinderApi
+ uri_suffixes:
+ '': /v1/%(tenant_id)s
+ V2: /v2/%(tenant_id)s
+ Public:
+ vip_param: Public
+ uri_suffixes:
+ '': /v1/%(tenant_id)s
+ V2: /v2/%(tenant_id)s
+ Admin:
+ vip_param: CinderApi
+ uri_suffixes:
+ '': /v1/%(tenant_id)s
+ V2: /v2/%(tenant_id)s
+ port: 8776
+
+Glance:
+ Internal:
+ vip_param: GlanceApi
+ Public:
+ vip_param: Public
+ Admin:
+ vip_param: GlanceApi
+ port: 9292
+
+GlanceRegistry:
+ Internal:
+ vip_param: GlanceRegistry
+ Public:
+ vip_param: Public
+ Admin:
+ vip_param: GlanceRegistry
+ port: 9191
+
+Mysql:
+ '':
+ vip_param: Mysql
+
+Heat:
+ Internal:
+ vip_param: HeatApi
+ uri_suffixes:
+ '': /v1/%(tenant_id)s
+ Public:
+ vip_param: Public
+ uri_suffixes:
+ '': /v1/%(tenant_id)s
+ Admin:
+ vip_param: HeatApi
+ uri_suffixes:
+ '': /v1/%(tenant_id)s
+ port: 8004
+
+Horizon:
+ Public:
+ vip_param: Public
+ uri_suffixes:
+ '': /dashboard
+ port: 80
+
+Keystone:
+ Internal:
+ vip_param: KeystonePublicApi
+ uri_suffixes:
+ '': /v2.0
+ EC2: /v2.0/ec2tokens
+ names:
+ EC2: KeystoneEC2
+ Public:
+ vip_param: Public
+ uri_suffixes:
+ '': /v2.0
+ Admin:
+ vip_param: KeystoneAdminApi
+ uri_suffixes:
+ '': /v2.0
+ port: 35357
+ port: 5000
+
+# TODO(ayoung): V3 is a temporary fix. Endpoints should be versionless.
+# Required for https://bugs.launchpad.net/puppet-nova/+bug/1542486
+KeystoneV3:
+ Internal:
+ vip_param: KeystonePublicApi
+ uri_suffixes:
+ '': /v3
+ Public:
+ vip_param: Public
+ uri_suffixes:
+ '': /v3
+ Admin:
+ vip_param: KeystoneAdminApi
+ uri_suffixes:
+ '': /v3
+ port: 35357
+ port: 5000
+
+Neutron:
+ Internal:
+ vip_param: NeutronApi
+ Public:
+ vip_param: Public
+ Admin:
+ vip_param: NeutronApi
+ port: 9696
+
+Nova:
+ Internal:
+ vip_param: NovaApi
+ uri_suffixes:
+ '': /v2.1/%(tenant_id)s
+ V3: /v3
+ Public:
+ vip_param: Public
+ uri_suffixes:
+ '': /v2.1/%(tenant_id)s
+ V3: /v3
+ Admin:
+ vip_param: NovaApi
+ uri_suffixes:
+ '': /v2.1/%(tenant_id)s
+ V3: /v3
+ port: 8774
+
+NovaEC2:
+ Internal:
+ vip_param: NovaApi
+ uri_suffixes:
+ '': /services/Cloud
+ Public:
+ vip_param: Public
+ uri_suffixes:
+ '': /services/Cloud
+ Admin:
+ vip_param: NovaApi
+ uri_suffixes:
+ '': /services/Admin
+ port: 8773
+
+NovaVNCProxy:
+ Internal:
+ vip_param: NovaApi
+ Public:
+ vip_param: Public
+ Admin:
+ vip_param: NovaApi
+ port: 6080
+
+Swift:
+ Internal:
+ vip_param: SwiftProxy
+ uri_suffixes:
+ '': /v1/AUTH_%(tenant_id)s
+ S3:
+ Public:
+ vip_param: Public
+ uri_suffixes:
+ '': /v1/AUTH_%(tenant_id)s
+ S3:
+ Admin:
+ vip_param: SwiftProxy
+ uri_suffixes:
+ '':
+ S3:
+ port: 8080
+
+Sahara:
+ Internal:
+ vip_param: SaharaApi
+ uri_suffixes:
+ '': /v1.1/%(tenant_id)s
+ Public:
+ vip_param: SaharaApi
+ uri_suffixes:
+ '': /v1.1/%(tenant_id)s
+ Admin:
+ vip_param: SaharaApi
+ uri_suffixes:
+ '': /v1.1/%(tenant_id)s
+ port: 8386
diff --git a/network/endpoints/endpoint_map.yaml b/network/endpoints/endpoint_map.yaml
index 096ee558..a31094a1 100644
--- a/network/endpoints/endpoint_map.yaml
+++ b/network/endpoints/endpoint_map.yaml
@@ -1,484 +1,2004 @@
-heat_template_version: 2015-04-30
-
-description: >
- A Map of OpenStack Endpoints
+### DO NOT MODIFY THIS FILE
+### This file is automatically generated from endpoint_data.yaml
+### by the script build_endpoint_map.py
+heat_template_version: '2015-04-30'
+description: A map of OpenStack endpoints. Since the endpoints are URLs,
+ we need to have brackets around IPv6 IP addresses. The inputs to these
+ parameters come from net_ip_uri_map, which will include these brackets
+ in IPv6 addresses.
parameters:
- CeilometerApiVirtualIP:
- type: string
- default: ''
- CinderApiVirtualIP:
- type: string
- default: ''
- GlanceApiVirtualIP:
- type: string
- default: ''
- GlanceRegistryVirtualIP:
- type: string
- default: ''
- HeatApiVirtualIP:
- type: string
- default: ''
- KeystoneAdminApiVirtualIP:
- type: string
- default: ''
- KeystonePublicApiVirtualIP:
- type: string
- default: ''
- MysqlVirtualIP:
- type: string
- default: ''
- NeutronApiVirtualIP:
- type: string
- default: ''
- NovaApiVirtualIP:
- type: string
- default: ''
- PublicVirtualIP:
- type: string
- default: ''
- SwiftProxyVirtualIP:
- type: string
- default: ''
- SaharaApiVirtualIP:
- type: string
- default: ''
+ CeilometerApiVirtualIP: {type: string, default: ''}
+ CinderApiVirtualIP: {type: string, default: ''}
+ GlanceApiVirtualIP: {type: string, default: ''}
+ GlanceRegistryVirtualIP: {type: string, default: ''}
+ HeatApiVirtualIP: {type: string, default: ''}
+ KeystoneAdminApiVirtualIP: {type: string, default: ''}
+ KeystonePublicApiVirtualIP: {type: string, default: ''}
+ MysqlVirtualIP: {type: string, default: ''}
+ NeutronApiVirtualIP: {type: string, default: ''}
+ NovaApiVirtualIP: {type: string, default: ''}
+ PublicVirtualIP: {type: string, default: ''}
+ SaharaApiVirtualIP: {type: string, default: ''}
+ SwiftProxyVirtualIP: {type: string, default: ''}
EndpointMap:
type: json
default:
- CeilometerAdmin: {protocol: 'http', port: '8777', host: 'IP_ADDRESS'}
- CeilometerInternal: {protocol: 'http', port: '8777', host: 'IP_ADDRESS'}
- CeilometerPublic: {protocol: 'http', port: '8777', host: 'IP_ADDRESS'}
- CinderAdmin: {protocol: 'http', port: '8776', host: 'IP_ADDRESS'}
- CinderInternal: {protocol: 'http', port: '8776', host: 'IP_ADDRESS'}
- CinderPublic: {protocol: 'http', port: '8776', host: 'IP_ADDRESS'}
- GlanceAdmin: {protocol: 'http', port: '9292', host: 'IP_ADDRESS'}
- GlanceInternal: {protocol: 'http', port: '9292', host: 'IP_ADDRESS'}
- GlancePublic: {protocol: 'http', port: '9292', host: 'IP_ADDRESS'}
- GlanceRegistryAdmin: {protocol: 'http', port: '9191', host: 'IP_ADDRESS'}
- GlanceRegistryInternal: {protocol: 'http', port: '9191', host: 'IP_ADDRESS'}
- GlanceRegistryPublic: {protocol: 'http', port: '9191', host: 'IP_ADDRESS'}
- HeatAdmin: {protocol: 'http', port: '8004', host: 'IP_ADDRESS'}
- HeatInternal: {protocol: 'http', port: '8004', host: 'IP_ADDRESS'}
- HeatPublic: {protocol: 'http', port: '8004', host: 'IP_ADDRESS'}
- HorizonPublic: {protocol: 'http', port: '80', host: 'IP_ADDRESS'}
- KeystoneAdmin: {protocol: 'http', port: '35357', host: 'IP_ADDRESS'}
- KeystoneInternal: {protocol: 'http', port: '5000', host: 'IP_ADDRESS'}
- KeystonePublic: {protocol: 'http', port: '5000', host: 'IP_ADDRESS'}
- NeutronAdmin: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'}
- NeutronInternal: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'}
- NeutronPublic: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'}
- NovaAdmin: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'}
- NovaInternal: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'}
- NovaPublic: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'}
- NovaEC2Admin: {protocol: 'http', port: '8773', host: 'IP_ADDRESS'}
- NovaEC2Internal: {protocol: 'http', port: '8773', host: 'IP_ADDRESS'}
- NovaEC2Public: {protocol: 'http', port: '8773', host: 'IP_ADDRESS'}
- SwiftAdmin: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'}
- SwiftInternal: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'}
- SwiftPublic: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'}
- SaharaAdmin: {protocol: 'http', port: '8386', host: 'IP_ADDRESS'}
- SaharaInternal: {protocol: 'http', port: '8386', host: 'IP_ADDRESS'}
- SaharaPublic: {protocol: 'http', port: '8386', host: 'IP_ADDRESS'}
+ CeilometerAdmin: {protocol: http, port: '8777', host: IP_ADDRESS}
+ CeilometerInternal: {protocol: http, port: '8777', host: IP_ADDRESS}
+ CeilometerPublic: {protocol: http, port: '8777', host: IP_ADDRESS}
+ CinderAdmin: {protocol: http, port: '8776', host: IP_ADDRESS}
+ CinderInternal: {protocol: http, port: '8776', host: IP_ADDRESS}
+ CinderPublic: {protocol: http, port: '8776', host: IP_ADDRESS}
+ GlanceAdmin: {protocol: http, port: '9292', host: IP_ADDRESS}
+ GlanceInternal: {protocol: http, port: '9292', host: IP_ADDRESS}
+ GlancePublic: {protocol: http, port: '9292', host: IP_ADDRESS}
+ GlanceRegistryAdmin: {protocol: http, port: '9191', host: IP_ADDRESS}
+ GlanceRegistryInternal: {protocol: http, port: '9191', host: IP_ADDRESS}
+ GlanceRegistryPublic: {protocol: http, port: '9191', host: IP_ADDRESS}
+ HeatAdmin: {protocol: http, port: '8004', host: IP_ADDRESS}
+ HeatInternal: {protocol: http, port: '8004', host: IP_ADDRESS}
+ HeatPublic: {protocol: http, port: '8004', host: IP_ADDRESS}
+ HorizonPublic: {protocol: http, port: '80', host: IP_ADDRESS}
+ KeystoneAdmin: {protocol: http, port: '35357', host: IP_ADDRESS}
+ KeystoneInternal: {protocol: http, port: '5000', host: IP_ADDRESS}
+ KeystonePublic: {protocol: http, port: '5000', host: IP_ADDRESS}
+ KeystoneV3Admin: {protocol: http, port: '35357', host: IP_ADDRESS}
+ KeystoneV3Internal: {protocol: http, port: '5000', host: IP_ADDRESS}
+ KeystoneV3Public: {protocol: http, port: '5000', host: IP_ADDRESS}
+ NeutronAdmin: {protocol: http, port: '9696', host: IP_ADDRESS}
+ NeutronInternal: {protocol: http, port: '9696', host: IP_ADDRESS}
+ NeutronPublic: {protocol: http, port: '9696', host: IP_ADDRESS}
+ NovaAdmin: {protocol: http, port: '8774', host: IP_ADDRESS}
+ NovaInternal: {protocol: http, port: '8774', host: IP_ADDRESS}
+ NovaPublic: {protocol: http, port: '8774', host: IP_ADDRESS}
+ NovaEC2Admin: {protocol: http, port: '8773', host: IP_ADDRESS}
+ NovaEC2Internal: {protocol: http, port: '8773', host: IP_ADDRESS}
+ NovaEC2Public: {protocol: http, port: '8773', host: IP_ADDRESS}
+ NovaVNCProxyAdmin: {protocol: http, port: '6080', host: IP_ADDRESS}
+ NovaVNCProxyInternal: {protocol: http, port: '6080', host: IP_ADDRESS}
+ NovaVNCProxyPublic: {protocol: http, port: '6080', host: IP_ADDRESS}
+ SaharaAdmin: {protocol: http, port: '8386', host: IP_ADDRESS}
+ SaharaInternal: {protocol: http, port: '8386', host: IP_ADDRESS}
+ SaharaPublic: {protocol: http, port: '8386', host: IP_ADDRESS}
+ SwiftAdmin: {protocol: http, port: '8080', host: IP_ADDRESS}
+ SwiftInternal: {protocol: http, port: '8080', host: IP_ADDRESS}
+ SwiftPublic: {protocol: http, port: '8080', host: IP_ADDRESS}
description: Mapping of service endpoint -> protocol. Typically set
- via parameter_defaults in the resource registry.
- CloudName:
- type: string
- default: overcloud
- description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
-
-resources:
-
- CeilometerInternal:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: CeilometerInternal
- EndpointMap: { get_param: EndpointMap }
- CloudName: {get_param: CloudName}
- IP: {get_param: CeilometerApiVirtualIP}
- CeilometerPublic:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: CeilometerPublic
- EndpointMap: { get_param: EndpointMap }
- CloudName: {get_param: CloudName}
- IP: {get_param: PublicVirtualIP}
- CeilometerAdmin:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: CeilometerAdmin
- EndpointMap: { get_param: EndpointMap }
- CloudName: {get_param: CloudName}
- IP: {get_param: CeilometerApiVirtualIP}
-
- CinderInternal:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: CinderInternal
- EndpointMap: { get_param: EndpointMap }
- CloudName: {get_param: CloudName}
- IP: {get_param: CinderApiVirtualIP}
- UriSuffix: '/v1/%(tenant_id)s'
- CinderPublic:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: CinderPublic
- EndpointMap: { get_param: EndpointMap }
- CloudName: {get_param: CloudName}
- IP: {get_param: PublicVirtualIP}
- UriSuffix: '/v1/%(tenant_id)s'
- CinderAdmin:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: CinderAdmin
- EndpointMap: { get_param: EndpointMap }
- CloudName: {get_param: CloudName}
- IP: {get_param: CinderApiVirtualIP}
- UriSuffix: '/v1/%(tenant_id)s'
-
- CinderV2Internal:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: CinderInternal
- EndpointMap: { get_param: EndpointMap }
- CloudName: {get_param: CloudName}
- IP: {get_param: CinderApiVirtualIP}
- UriSuffix: '/v2/%(tenant_id)s'
- CinderV2Public:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: CinderPublic
- EndpointMap: { get_param: EndpointMap }
- CloudName: {get_param: CloudName}
- IP: {get_param: PublicVirtualIP}
- UriSuffix: '/v2/%(tenant_id)s'
- CinderV2Admin:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: CinderAdmin
- EndpointMap: { get_param: EndpointMap }
- CloudName: {get_param: CloudName}
- IP: {get_param: CinderApiVirtualIP}
- UriSuffix: '/v2/%(tenant_id)s'
-
- GlanceInternal:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: GlanceInternal
- EndpointMap: { get_param: EndpointMap }
- CloudName: {get_param: CloudName}
- IP: {get_param: GlanceApiVirtualIP}
- GlancePublic:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: GlancePublic
- EndpointMap: { get_param: EndpointMap }
- CloudName: {get_param: CloudName}
- IP: {get_param: PublicVirtualIP}
- GlanceAdmin:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: GlanceAdmin
- EndpointMap: { get_param: EndpointMap }
- CloudName: {get_param: CloudName}
- IP: {get_param: GlanceApiVirtualIP}
- GlanceRegistryInternal:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: GlanceRegistryInternal
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: GlanceRegistryVirtualIP}
- GlanceRegistryPublic:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: GlanceRegistryPublic
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: PublicVirtualIP}
- GlanceRegistryAdmin:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: GlanceRegistryAdmin
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: GlanceRegistryVirtualIP}
-
- HeatInternal:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: HeatInternal
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: HeatApiVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v1/%(tenant_id)s'
- HeatPublic:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: HeatPublic
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: PublicVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v1/%(tenant_id)s'
- HeatAdmin:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: HeatAdmin
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: HeatApiVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v1/%(tenant_id)s'
-
- HorizonPublic:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: HorizonPublic
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: PublicVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/dashboard'
-
- KeystoneInternal:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: KeystoneInternal
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: KeystonePublicApiVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v2.0'
- KeystonePublic:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: KeystonePublic
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: PublicVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v2.0'
- KeystoneAdmin:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: KeystoneAdmin
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: KeystoneAdminApiVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v2.0'
- KeystoneEC2:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: KeystoneInternal
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: KeystonePublicApiVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v2.0/ec2tokens'
-
- NeutronInternal:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: NeutronInternal
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: NeutronApiVirtualIP}
- CloudName: {get_param: CloudName}
- NeutronPublic:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: NeutronPublic
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: PublicVirtualIP}
- CloudName: {get_param: CloudName}
- NeutronAdmin:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: NeutronAdmin
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: NeutronApiVirtualIP}
- CloudName: {get_param: CloudName}
-
- NovaInternal:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: NovaInternal
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: NovaApiVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v2/%(tenant_id)s'
- NovaPublic:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: NovaPublic
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: PublicVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v2/%(tenant_id)s'
- NovaAdmin:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: NovaAdmin
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: NovaApiVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v2/%(tenant_id)s'
- NovaV3Internal:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: NovaInternal
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: NovaApiVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v3'
- NovaV3Public:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: NovaPublic
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: PublicVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v3'
- NovaV3Admin:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: NovaAdmin
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: NovaApiVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v3'
-
- NovaEC2Internal:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: NovaEC2Internal
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: NovaApiVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/services/Cloud'
- NovaEC2Public:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: NovaEC2Public
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: PublicVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/services/Cloud'
- NovaEC2Admin:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: NovaEC2Admin
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: NovaApiVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/services/Admin'
-
- SwiftInternal:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: SwiftInternal
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: SwiftProxyVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v1/AUTH_%(tenant_id)s'
- SwiftPublic:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: SwiftPublic
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: PublicVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v1/AUTH_%(tenant_id)s'
- SwiftAdmin:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: SwiftAdmin
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: SwiftProxyVirtualIP}
- CloudName: {get_param: CloudName}
- # No Suffix for the Admin interface
- SwiftS3Internal:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: SwiftInternal
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: SwiftProxyVirtualIP}
- CloudName: {get_param: CloudName}
- SwiftS3Public:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: SwiftPublic
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: PublicVirtualIP}
- CloudName: {get_param: CloudName}
- SwiftS3Admin:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: SwiftAdmin
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: SwiftProxyVirtualIP}
- CloudName: {get_param: CloudName}
-
- SaharaInternal:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: SaharaInternal
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: SaharaApiVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v1.1/%(tenant_id)s'
- SaharaPublic:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: SaharaPublic
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: SaharaApiVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v1.1/%(tenant_id)s'
- SaharaAdmin:
- type: OS::TripleO::Endpoint
- properties:
- EndpointName: SaharaAdmin
- EndpointMap: { get_param: EndpointMap }
- IP: {get_param: SaharaApiVirtualIP}
- CloudName: {get_param: CloudName}
- UriSuffix: '/v1.1/%(tenant_id)s'
-
+ via parameter_defaults in the resource registry.
+ CloudName: {type: string, default: overcloud, description: The DNS name
+ of this cloud. e.g. ci-overcloud.tripleo.org}
outputs:
endpoint_map:
value:
- CeilometerInternal: {get_attr: [ CeilometerInternal, endpoint] }
- CeilometerPublic: {get_attr: [ CeilometerPublic, endpoint] }
- CeilometerAdmin: {get_attr: [ CeilometerAdmin, endpoint] }
- CinderInternal: {get_attr: [ CinderInternal, endpoint] }
- CinderPublic: {get_attr: [ CinderPublic, endpoint] }
- CinderAdmin: {get_attr: [ CinderAdmin, endpoint] }
- CinderV2Internal: {get_attr: [ CinderV2Internal, endpoint] }
- CinderV2Public: {get_attr: [ CinderV2Public, endpoint] }
- CinderV2Admin: {get_attr: [ CinderV2Admin, endpoint] }
- GlanceInternal: {get_attr: [ GlanceInternal, endpoint] }
- GlancePublic: {get_attr: [ GlancePublic, endpoint] }
- GlanceAdmin: {get_attr: [ GlanceAdmin, endpoint] }
- GlanceRegistryInternal: {get_attr: [ GlanceRegistryInternal, endpoint] }
- GlanceRegistryPublic: {get_attr: [ GlanceRegistryPublic, endpoint] }
- GlanceRegistryAdmin: {get_attr: [ GlanceRegistryAdmin, endpoint] }
- HeatInternal: {get_attr: [ HeatInternal, endpoint] }
- HeatPublic: {get_attr: [ HeatPublic, endpoint] }
- HeatAdmin: {get_attr: [ HeatAdmin, endpoint] }
- HorizonPublic: {get_attr: [ HorizonPublic, endpoint] }
- KeystoneInternal: {get_attr: [ KeystoneInternal, endpoint] }
- KeystonePublic: {get_attr: [ KeystonePublic, endpoint] }
- KeystoneAdmin: {get_attr: [ KeystoneAdmin, endpoint] }
- KeystoneEC2: {get_attr: [ KeystoneEC2, endpoint] }
- NeutronInternal: {get_attr: [ NeutronInternal, endpoint] }
- NeutronPublic: {get_attr: [ NeutronPublic, endpoint] }
- NeutronAdmin: {get_attr: [ NeutronAdmin, endpoint] }
- NovaInternal: {get_attr: [ NovaInternal, endpoint] }
- NovaPublic: {get_attr: [ NovaPublic, endpoint] }
- NovaAdmin: {get_attr: [ NovaAdmin, endpoint] }
- NovaV3Internal: {get_attr: [ NovaV3Internal, endpoint] }
- NovaV3Public: {get_attr: [ NovaV3Public, endpoint] }
- NovaV3Admin: {get_attr: [ NovaV3Admin, endpoint] }
- NovaEC2Internal: {get_attr: [ NovaEC2Internal, endpoint] }
- NovaEC2Public: {get_attr: [ NovaEC2Public, endpoint] }
- NovaEC2Admin: {get_attr: [ NovaEC2Admin, endpoint] }
- SwiftInternal: {get_attr: [ SwiftInternal, endpoint] }
- SwiftPublic: {get_attr: [ SwiftPublic, endpoint] }
- SwiftAdmin: {get_attr: [ SwiftAdmin, endpoint] }
- SwiftS3Internal: {get_attr: [ SwiftS3Internal, endpoint] }
- SwiftS3Public: {get_attr: [ SwiftS3Public, endpoint] }
- SwiftS3Admin: {get_attr: [ SwiftS3Admin, endpoint] }
- SaharaInternal: {get_attr: [ SaharaInternal, endpoint] }
- SaharaPublic: {get_attr: [ SaharaPublic, endpoint] }
- SaharaAdmin: {get_attr: [ SaharaAdmin, endpoint] }
+ CeilometerAdmin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, CeilometerAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CeilometerApiVirtualIP}
+ port:
+ get_param: [EndpointMap, CeilometerAdmin, port]
+ protocol:
+ get_param: [EndpointMap, CeilometerAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CeilometerAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CeilometerAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CeilometerApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CeilometerAdmin, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CeilometerAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CeilometerAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CeilometerApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CeilometerAdmin, port]
+ CeilometerInternal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, CeilometerInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CeilometerApiVirtualIP}
+ port:
+ get_param: [EndpointMap, CeilometerInternal, port]
+ protocol:
+ get_param: [EndpointMap, CeilometerInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CeilometerInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CeilometerInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CeilometerApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CeilometerInternal, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CeilometerInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CeilometerInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CeilometerApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CeilometerInternal, port]
+ CeilometerPublic:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, CeilometerPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, CeilometerPublic, port]
+ protocol:
+ get_param: [EndpointMap, CeilometerPublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CeilometerPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CeilometerPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CeilometerPublic, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CeilometerPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CeilometerPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CeilometerPublic, port]
+ CinderAdmin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, CinderAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CinderApiVirtualIP}
+ port:
+ get_param: [EndpointMap, CinderAdmin, port]
+ protocol:
+ get_param: [EndpointMap, CinderAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CinderAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CinderAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CinderApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CinderAdmin, port]
+ - /v1/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CinderAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CinderAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CinderApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CinderAdmin, port]
+ CinderInternal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, CinderInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CinderApiVirtualIP}
+ port:
+ get_param: [EndpointMap, CinderInternal, port]
+ protocol:
+ get_param: [EndpointMap, CinderInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CinderInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CinderInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CinderApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CinderInternal, port]
+ - /v1/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CinderInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CinderInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CinderApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CinderInternal, port]
+ CinderPublic:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, CinderPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, CinderPublic, port]
+ protocol:
+ get_param: [EndpointMap, CinderPublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CinderPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CinderPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CinderPublic, port]
+ - /v1/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CinderPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CinderPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CinderPublic, port]
+ CinderV2Admin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, CinderAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CinderApiVirtualIP}
+ port:
+ get_param: [EndpointMap, CinderAdmin, port]
+ protocol:
+ get_param: [EndpointMap, CinderAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CinderAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CinderAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CinderApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CinderAdmin, port]
+ - /v2/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CinderAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CinderAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CinderApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CinderAdmin, port]
+ CinderV2Internal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, CinderInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CinderApiVirtualIP}
+ port:
+ get_param: [EndpointMap, CinderInternal, port]
+ protocol:
+ get_param: [EndpointMap, CinderInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CinderInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CinderInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CinderApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CinderInternal, port]
+ - /v2/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CinderInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CinderInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: CinderApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CinderInternal, port]
+ CinderV2Public:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, CinderPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, CinderPublic, port]
+ protocol:
+ get_param: [EndpointMap, CinderPublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CinderPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CinderPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CinderPublic, port]
+ - /v2/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, CinderPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, CinderPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, CinderPublic, port]
+ GlanceAdmin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, GlanceAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: GlanceApiVirtualIP}
+ port:
+ get_param: [EndpointMap, GlanceAdmin, port]
+ protocol:
+ get_param: [EndpointMap, GlanceAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, GlanceAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, GlanceAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: GlanceApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, GlanceAdmin, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, GlanceAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, GlanceAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: GlanceApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, GlanceAdmin, port]
+ GlanceInternal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, GlanceInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: GlanceApiVirtualIP}
+ port:
+ get_param: [EndpointMap, GlanceInternal, port]
+ protocol:
+ get_param: [EndpointMap, GlanceInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, GlanceInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, GlanceInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: GlanceApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, GlanceInternal, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, GlanceInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, GlanceInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: GlanceApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, GlanceInternal, port]
+ GlancePublic:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, GlancePublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, GlancePublic, port]
+ protocol:
+ get_param: [EndpointMap, GlancePublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, GlancePublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, GlancePublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, GlancePublic, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, GlancePublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, GlancePublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, GlancePublic, port]
+ GlanceRegistryAdmin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, GlanceRegistryAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: GlanceRegistryVirtualIP}
+ port:
+ get_param: [EndpointMap, GlanceRegistryAdmin, port]
+ protocol:
+ get_param: [EndpointMap, GlanceRegistryAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, GlanceRegistryAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, GlanceRegistryAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: GlanceRegistryVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, GlanceRegistryAdmin, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, GlanceRegistryAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, GlanceRegistryAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: GlanceRegistryVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, GlanceRegistryAdmin, port]
+ GlanceRegistryInternal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, GlanceRegistryInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: GlanceRegistryVirtualIP}
+ port:
+ get_param: [EndpointMap, GlanceRegistryInternal, port]
+ protocol:
+ get_param: [EndpointMap, GlanceRegistryInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, GlanceRegistryInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, GlanceRegistryInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: GlanceRegistryVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, GlanceRegistryInternal, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, GlanceRegistryInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, GlanceRegistryInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: GlanceRegistryVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, GlanceRegistryInternal, port]
+ GlanceRegistryPublic:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, GlanceRegistryPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, GlanceRegistryPublic, port]
+ protocol:
+ get_param: [EndpointMap, GlanceRegistryPublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, GlanceRegistryPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, GlanceRegistryPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, GlanceRegistryPublic, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, GlanceRegistryPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, GlanceRegistryPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, GlanceRegistryPublic, port]
+ HeatAdmin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, HeatAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: HeatApiVirtualIP}
+ port:
+ get_param: [EndpointMap, HeatAdmin, port]
+ protocol:
+ get_param: [EndpointMap, HeatAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, HeatAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, HeatAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: HeatApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, HeatAdmin, port]
+ - /v1/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, HeatAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, HeatAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: HeatApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, HeatAdmin, port]
+ HeatInternal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, HeatInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: HeatApiVirtualIP}
+ port:
+ get_param: [EndpointMap, HeatInternal, port]
+ protocol:
+ get_param: [EndpointMap, HeatInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, HeatInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, HeatInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: HeatApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, HeatInternal, port]
+ - /v1/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, HeatInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, HeatInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: HeatApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, HeatInternal, port]
+ HeatPublic:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, HeatPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, HeatPublic, port]
+ protocol:
+ get_param: [EndpointMap, HeatPublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, HeatPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, HeatPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, HeatPublic, port]
+ - /v1/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, HeatPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, HeatPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, HeatPublic, port]
+ HorizonPublic:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, HorizonPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, HorizonPublic, port]
+ protocol:
+ get_param: [EndpointMap, HorizonPublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, HorizonPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, HorizonPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, HorizonPublic, port]
+ - /dashboard
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, HorizonPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, HorizonPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, HorizonPublic, port]
+ KeystoneAdmin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystoneAdminApiVirtualIP}
+ port:
+ get_param: [EndpointMap, KeystoneAdmin, port]
+ protocol:
+ get_param: [EndpointMap, KeystoneAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, KeystoneAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystoneAdminApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, KeystoneAdmin, port]
+ - /v2.0
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, KeystoneAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystoneAdminApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, KeystoneAdmin, port]
+ KeystoneEC2:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+ port:
+ get_param: [EndpointMap, KeystoneInternal, port]
+ protocol:
+ get_param: [EndpointMap, KeystoneInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, KeystoneInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, KeystoneInternal, port]
+ - /v2.0/ec2tokens
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, KeystoneInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, KeystoneInternal, port]
+ KeystoneInternal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+ port:
+ get_param: [EndpointMap, KeystoneInternal, port]
+ protocol:
+ get_param: [EndpointMap, KeystoneInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, KeystoneInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, KeystoneInternal, port]
+ - /v2.0
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, KeystoneInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, KeystoneInternal, port]
+ KeystonePublic:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, KeystonePublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, KeystonePublic, port]
+ protocol:
+ get_param: [EndpointMap, KeystonePublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, KeystonePublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, KeystonePublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, KeystonePublic, port]
+ - /v2.0
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, KeystonePublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, KeystonePublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, KeystonePublic, port]
+ KeystoneV3Admin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneV3Admin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystoneAdminApiVirtualIP}
+ port:
+ get_param: [EndpointMap, KeystoneV3Admin, port]
+ protocol:
+ get_param: [EndpointMap, KeystoneV3Admin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, KeystoneV3Admin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneV3Admin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystoneAdminApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, KeystoneV3Admin, port]
+ - /v3
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, KeystoneV3Admin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneV3Admin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystoneAdminApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, KeystoneV3Admin, port]
+ KeystoneV3Internal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneV3Internal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+ port:
+ get_param: [EndpointMap, KeystoneV3Internal, port]
+ protocol:
+ get_param: [EndpointMap, KeystoneV3Internal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, KeystoneV3Internal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneV3Internal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, KeystoneV3Internal, port]
+ - /v3
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, KeystoneV3Internal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneV3Internal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, KeystoneV3Internal, port]
+ KeystoneV3Public:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneV3Public, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, KeystoneV3Public, port]
+ protocol:
+ get_param: [EndpointMap, KeystoneV3Public, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, KeystoneV3Public, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneV3Public, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, KeystoneV3Public, port]
+ - /v3
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, KeystoneV3Public, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, KeystoneV3Public, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, KeystoneV3Public, port]
+ NeutronAdmin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NeutronAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NeutronApiVirtualIP}
+ port:
+ get_param: [EndpointMap, NeutronAdmin, port]
+ protocol:
+ get_param: [EndpointMap, NeutronAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NeutronAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NeutronAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NeutronApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NeutronAdmin, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NeutronAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NeutronAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NeutronApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NeutronAdmin, port]
+ NeutronInternal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NeutronInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NeutronApiVirtualIP}
+ port:
+ get_param: [EndpointMap, NeutronInternal, port]
+ protocol:
+ get_param: [EndpointMap, NeutronInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NeutronInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NeutronInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NeutronApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NeutronInternal, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NeutronInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NeutronInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NeutronApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NeutronInternal, port]
+ NeutronPublic:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NeutronPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, NeutronPublic, port]
+ protocol:
+ get_param: [EndpointMap, NeutronPublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NeutronPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NeutronPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NeutronPublic, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NeutronPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NeutronPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NeutronPublic, port]
+ NovaAdmin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NovaAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ port:
+ get_param: [EndpointMap, NovaAdmin, port]
+ protocol:
+ get_param: [EndpointMap, NovaAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaAdmin, port]
+ - /v2.1/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaAdmin, port]
+ NovaInternal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NovaInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ port:
+ get_param: [EndpointMap, NovaInternal, port]
+ protocol:
+ get_param: [EndpointMap, NovaInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaInternal, port]
+ - /v2.1/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaInternal, port]
+ NovaPublic:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NovaPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, NovaPublic, port]
+ protocol:
+ get_param: [EndpointMap, NovaPublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaPublic, port]
+ - /v2.1/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaPublic, port]
+ NovaV3Admin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NovaAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ port:
+ get_param: [EndpointMap, NovaAdmin, port]
+ protocol:
+ get_param: [EndpointMap, NovaAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaAdmin, port]
+ - /v3
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaAdmin, port]
+ NovaV3Internal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NovaInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ port:
+ get_param: [EndpointMap, NovaInternal, port]
+ protocol:
+ get_param: [EndpointMap, NovaInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaInternal, port]
+ - /v3
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaInternal, port]
+ NovaV3Public:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NovaPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, NovaPublic, port]
+ protocol:
+ get_param: [EndpointMap, NovaPublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaPublic, port]
+ - /v3
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaPublic, port]
+ NovaEC2Admin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NovaEC2Admin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ port:
+ get_param: [EndpointMap, NovaEC2Admin, port]
+ protocol:
+ get_param: [EndpointMap, NovaEC2Admin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaEC2Admin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaEC2Admin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaEC2Admin, port]
+ - /services/Admin
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaEC2Admin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaEC2Admin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaEC2Admin, port]
+ NovaEC2Internal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NovaEC2Internal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ port:
+ get_param: [EndpointMap, NovaEC2Internal, port]
+ protocol:
+ get_param: [EndpointMap, NovaEC2Internal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaEC2Internal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaEC2Internal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaEC2Internal, port]
+ - /services/Cloud
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaEC2Internal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaEC2Internal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaEC2Internal, port]
+ NovaEC2Public:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NovaEC2Public, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, NovaEC2Public, port]
+ protocol:
+ get_param: [EndpointMap, NovaEC2Public, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaEC2Public, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaEC2Public, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaEC2Public, port]
+ - /services/Cloud
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaEC2Public, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaEC2Public, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaEC2Public, port]
+ NovaVNCProxyAdmin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NovaVNCProxyAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ port:
+ get_param: [EndpointMap, NovaVNCProxyAdmin, port]
+ protocol:
+ get_param: [EndpointMap, NovaVNCProxyAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaVNCProxyAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaVNCProxyAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaVNCProxyAdmin, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaVNCProxyAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaVNCProxyAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaVNCProxyAdmin, port]
+ NovaVNCProxyInternal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NovaVNCProxyInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ port:
+ get_param: [EndpointMap, NovaVNCProxyInternal, port]
+ protocol:
+ get_param: [EndpointMap, NovaVNCProxyInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaVNCProxyInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaVNCProxyInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaVNCProxyInternal, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaVNCProxyInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaVNCProxyInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: NovaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaVNCProxyInternal, port]
+ NovaVNCProxyPublic:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, NovaVNCProxyPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, NovaVNCProxyPublic, port]
+ protocol:
+ get_param: [EndpointMap, NovaVNCProxyPublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaVNCProxyPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaVNCProxyPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaVNCProxyPublic, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, NovaVNCProxyPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, NovaVNCProxyPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, NovaVNCProxyPublic, port]
+ SaharaAdmin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, SaharaAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+ port:
+ get_param: [EndpointMap, SaharaAdmin, port]
+ protocol:
+ get_param: [EndpointMap, SaharaAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SaharaAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SaharaAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SaharaAdmin, port]
+ - /v1.1/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SaharaAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SaharaAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SaharaAdmin, port]
+ SaharaInternal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, SaharaInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+ port:
+ get_param: [EndpointMap, SaharaInternal, port]
+ protocol:
+ get_param: [EndpointMap, SaharaInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SaharaInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SaharaInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SaharaInternal, port]
+ - /v1.1/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SaharaInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SaharaInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SaharaInternal, port]
+ SaharaPublic:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, SaharaPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+ port:
+ get_param: [EndpointMap, SaharaPublic, port]
+ protocol:
+ get_param: [EndpointMap, SaharaPublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SaharaPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SaharaPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SaharaPublic, port]
+ - /v1.1/%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SaharaPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SaharaPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SaharaPublic, port]
+ SwiftAdmin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, SwiftAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+ port:
+ get_param: [EndpointMap, SwiftAdmin, port]
+ protocol:
+ get_param: [EndpointMap, SwiftAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SwiftAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SwiftAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SwiftAdmin, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SwiftAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SwiftAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SwiftAdmin, port]
+ SwiftInternal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, SwiftInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+ port:
+ get_param: [EndpointMap, SwiftInternal, port]
+ protocol:
+ get_param: [EndpointMap, SwiftInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SwiftInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SwiftInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SwiftInternal, port]
+ - /v1/AUTH_%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SwiftInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SwiftInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SwiftInternal, port]
+ SwiftPublic:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, SwiftPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, SwiftPublic, port]
+ protocol:
+ get_param: [EndpointMap, SwiftPublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SwiftPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SwiftPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SwiftPublic, port]
+ - /v1/AUTH_%(tenant_id)s
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SwiftPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SwiftPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SwiftPublic, port]
+ SwiftS3Admin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, SwiftAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+ port:
+ get_param: [EndpointMap, SwiftAdmin, port]
+ protocol:
+ get_param: [EndpointMap, SwiftAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SwiftAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SwiftAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SwiftAdmin, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SwiftAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SwiftAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SwiftAdmin, port]
+ SwiftS3Internal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, SwiftInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+ port:
+ get_param: [EndpointMap, SwiftInternal, port]
+ protocol:
+ get_param: [EndpointMap, SwiftInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SwiftInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SwiftInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SwiftInternal, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SwiftInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SwiftInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SwiftInternal, port]
+ SwiftS3Public:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, SwiftPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, SwiftPublic, port]
+ protocol:
+ get_param: [EndpointMap, SwiftPublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SwiftPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SwiftPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SwiftPublic, port]
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, SwiftPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, SwiftPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, SwiftPublic, port]
diff --git a/network/external_v6.yaml b/network/external_v6.yaml
new file mode 100644
index 00000000..3e120f24
--- /dev/null
+++ b/network/external_v6.yaml
@@ -0,0 +1,69 @@
+heat_template_version: 2015-04-30
+
+description: >
+ External network. Public traffic, Neutron l3router for floating IPs/SNAT, etc.
+
+parameters:
+ # the defaults here work for static IP assignment (IPAM) only
+ ExternalNetCidr:
+ # OpenStack uses the EUI-64 address format, which requires a /64 prefix
+ default: '2001:db8:fd00:1000::/64'
+ description: Cidr for the external network.
+ type: string
+ ExternalNetValueSpecs:
+ default: {'provider:physical_network': 'external', 'provider:network_type': 'flat'}
+ description: Value specs for the external network.
+ type: json
+ ExternalNetAdminStateUp:
+ default: false
+ description: This admin state of of the network.
+ type: boolean
+ ExternalNetShared:
+ default: false
+ description: Whether this network is shared across all tenants.
+ type: boolean
+ ExternalNetName:
+ default: external
+ description: The name of the external network.
+ type: string
+ ExternalSubnetName:
+ default: external_subnet
+ description: The name of the external subnet in Neutron.
+ type: string
+ ExternalAllocationPools:
+ default: [{'start': '2001:db8:fd00:1000::10', 'end': '2001:db8:fd00:1000:ffff:ffff:ffff:fffe'}]
+ description: Ip allocation pool range for the external network.
+ type: json
+ IPv6AddressMode:
+ default: dhcpv6-stateful
+ description: Neutron subnet IPv6 address mode
+ type: string
+ IPv6RAMode:
+ default: dhcpv6-stateful
+ description: Neutron subnet IPv6 router advertisement mode
+ type: string
+
+resources:
+ ExternalNetwork:
+ type: OS::Neutron::Net
+ properties:
+ admin_state_up: {get_param: ExternalNetAdminStateUp}
+ name: {get_param: ExternalNetName}
+ shared: {get_param: ExternalNetShared}
+ value_specs: {get_param: ExternalNetValueSpecs}
+
+ ExternalSubnet:
+ type: OS::Neutron::Subnet
+ properties:
+ ip_version: 6
+ ipv6_address_mode: {get_param: IPv6AddressMode}
+ ipv6_ra_mode: {get_param: IPv6RAMode}
+ cidr: {get_param: ExternalNetCidr}
+ name: {get_param: ExternalSubnetName}
+ network: {get_resource: ExternalNetwork}
+ allocation_pools: {get_param: ExternalAllocationPools}
+
+outputs:
+ OS::stack_id:
+ description: Neutron external network
+ value: {get_resource: ExternalNetwork}
diff --git a/network/internal_api_v6.yaml b/network/internal_api_v6.yaml
new file mode 100644
index 00000000..68c14fbe
--- /dev/null
+++ b/network/internal_api_v6.yaml
@@ -0,0 +1,69 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Internal API network. Used for most APIs, Database, RPC.
+
+parameters:
+ # the defaults here work for static IP assignment (IPAM) only
+ InternalApiNetCidr:
+ # OpenStack uses the EUI-64 address format, which requires a /64 prefix
+ default: 'fd00:fd00:fd00:2000::/64'
+ description: Cidr for the internal API network.
+ type: string
+ InternalApiNetValueSpecs:
+ default: {'provider:physical_network': 'internal_api', 'provider:network_type': 'flat'}
+ description: Value specs for the internal API network.
+ type: json
+ InternalApiNetAdminStateUp:
+ default: false
+ description: This admin state of of the network.
+ type: boolean
+ InternalApiNetShared:
+ default: false
+ description: Whether this network is shared across all tenants.
+ type: boolean
+ InternalApiNetName:
+ default: internal_api
+ description: The name of the internal API network.
+ type: string
+ InternalApiSubnetName:
+ default: internal_api_subnet
+ description: The name of the internal API subnet in Neutron.
+ type: string
+ InternalApiAllocationPools:
+ default: [{'start': 'fd00:fd00:fd00:2000::10', 'end': 'fd00:fd00:fd00:2000:ffff:ffff:ffff:fffe'}]
+ description: Ip allocation pool range for the internal API network.
+ type: json
+ IPv6AddressMode:
+ default: dhcpv6-stateful
+ description: Neutron subnet IPv6 address mode
+ type: string
+ IPv6RAMode:
+ default: dhcpv6-stateful
+ description: Neutron subnet IPv6 router advertisement mode
+ type: string
+
+resources:
+ InternalApiNetwork:
+ type: OS::Neutron::Net
+ properties:
+ admin_state_up: {get_param: InternalApiNetAdminStateUp}
+ name: {get_param: InternalApiNetName}
+ shared: {get_param: InternalApiNetShared}
+ value_specs: {get_param: InternalApiNetValueSpecs}
+
+ InternalApiSubnet:
+ type: OS::Neutron::Subnet
+ properties:
+ ip_version: 6
+ ipv6_address_mode: {get_param: IPv6AddressMode}
+ ipv6_ra_mode: {get_param: IPv6RAMode}
+ cidr: {get_param: InternalApiNetCidr}
+ name: {get_param: InternalApiSubnetName}
+ network: {get_resource: InternalApiNetwork}
+ allocation_pools: {get_param: InternalApiAllocationPools}
+
+outputs:
+ OS::stack_id:
+ description: Neutron internal network
+ value: {get_resource: InternalApiNetwork}
diff --git a/network/ports/ctlplane_vip.yaml b/network/ports/ctlplane_vip.yaml
index 7a7043bd..5ac7d344 100644
--- a/network/ports/ctlplane_vip.yaml
+++ b/network/ports/ctlplane_vip.yaml
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
description: >
Creates a port for a VIP on the undercloud ctlplane network.
@@ -45,13 +45,14 @@ outputs:
ip_address:
description: Virtual IP network IP
value: {get_attr: [VipPort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: Virtual IP network IP (for compatibility with vip_v6.yaml)
+ value: {get_attr: [VipPort, fixed_ips, 0, ip_address]}
ip_subnet:
- # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the ctlplane network.
value:
list_join:
- ''
- - {get_attr: [VipPort, fixed_ips, 0, ip_address]}
- '/'
- - {get_attr: [VipPort, subnets, 0, cidr, -2]}
- - {get_attr: [VipPort, subnets, 0, cidr, -1]}
+ - {str_split: ['/', {get_attr: [VipPort, subnets, 0, cidr]}, 1]}
diff --git a/network/ports/external.yaml b/network/ports/external.yaml
index 7624eb9f..c4f815fb 100644
--- a/network/ports/external.yaml
+++ b/network/ports/external.yaml
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
description: >
Creates a port on the external network. The IP address will be chosen
@@ -48,13 +48,14 @@ outputs:
ip_address:
description: external network IP
value: {get_attr: [ExternalPort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: external network IP (for compatibility with external_v6.yaml)
+ value: {get_attr: [ExternalPort, fixed_ips, 0, ip_address]}
ip_subnet:
- # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the external network IP
value:
list_join:
- ''
- - {get_attr: [ExternalPort, fixed_ips, 0, ip_address]}
- '/'
- - {get_attr: [ExternalPort, subnets, 0, cidr, -2]}
- - {get_attr: [ExternalPort, subnets, 0, cidr, -1]}
+ - {str_split: ['/', {get_attr: [ExternalPort, subnets, 0, cidr]}, 1]}
diff --git a/network/ports/external_from_pool.yaml b/network/ports/external_from_pool.yaml
index 8e9dc7c2..98f2aa35 100644
--- a/network/ports/external_from_pool.yaml
+++ b/network/ports/external_from_pool.yaml
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
description: >
Returns an IP from a network mapped list of IPs
@@ -33,13 +33,14 @@ outputs:
ip_address:
description: external network IP
value: {get_param: [IPPool, {get_param: ExternalNetName}, {get_param: NodeIndex}]}
+ ip_address_uri:
+ description: external network IP (for compatibility with IPv6)
+ value: {get_param: [IPPool, {get_param: ExternalNetName}, {get_param: NodeIndex}]}
ip_subnet:
- # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the external network IP
value:
list_join:
- ''
- - {get_param: [IPPool, {get_param: ExternalNetName}, {get_param: NodeIndex}]}
- '/'
- - {get_param: [ExternalNetCidr, -2]}
- - {get_param: [ExternalNetCidr, -1]}
+ - {str_split: ['/', {get_param: ExternalNetCidr}, 1]}
diff --git a/network/ports/external_v6.yaml b/network/ports/external_v6.yaml
new file mode 100644
index 00000000..522caaa0
--- /dev/null
+++ b/network/ports/external_v6.yaml
@@ -0,0 +1,68 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Creates a port on the external network. The IP address will be chosen
+ automatically if FixedIPs is empty.
+
+parameters:
+ ExternalNetName:
+ description: Name of the external neutron network
+ default: external
+ type: string
+ PortName:
+ description: Name of the port
+ default: ''
+ type: string
+ ControlPlaneIP: # Here for compatability with noop.yaml
+ description: IP address on the control plane
+ default: ''
+ type: string
+ ControlPlaneNetwork: # Here for compatibility with ctlplane_vip.yaml
+ description: The name of the undercloud Neutron control plane
+ default: ctlplane
+ type: string
+ FixedIPs:
+ description: >
+ Control the IP allocation for the VIP port. E.g.
+ [{'ip_address':'1.2.3.4'}]
+ default: []
+ type: json
+ IPPool: # Here for compatibility with from_pool.yaml
+ default: {}
+ type: json
+ NodeIndex: # Here for compatibility with from_pool.yaml
+ default: 0
+ type: number
+
+resources:
+
+ ExternalPort:
+ type: OS::Neutron::Port
+ properties:
+ network: {get_param: ExternalNetName}
+ name: {get_param: PortName}
+ fixed_ips: {get_param: FixedIPs}
+ replacement_policy: AUTO
+
+outputs:
+ ip_address:
+ description: external network IP
+ value: {get_attr: [ExternalPort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: external network IP with brackets suitable for a URL
+ value:
+ list_join:
+ - ''
+ - - '['
+ - {get_attr: [ExternalPort, fixed_ips, 0, ip_address]}
+ - ']'
+ ip_subnet:
+ # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
+ description: IP/Subnet CIDR for the external network IP
+ value:
+ list_join:
+ - ''
+ - - {get_attr: [ExternalPort, fixed_ips, 0, ip_address]}
+ - '/'
+ - {get_attr: [ExternalPort, subnets, 0, cidr, -2]}
+ - {get_attr: [ExternalPort, subnets, 0, cidr, -1]}
diff --git a/network/ports/from_service.yaml b/network/ports/from_service.yaml
index 6b669f41..359d77a7 100644
--- a/network/ports/from_service.yaml
+++ b/network/ports/from_service.yaml
@@ -32,3 +32,6 @@ outputs:
ip_address:
description: network IP
value: {get_param: [ServiceVips, {get_param: ServiceName}]}
+ ip_address_uri:
+ description: network IP (for compatibility with IPv6)
+ value: {get_param: [ServiceVips, {get_param: ServiceName}]}
diff --git a/network/ports/internal_api.yaml b/network/ports/internal_api.yaml
index f84e8f71..1d521a8d 100644
--- a/network/ports/internal_api.yaml
+++ b/network/ports/internal_api.yaml
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
description: >
Creates a port on the internal_api network.
@@ -43,13 +43,15 @@ outputs:
ip_address:
description: internal API network IP
value: {get_attr: [InternalApiPort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: |
+ internal API network IP (for compatibility with internal_api_v6.yaml)
+ value: {get_attr: [InternalApiPort, fixed_ips, 0, ip_address]}
ip_subnet:
- # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the internal API network IP
value:
list_join:
- ''
- - {get_attr: [InternalApiPort, fixed_ips, 0, ip_address]}
- '/'
- - {get_attr: [InternalApiPort, subnets, 0, cidr, -2]}
- - {get_attr: [InternalApiPort, subnets, 0, cidr, -1]}
+ - {str_split: ['/', {get_attr: [InternalApiPort, subnets, 0, cidr]}, 1]}
diff --git a/network/ports/internal_api_from_pool.yaml b/network/ports/internal_api_from_pool.yaml
index b98e1fb1..c7b04847 100644
--- a/network/ports/internal_api_from_pool.yaml
+++ b/network/ports/internal_api_from_pool.yaml
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
description: >
Returns an IP from a network mapped list of IPs
@@ -33,13 +33,14 @@ outputs:
ip_address:
description: internal API network IP
value: {get_param: [IPPool, {get_param: InternalApiNetName}, {get_param: NodeIndex}]}
+ ip_address_uri:
+ description: internal API network IP (for compatibility with internal_api_v6.yaml)
+ value: {get_param: [IPPool, {get_param: InternalApiNetName}, {get_param: NodeIndex}]}
ip_subnet:
- # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the internal API network IP
value:
list_join:
- ''
- - {get_param: [IPPool, {get_param: InternalApiNetName}, {get_param: NodeIndex}]}
- '/'
- - {get_param: [InternalApiNetCidr, -2]}
- - {get_param: [InternalApiNetCidr, -1]}
+ - {str_split: ['/', {get_param: InternalApiNetCidr}, 1]}
diff --git a/network/ports/internal_api_v6.yaml b/network/ports/internal_api_v6.yaml
new file mode 100644
index 00000000..279e6bd0
--- /dev/null
+++ b/network/ports/internal_api_v6.yaml
@@ -0,0 +1,63 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Creates a port on the internal_api network.
+
+parameters:
+ InternalApiNetName:
+ description: Name of the internal API neutron network
+ default: internal_api
+ type: string
+ PortName:
+ description: Name of the port
+ default: ''
+ type: string
+ ControlPlaneIP: # Here for compatability with noop.yaml
+ description: IP address on the control plane
+ default: ''
+ type: string
+ FixedIPs:
+ description: >
+ Control the IP allocation for the VIP port. E.g.
+ [{'ip_address':'1.2.3.4'}]
+ default: []
+ type: json
+ IPPool: # Here for compatibility with from_pool.yaml
+ default: {}
+ type: json
+ NodeIndex: # Here for compatibility with from_pool.yaml
+ default: 0
+ type: number
+
+resources:
+
+ InternalApiPort:
+ type: OS::Neutron::Port
+ properties:
+ network: {get_param: InternalApiNetName}
+ name: {get_param: PortName}
+ fixed_ips: {get_param: FixedIPs}
+ replacement_policy: AUTO
+
+outputs:
+ ip_address:
+ description: internal API network IP
+ value: {get_attr: [InternalApiPort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: internal api network IP with brackets suitable for a URL
+ value:
+ list_join:
+ - ''
+ - - '['
+ - {get_attr: [InternalApiPort, fixed_ips, 0, ip_address]}
+ - ']'
+ ip_subnet:
+ # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
+ description: IP/Subnet CIDR for the internal API network IP
+ value:
+ list_join:
+ - ''
+ - - {get_attr: [InternalApiPort, fixed_ips, 0, ip_address]}
+ - '/'
+ - {get_attr: [InternalApiPort, subnets, 0, cidr, -2]}
+ - {get_attr: [InternalApiPort, subnets, 0, cidr, -1]}
diff --git a/network/ports/management.yaml b/network/ports/management.yaml
index 1d15ca60..967b66e1 100644
--- a/network/ports/management.yaml
+++ b/network/ports/management.yaml
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
description: >
Creates a port on the management network. The IP address will be chosen
@@ -16,6 +16,12 @@ parameters:
ControlPlaneIP: # Here for compatibility with noop.yaml
description: IP address on the control plane
type: string
+ IPPool: # Here for compatibility with from_pool.yaml
+ default: {}
+ type: json
+ NodeIndex: # Here for compatibility with from_pool.yaml
+ default: 0
+ type: number
resources:
@@ -30,13 +36,14 @@ outputs:
ip_address:
description: management network IP
value: {get_attr: [ManagementPort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: management network IP (for compatibility with management_v6.yaml)
+ value: {get_attr: [ManagementPort, fixed_ips, 0, ip_address]}
ip_subnet:
- # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the management network IP
value:
list_join:
- ''
- - {get_attr: [ManagementPort, fixed_ips, 0, ip_address]}
- '/'
- - {get_attr: [ManagementPort, subnets, 0, cidr, -2]}
- - {get_attr: [ManagementPort, subnets, 0, cidr, -1]}
+ - {str_split: ['/', {get_attr: [ManagementPort, subnets, 0, cidr]}, 1]}
diff --git a/network/ports/management_from_pool.yaml b/network/ports/management_from_pool.yaml
new file mode 100644
index 00000000..fc87e39a
--- /dev/null
+++ b/network/ports/management_from_pool.yaml
@@ -0,0 +1,46 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Returns an IP from a network mapped list of IPs
+
+parameters:
+ ManagementNetName:
+ description: Name of the management network
+ default: management
+ type: string
+ PortName:
+ description: Name of the port
+ default: ''
+ type: string
+ ControlPlaneIP: # Here for compatability with noop.yaml
+ description: IP address on the control plane
+ default: ''
+ type: string
+ IPPool:
+ default: {}
+ description: A network mapped list of IPs
+ type: json
+ NodeIndex:
+ default: 0
+ description: Index of the IP to get from Pool
+ type: number
+ ManagementNetCidr:
+ default: '172.16.4.0/24'
+ description: Cidr for the management network.
+ type: string
+
+outputs:
+ ip_address:
+ description: management network IP
+ value: {get_param: [IPPool, {get_param: ManagementNetName}, {get_param: NodeIndex}]}
+ ip_address_uri:
+ description: management network IP (for compatibility with management_v6.yaml)
+ value: {get_param: [IPPool, {get_param: ManagementNetName}, {get_param: NodeIndex}]}
+ ip_subnet:
+ description: IP/Subnet CIDR for the management network IP
+ value:
+ list_join:
+ - ''
+ - - {get_param: [IPPool, {get_param: ManagementNetName}, {get_param: NodeIndex}]}
+ - '/'
+ - {str_split: ['/', {get_param: ManagementNetCidr}, 1]}
diff --git a/network/ports/management_v6.yaml b/network/ports/management_v6.yaml
new file mode 100644
index 00000000..a94ebc7b
--- /dev/null
+++ b/network/ports/management_v6.yaml
@@ -0,0 +1,54 @@
+heat_template_version: 2015-10-15
+
+description: >
+ Creates a port on the management network. The IP address will be chosen
+ automatically if FixedIPs is empty.
+
+parameters:
+ ManagementNetName:
+ description: Name of the management neutron network
+ default: management
+ type: string
+ PortName:
+ description: Name of the port
+ default: ''
+ type: string
+ ControlPlaneIP: # Here for compatibility with noop.yaml
+ description: IP address on the control plane
+ type: string
+ IPPool: # Here for compatibility with from_pool.yaml
+ default: {}
+ type: json
+ NodeIndex: # Here for compatibility with from_pool.yaml
+ default: 0
+ type: number
+
+resources:
+
+ ManagementPort:
+ type: OS::Neutron::Port
+ properties:
+ network: {get_param: ManagementNetName}
+ name: {get_param: PortName}
+ replacement_policy: AUTO
+
+outputs:
+ ip_address:
+ description: management network IP
+ value: {get_attr: [ManagementPort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: management network IP with brackets suitable for a URL
+ value:
+ list_join:
+ - ''
+ - - '['
+ - {get_attr: [ManagementPort, fixed_ips, 0, ip_address]}
+ - ']'
+ ip_subnet:
+ description: IP/Subnet CIDR for the management network IP
+ value:
+ list_join:
+ - ''
+ - - {get_attr: [ManagementPort, fixed_ips, 0, ip_address]}
+ - '/'
+ - {str_split: ['/', {get_attr: [ManagementPort, subnets, 0, cidr]}, 1]}
diff --git a/network/ports/net_ip_map.yaml b/network/ports/net_ip_map.yaml
index c6386025..6bb4557b 100644
--- a/network/ports/net_ip_map.yaml
+++ b/network/ports/net_ip_map.yaml
@@ -7,21 +7,45 @@ parameters:
ExternalIp:
default: ''
type: string
+ ExternalIpUri:
+ default: ''
+ type: string
+ description: IP address with brackets in case of IPv6
InternalApiIp:
default: ''
type: string
+ InternalApiIpUri:
+ default: ''
+ type: string
+ description: IP address with brackets in case of IPv6
StorageIp:
default: ''
type: string
+ StorageIpUri:
+ default: ''
+ type: string
+ description: IP address with brackets in case of IPv6
StorageMgmtIp:
default: ''
type: string
+ StorageMgmtIpUri:
+ default: ''
+ type: string
+ description: IP address with brackets in case of IPv6
TenantIp:
default: ''
type: string
+ TenantIpUri:
+ default: ''
+ type: string
+ description: IP address with brackets in case of IPv6
ManagementIp:
default: ''
type: string
+ ManagementIpUri:
+ default: ''
+ type: string
+ description: IP address with brackets in case of IPv6
outputs:
net_ip_map:
@@ -36,3 +60,15 @@ outputs:
storage_mgmt: {get_param: StorageMgmtIp}
tenant: {get_param: TenantIp}
management: {get_param: ManagementIp}
+ net_ip_uri_map:
+ description: >
+ A Hash containing a mapping of netowrk names to assigned IPs for a
+ specific machine with brackets around IPv6 addresses for use in URLs.
+ value:
+ ctlplane: {get_param: ControlPlaneIp}
+ external: {get_param: ExternalIpUri}
+ internal_api: {get_param: InternalApiIpUri}
+ storage: {get_param: StorageIpUri}
+ storage_mgmt: {get_param: StorageMgmtIpUri}
+ tenant: {get_param: TenantIpUri}
+ management: {get_param: ManagementIpUri}
diff --git a/network/ports/net_vip_map_external.yaml b/network/ports/net_vip_map_external.yaml
index 23e1f992..a40a0bfc 100644
--- a/network/ports/net_vip_map_external.yaml
+++ b/network/ports/net_vip_map_external.yaml
@@ -24,18 +24,33 @@ parameters:
ExternalIp:
default: ''
type: string
+ ExternalIpUri:
+ default: ''
+ type: string
InternalApiIp:
default: ''
type: string
+ InternalApiIpUri:
+ default: ''
+ type: string
StorageIp:
default: ''
type: string
+ StorageIpUri:
+ default: ''
+ type: string
StorageMgmtIp:
default: ''
type: string
+ StorageMgmtIpUri:
+ default: ''
+ type: string
TenantIp:
default: ''
type: string
+ TenantIpUri:
+ default: ''
+ type: string
outputs:
net_ip_map:
@@ -48,3 +63,13 @@ outputs:
internal_api: {get_param: InternalApiNetworkVip}
storage: {get_param: StorageNetworkVip}
storage_mgmt: {get_param: StorageMgmtNetworkVip}
+ net_ip_uri_map:
+ description: >
+ A Hash containing a mapping of netowrk names to assigned IPs for a
+ specific machine with brackets around IPv6 addresses for use in URLs.
+ value:
+ ctlplane: {get_param: ControlPlaneIP}
+ external: {get_param: ExternalNetworkVip}
+ internal_api: {get_param: InternalApiNetworkVip}
+ storage: {get_param: StorageNetworkVip}
+ storage_mgmt: {get_param: StorageMgmtNetworkVip}
diff --git a/network/ports/noop.yaml b/network/ports/noop.yaml
index ac946cd9..96c461e0 100644
--- a/network/ports/noop.yaml
+++ b/network/ports/noop.yaml
@@ -44,6 +44,9 @@ outputs:
ip_address:
description: pass thru network IP
value: {get_param: ControlPlaneIP}
+ ip_address_uri:
+ description: pass thru network IP (for compatibility with vip_v6.yaml)
+ value: {get_param: ControlPlaneIP}
ip_subnet:
description: IP/Subnet CIDR for the pass thru network IP
value:
diff --git a/network/ports/storage.yaml b/network/ports/storage.yaml
index a07e5a4f..1ed5cca1 100644
--- a/network/ports/storage.yaml
+++ b/network/ports/storage.yaml
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
description: >
Creates a port on the storage network.
@@ -43,13 +43,14 @@ outputs:
ip_address:
description: storage network IP
value: {get_attr: [StoragePort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: storage network IP (for compatibility with storage_v6.yaml)
+ value: {get_attr: [StoragePort, fixed_ips, 0, ip_address]}
ip_subnet:
- # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the storage network IP
value:
list_join:
- ''
- - {get_attr: [StoragePort, fixed_ips, 0, ip_address]}
- '/'
- - {get_attr: [StoragePort, subnets, 0, cidr, -2]}
- - {get_attr: [StoragePort, subnets, 0, cidr, -1]}
+ - {str_split: ['/', {get_attr: [StoragePort, subnets, 0, cidr]}, 1]}
diff --git a/network/ports/storage_from_pool.yaml b/network/ports/storage_from_pool.yaml
index 668bc6f6..dfc9e752 100644
--- a/network/ports/storage_from_pool.yaml
+++ b/network/ports/storage_from_pool.yaml
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
description: >
Returns an IP from a network mapped list of IPs
@@ -33,13 +33,14 @@ outputs:
ip_address:
description: storage network IP
value: {get_param: [IPPool, {get_param: StorageNetName}, {get_param: NodeIndex}]}
+ ip_address_uri:
+ description: storage network IP (for compatibility with storage_v6.yaml)
+ value: {get_param: [IPPool, {get_param: StorageNetName}, {get_param: NodeIndex}]}
ip_subnet:
- # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the storage network IP
value:
list_join:
- ''
- - {get_param: [IPPool, {get_param: StorageNetName}, {get_param: NodeIndex}]}
- '/'
- - {get_param: [StorageNetCidr, -2]}
- - {get_param: [StorageNetCidr, -1]}
+ - {str_split: ['/', {get_param: StorageNetCidr}, 1]}
diff --git a/network/ports/storage_mgmt.yaml b/network/ports/storage_mgmt.yaml
index 4890bf5a..548d226a 100644
--- a/network/ports/storage_mgmt.yaml
+++ b/network/ports/storage_mgmt.yaml
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
description: >
Creates a port on the storage_mgmt API network.
@@ -43,13 +43,15 @@ outputs:
ip_address:
description: storage_mgmt network IP
value: {get_attr: [StorageMgmtPort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: |
+ storage_mgmt network IP (for compatibility with storage_mgmt_v6.yaml)
+ value: {get_attr: [StorageMgmtPort, fixed_ips, 0, ip_address]}
ip_subnet:
- # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the storage_mgmt network IP
value:
list_join:
- ''
- - {get_attr: [StorageMgmtPort, fixed_ips, 0, ip_address]}
- '/'
- - {get_attr: [StorageMgmtPort, subnets, 0, cidr, -2]}
- - {get_attr: [StorageMgmtPort, subnets, 0, cidr, -1]}
+ - {str_split: ['/', {get_attr: [StorageMgmtPort, subnets, 0, cidr]}, 1]}
diff --git a/network/ports/storage_mgmt_from_pool.yaml b/network/ports/storage_mgmt_from_pool.yaml
index bea87105..9c757a6e 100644
--- a/network/ports/storage_mgmt_from_pool.yaml
+++ b/network/ports/storage_mgmt_from_pool.yaml
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
description: >
Returns an IP from a network mapped list of IPs
@@ -33,13 +33,14 @@ outputs:
ip_address:
description: storage MGMT network IP
value: {get_param: [IPPool, {get_param: StorageMgmtNetName}, {get_param: NodeIndex}]}
+ ip_address_uri:
+ description: storage MGMT network IP (for compatibility with storage_mgmt_v6.yaml)
+ value: {get_param: [IPPool, {get_param: StorageMgmtNetName}, {get_param: NodeIndex}]}
ip_subnet:
- # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the storage MGMT network IP
value:
list_join:
- ''
- - {get_param: [IPPool, {get_param: StorageMgmtNetName}, {get_param: NodeIndex}]}
- '/'
- - {get_param: [StorageMgmtNetCidr, -2]}
- - {get_param: [StorageMgmtNetCidr, -1]}
+ - {str_split: ['/', {get_param: StorageMgmtNetCidr}, 1]}
diff --git a/network/ports/storage_mgmt_v6.yaml b/network/ports/storage_mgmt_v6.yaml
new file mode 100644
index 00000000..61956be2
--- /dev/null
+++ b/network/ports/storage_mgmt_v6.yaml
@@ -0,0 +1,63 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Creates a port on the storage_mgmt API network.
+
+parameters:
+ StorageMgmtNetName:
+ description: Name of the storage_mgmt API neutron network
+ default: storage_mgmt
+ type: string
+ PortName:
+ description: Name of the port
+ default: ''
+ type: string
+ ControlPlaneIP: # Here for compatability with noop.yaml
+ description: IP address on the control plane
+ default: ''
+ type: string
+ FixedIPs:
+ description: >
+ Control the IP allocation for the VIP port. E.g.
+ [{'ip_address':'1.2.3.4'}]
+ default: []
+ type: json
+ IPPool: # Here for compatibility with from_pool.yaml
+ default: {}
+ type: json
+ NodeIndex: # Here for compatibility with from_pool.yaml
+ default: 0
+ type: number
+
+resources:
+
+ StorageMgmtPort:
+ type: OS::Neutron::Port
+ properties:
+ network: {get_param: StorageMgmtNetName}
+ name: {get_param: PortName}
+ fixed_ips: {get_param: FixedIPs}
+ replacement_policy: AUTO
+
+outputs:
+ ip_address:
+ description: storage_mgmt network IP
+ value: {get_attr: [StorageMgmtPort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: storage_mgmt network IP with brackets suitable for a URI
+ value:
+ list_join:
+ - ''
+ - - '['
+ - {get_attr: [StorageMgmtPort, fixed_ips, 0, ip_address]}
+ - ']'
+ ip_subnet:
+ # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
+ description: IP/Subnet CIDR for the storage_mgmt network IP
+ value:
+ list_join:
+ - ''
+ - - {get_attr: [StorageMgmtPort, fixed_ips, 0, ip_address]}
+ - '/'
+ - {get_attr: [StorageMgmtPort, subnets, 0, cidr, -2]}
+ - {get_attr: [StorageMgmtPort, subnets, 0, cidr, -1]}
diff --git a/network/ports/storage_v6.yaml b/network/ports/storage_v6.yaml
new file mode 100644
index 00000000..13b62276
--- /dev/null
+++ b/network/ports/storage_v6.yaml
@@ -0,0 +1,63 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Creates a port on the storage network.
+
+parameters:
+ StorageNetName:
+ description: Name of the storage neutron network
+ default: storage
+ type: string
+ PortName:
+ description: Name of the port
+ default: ''
+ type: string
+ ControlPlaneIP: # Here for compatability with noop.yaml
+ description: IP address on the control plane
+ default: ''
+ type: string
+ FixedIPs:
+ description: >
+ Control the IP allocation for the VIP port. E.g.
+ [{'ip_address':'1.2.3.4'}]
+ default: []
+ type: json
+ IPPool: # Here for compatibility with from_pool.yaml
+ default: {}
+ type: json
+ NodeIndex: # Here for compatibility with from_pool.yaml
+ default: 0
+ type: number
+
+resources:
+
+ StoragePort:
+ type: OS::Neutron::Port
+ properties:
+ network: {get_param: StorageNetName}
+ name: {get_param: PortName}
+ fixed_ips: {get_param: FixedIPs}
+ replacement_policy: AUTO
+
+outputs:
+ ip_address:
+ description: storage network IP
+ value: {get_attr: [StoragePort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: storage network IP with brackets suitable for a URL
+ value:
+ list_join:
+ - ''
+ - - '['
+ - {get_attr: [StoragePort, fixed_ips, 0, ip_address]}
+ - ']'
+ ip_subnet:
+ # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
+ description: IP/Subnet CIDR for the storage network IP
+ value:
+ list_join:
+ - ''
+ - - {get_attr: [StoragePort, fixed_ips, 0, ip_address]}
+ - '/'
+ - {get_attr: [StoragePort, subnets, 0, cidr, -2]}
+ - {get_attr: [StoragePort, subnets, 0, cidr, -1]}
diff --git a/network/ports/tenant.yaml b/network/ports/tenant.yaml
index 86c58f2f..d8f78c49 100644
--- a/network/ports/tenant.yaml
+++ b/network/ports/tenant.yaml
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
description: >
Creates a port on the tenant network.
@@ -43,13 +43,14 @@ outputs:
ip_address:
description: tenant network IP
value: {get_attr: [TenantPort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: tenant network IP (for compatibility with tenant_v6.yaml)
+ value: {get_attr: [TenantPort, fixed_ips, 0, ip_address]}
ip_subnet:
- # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the tenant network IP
value:
list_join:
- ''
- - {get_attr: [TenantPort, fixed_ips, 0, ip_address]}
- '/'
- - {get_attr: [TenantPort, subnets, 0, cidr, -2]}
- - {get_attr: [TenantPort, subnets, 0, cidr, -1]}
+ - {str_split: ['/', {get_attr: [TenantPort, subnets, 0, cidr]}, 1]}
diff --git a/network/ports/tenant_from_pool.yaml b/network/ports/tenant_from_pool.yaml
index 29303bb6..d5f3156e 100644
--- a/network/ports/tenant_from_pool.yaml
+++ b/network/ports/tenant_from_pool.yaml
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
description: >
Returns an IP from a network mapped list of IPs
@@ -33,13 +33,14 @@ outputs:
ip_address:
description: tenant network IP
value: {get_param: [IPPool, {get_param: TenantNetName}, {get_param: NodeIndex}]}
+ ip_address_uri:
+ description: tenant network IP (for compatibility with tenant_v6.yaml)
+ value: {get_param: [IPPool, {get_param: TenantNetName}, {get_param: NodeIndex}]}
ip_subnet:
- # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the tenant network IP
value:
list_join:
- ''
- - {get_param: [IPPool, {get_param: TenantNetName}, {get_param: NodeIndex}]}
- '/'
- - {get_param: [TenantNetCidr, -2]}
- - {get_param: [TenantNetCidr, -1]}
+ - {str_split: ['/', {get_param: TenantNetCidr}, 1]}
diff --git a/network/ports/tenant_v6.yaml b/network/ports/tenant_v6.yaml
new file mode 100644
index 00000000..6ca37549
--- /dev/null
+++ b/network/ports/tenant_v6.yaml
@@ -0,0 +1,63 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Creates a port on the tenant network.
+
+parameters:
+ TenantNetName:
+ description: Name of the tenant neutron network
+ default: tenant
+ type: string
+ PortName:
+ description: Name of the port
+ default: ''
+ type: string
+ ControlPlaneIP: # Here for compatability with noop.yaml
+ description: IP address on the control plane
+ default: ''
+ type: string
+ FixedIPs:
+ description: >
+ Control the IP allocation for the VIP port. E.g.
+ [{'ip_address':'1.2.3.4'}]
+ default: []
+ type: json
+ IPPool: # Here for compatibility with from_pool.yaml
+ default: {}
+ type: json
+ NodeIndex: # Here for compatibility with from_pool.yaml
+ default: 0
+ type: number
+
+resources:
+
+ TenantPort:
+ type: OS::Neutron::Port
+ properties:
+ network: {get_param: TenantNetName}
+ name: {get_param: PortName}
+ fixed_ips: {get_param: FixedIPs}
+ replacement_policy: AUTO
+
+outputs:
+ ip_address:
+ description: tenant network IP
+ value: {get_attr: [TenantPort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: tenant network IP with brackets suitable for a URL
+ value:
+ list_join:
+ - ''
+ - - '['
+ - {get_attr: [TenantPort, fixed_ips, 0, ip_address]}
+ - ']'
+ ip_subnet:
+ # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
+ description: IP/Subnet CIDR for the tenant network IP
+ value:
+ list_join:
+ - ''
+ - - {get_attr: [TenantPort, fixed_ips, 0, ip_address]}
+ - '/'
+ - {get_attr: [TenantPort, subnets, 0, cidr, -2]}
+ - {get_attr: [TenantPort, subnets, 0, cidr, -1]}
diff --git a/network/ports/vip.yaml b/network/ports/vip.yaml
index 9bb6cde2..38322907 100644
--- a/network/ports/vip.yaml
+++ b/network/ports/vip.yaml
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: 2015-10-15
description: >
Creates a port for a VIP on the isolated network NetworkName.
@@ -45,13 +45,14 @@ outputs:
ip_address:
description: Virtual IP network IP
value: {get_attr: [VipPort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: Virtual IP network IP (for compatibility with vip.yaml)
+ value: {get_attr: [VipPort, fixed_ips, 0, ip_address]}
ip_subnet:
- # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
description: IP/Subnet CIDR for the network associated with this IP
value:
list_join:
- ''
- - {get_attr: [VipPort, fixed_ips, 0, ip_address]}
- '/'
- - {get_attr: [VipPort, subnets, 0, cidr, -2]}
- - {get_attr: [VipPort, subnets, 0, cidr, -1]}
+ - {str_split: ['/', {get_attr: [VipPort, subnets, 0, cidr]}, 1]}
diff --git a/network/ports/vip_v6.yaml b/network/ports/vip_v6.yaml
new file mode 100644
index 00000000..de927094
--- /dev/null
+++ b/network/ports/vip_v6.yaml
@@ -0,0 +1,65 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Creates a port for a VIP on the isolated network NetworkName.
+ The IP address will be chosen automatically if FixedIPs is empty.
+
+parameters:
+ ServiceName: # Here for compatibility with from_service.yaml
+ description: Name of the service to lookup
+ default: ''
+ type: string
+ NetworkName:
+ description: Name of the network where the VIP will be created
+ default: internal_api
+ type: string
+ PortName:
+ description: Name of the port
+ default: ''
+ type: string
+ ControlPlaneIP: # Here for compatability with noop.yaml
+ description: IP address on the control plane
+ default: ''
+ type: string
+ ControlPlaneNetwork:
+ description: The name of the undercloud Neutron control plane
+ default: ctlplane
+ type: string
+ FixedIPs:
+ description: >
+ Control the IP allocation for the VIP port. E.g.
+ [{'ip_address':'1.2.3.4'}]
+ default: []
+ type: json
+
+resources:
+ VipPort:
+ type: OS::Neutron::Port
+ properties:
+ network: {get_param: NetworkName}
+ name: {get_param: PortName}
+ fixed_ips: {get_param: FixedIPs}
+ replacement_policy: AUTO
+
+outputs:
+ ip_address:
+ description: Virtual IP network IP
+ value: {get_attr: [VipPort, fixed_ips, 0, ip_address]}
+ ip_address_uri:
+ description: Virtual IP with brackets suitable for a URL
+ value:
+ list_join:
+ - ''
+ - - '['
+ - {get_attr: [VipPort, fixed_ips, 0, ip_address]}
+ - ']'
+ ip_subnet:
+ # FIXME: this assumes a 2 digit subnet CIDR (need more heat functions?)
+ description: IP/Subnet CIDR for the network associated with this IP
+ value:
+ list_join:
+ - ''
+ - - {get_attr: [VipPort, fixed_ips, 0, ip_address]}
+ - '/'
+ - {get_attr: [VipPort, subnets, 0, cidr, -2]}
+ - {get_attr: [VipPort, subnets, 0, cidr, -1]}
diff --git a/network/storage_mgmt_v6.yaml b/network/storage_mgmt_v6.yaml
new file mode 100644
index 00000000..f05644ef
--- /dev/null
+++ b/network/storage_mgmt_v6.yaml
@@ -0,0 +1,69 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Storage management network. Storage replication, etc.
+
+parameters:
+ # the defaults here work for static IP assignment (IPAM) only
+ StorageMgmtNetCidr:
+ # OpenStack uses the EUI-64 address format, which requires a /64 prefix
+ default: 'fd00:fd00:fd00:4000::/64'
+ description: Cidr for the storage management network.
+ type: string
+ StorageMgmtNetValueSpecs:
+ default: {'provider:physical_network': 'storage_mgmt', 'provider:network_type': 'flat'}
+ description: Value specs for the storage_mgmt network.
+ type: json
+ StorageMgmtNetAdminStateUp:
+ default: false
+ description: This admin state of of the network.
+ type: boolean
+ StorageMgmtNetShared:
+ default: false
+ description: Whether this network is shared across all tenants.
+ type: boolean
+ StorageMgmtNetName:
+ default: storage_mgmt
+ description: The name of the Storage management network.
+ type: string
+ StorageMgmtSubnetName:
+ default: storage_mgmt_subnet
+ description: The name of the Storage management subnet in Neutron.
+ type: string
+ StorageMgmtAllocationPools:
+ default: [{'start': 'fd00:fd00:fd00:4000::10', 'end': 'fd00:fd00:fd00:4000:ffff:ffff:ffff:fffe'}]
+ description: Ip allocation pool range for the storage mgmt network.
+ type: json
+ IPv6AddressMode:
+ default: dhcpv6-stateful
+ description: Neutron subnet IPv6 address mode
+ type: string
+ IPv6RAMode:
+ default: dhcpv6-stateful
+ description: Neutron subnet IPv6 router advertisement mode
+ type: string
+
+resources:
+ StorageMgmtNetwork:
+ type: OS::Neutron::Net
+ properties:
+ admin_state_up: {get_param: StorageMgmtNetAdminStateUp}
+ name: {get_param: StorageMgmtNetName}
+ shared: {get_param: StorageMgmtNetShared}
+ value_specs: {get_param: StorageMgmtNetValueSpecs}
+
+ StorageMgmtSubnet:
+ type: OS::Neutron::Subnet
+ properties:
+ ip_version: 6
+ ipv6_address_mode: {get_param: IPv6AddressMode}
+ ipv6_ra_mode: {get_param: IPv6RAMode}
+ cidr: {get_param: StorageMgmtNetCidr}
+ name: {get_param: StorageMgmtSubnetName}
+ network: {get_resource: StorageMgmtNetwork}
+ allocation_pools: {get_param: StorageMgmtAllocationPools}
+
+outputs:
+ OS::stack_id:
+ description: Neutron storage management network
+ value: {get_resource: StorageMgmtNetwork}
diff --git a/network/storage_v6.yaml b/network/storage_v6.yaml
new file mode 100644
index 00000000..36a6fae8
--- /dev/null
+++ b/network/storage_v6.yaml
@@ -0,0 +1,69 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Storage network.
+
+parameters:
+ # the defaults here work for static IP assignment (IPAM) only
+ StorageNetCidr:
+ # OpenStack uses the EUI-64 address format, which requires a /64 prefix
+ default: 'fd00:fd00:fd00:3000::/64'
+ description: Cidr for the storage network.
+ type: string
+ StorageNetValueSpecs:
+ default: {'provider:physical_network': 'storage', 'provider:network_type': 'flat'}
+ description: Value specs for the storage network.
+ type: json
+ StorageNetAdminStateUp:
+ default: false
+ description: This admin state of of the network.
+ type: boolean
+ StorageNetShared:
+ default: false
+ description: Whether this network is shared across all tenants.
+ type: boolean
+ StorageNetName:
+ default: storage
+ description: The name of the storage network.
+ type: string
+ StorageSubnetName:
+ default: storage_subnet
+ description: The name of the storage subnet in Neutron.
+ type: string
+ StorageAllocationPools:
+ default: [{'start': 'fd00:fd00:fd00:3000::10', 'end': 'fd00:fd00:fd00:3000:ffff:ffff:ffff:fffe'}]
+ description: Ip allocation pool range for the storage network.
+ type: json
+ IPv6AddressMode:
+ default: dhcpv6-stateful
+ description: Neutron subnet IPv6 address mode
+ type: string
+ IPv6RAMode:
+ default: dhcpv6-stateful
+ description: Neutron subnet IPv6 router advertisement mode
+ type: string
+
+resources:
+ StorageNetwork:
+ type: OS::Neutron::Net
+ properties:
+ admin_state_up: {get_param: StorageNetAdminStateUp}
+ name: {get_param: StorageNetName}
+ shared: {get_param: StorageNetShared}
+ value_specs: {get_param: StorageNetValueSpecs}
+
+ StorageSubnet:
+ type: OS::Neutron::Subnet
+ properties:
+ ip_version: 6
+ ipv6_address_mode: {get_param: IPv6AddressMode}
+ ipv6_ra_mode: {get_param: IPv6RAMode}
+ cidr: {get_param: StorageNetCidr}
+ name: {get_param: StorageSubnetName}
+ network: {get_resource: StorageNetwork}
+ allocation_pools: {get_param: StorageAllocationPools}
+
+outputs:
+ OS::stack_id:
+ description: Neutron storage network
+ value: {get_resource: StorageNetwork}
diff --git a/network/tenant_v6.yaml b/network/tenant_v6.yaml
new file mode 100644
index 00000000..b653eaf7
--- /dev/null
+++ b/network/tenant_v6.yaml
@@ -0,0 +1,69 @@
+heat_template_version: 2015-04-30
+
+description: >
+ Tenant IPv6 network.
+
+parameters:
+ # the defaults here work for static IP assignment (IPAM) only
+ TenantNetCidr:
+ # OpenStack uses the EUI-64 address format, which requires a /64 prefix
+ default: 'fd00:fd00:fd00:5000::/64'
+ description: Cidr for the tenant network.
+ type: string
+ TenantNetValueSpecs:
+ default: {'provider:physical_network': 'tenant', 'provider:network_type': 'flat'}
+ description: Value specs for the tenant network.
+ type: json
+ TenantNetAdminStateUp:
+ default: false
+ description: This admin state of of the network.
+ type: boolean
+ TenantNetShared:
+ default: false
+ description: Whether this network is shared across all tenants.
+ type: boolean
+ TenantNetName:
+ default: tenant
+ description: The name of the tenant network.
+ type: string
+ TenantSubnetName:
+ default: tenant_subnet
+ description: The name of the tenant subnet in Neutron.
+ type: string
+ TenantAllocationPools:
+ default: [{'start': 'fd00:fd00:fd00:5000::10', 'end': 'fd00:fd00:fd00:5000:ffff:ffff:ffff:fffe'}]
+ description: Ip allocation pool range for the tenant network.
+ type: json
+ IPv6AddressMode:
+ default: dhcpv6-stateful
+ description: Neutron subnet IPv6 address mode
+ type: string
+ IPv6RAMode:
+ default: dhcpv6-stateful
+ description: Neutron subnet IPv6 router advertisement mode
+ type: string
+
+resources:
+ TenantNetwork:
+ type: OS::Neutron::Net
+ properties:
+ admin_state_up: {get_param: TenantNetAdminStateUp}
+ name: {get_param: TenantNetName}
+ shared: {get_param: TenantNetShared}
+ value_specs: {get_param: TenantNetValueSpecs}
+
+ TenantSubnet:
+ type: OS::Neutron::Subnet
+ properties:
+ ip_version: 6
+ ipv6_address_mode: {get_param: IPv6AddressMode}
+ ipv6_ra_mode: {get_param: IPv6RAMode}
+ cidr: {get_param: TenantNetCidr}
+ name: {get_param: TenantSubnetName}
+ network: {get_resource: TenantNetwork}
+ allocation_pools: {get_param: TenantAllocationPools}
+
+outputs:
+ OS::stack_id:
+ description: Neutron tenant network
+ value: {get_resource: TenantNetwork}