diff options
Diffstat (limited to 'network')
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} |