Convert EndpointMap to not require per-service VIP parameters
authorSteven Hardy <shardy@redhat.com>
Fri, 15 Jul 2016 13:11:35 +0000 (14:11 +0100)
committerJuan Antonio Osorio Robles <jaosorior@redhat.com>
Thu, 11 Aug 2016 11:35:48 +0000 (14:35 +0300)
Currently we have a hard-coded set of per-service parameters, which
will cause problems for custom roles and full composability.

As a first step towards making this more configurable, remove the
hard-coded per-service parameters from overcloud.yaml, and adjust
the EndpointMap generation to instead accept two mappings, the
ServiceNetMap and a mapping of networks to IPs (effectively this
just moves the map lookup inside the endpoint map instead of
inside overcloud.yaml)

Change-Id: Ib522e89c36eed2115a6586dd5a6770907d9b33db
Partially-Implements: blueprint custom-roles

17 files changed:
environments/enable-tls.yaml
network/endpoints/build_endpoint_map.py
network/endpoints/endpoint_data.yaml
network/endpoints/endpoint_map.yaml
overcloud.yaml
puppet/services/aodh-base.yaml
puppet/services/ceilometer-base.yaml
puppet/services/cinder-base.yaml
puppet/services/glance-registry.yaml
puppet/services/gnocchi-base.yaml
puppet/services/heat-engine.yaml
puppet/services/ironic-base.yaml
puppet/services/keystone.yaml
puppet/services/manila-base.yaml
puppet/services/neutron-server.yaml
puppet/services/nova-base.yaml
puppet/services/sahara-base.yaml

index ee1f538..290d201 100644 (file)
@@ -38,7 +38,6 @@ parameter_defaults:
     ManilaInternal: {protocol: 'http', port: '8786', host: 'IP_ADDRESS'}
     ManilaPublic: {protocol: 'https', port: '13786', host: 'CLOUDNAME'}
     MysqlInternal: {protocol: 'mysql+pymysql', port: '3306', host: 'IP_ADDRESS'}
-    MysqlNoBracketsInternal: {protocol: 'mysql+pymysql', port: '3306', host: 'IP_ADDRESS'}
     NeutronAdmin: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'}
     NeutronInternal: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'}
     NeutronPublic: {protocol: 'https', port: '13696', host: 'CLOUDNAME'}
index d8cdee3..3110f3f 100755 (executable)
@@ -30,7 +30,9 @@ 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')
+PARAMS = (PARAM_CLOUDNAME, PARAM_ENDPOINTMAP, PARAM_NETIPMAP,
+          PARAM_SERVICENETMAP) = (
+          'CloudName', 'EndpointMap', 'NetIpMap', 'ServiceNetMap')
 FIELDS = (F_PORT, F_PROTOCOL, F_HOST) = ('port', 'protocol', 'host')
 
 ENDPOINT_TYPES = frozenset(['Internal', 'Public', 'Admin'])
@@ -56,16 +58,8 @@ def load_endpoint_data(infile=None):
         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 net_param_name(endpoint_type_defn):
+    return endpoint_type_defn['net_param'] + 'Network'
 
 
 def endpoint_map_default(config):
@@ -91,9 +85,9 @@ def make_parameter(ptype, default, description=None):
 
 
 def template_parameters(config):
-    params = collections.OrderedDict((n, make_parameter('string', ''))
-                                     for n in sorted(vip_param_names(config)))
-
+    params = collections.OrderedDict()
+    params[PARAM_NETIPMAP] = make_parameter('json', {}, 'The Net IP map')
+    params[PARAM_SERVICENETMAP] = make_parameter('json', {}, 'The Service Net map')
     params[PARAM_ENDPOINTMAP] = make_parameter('json',
                                                endpoint_map_default(config),
                                                'Mapping of service endpoint '
@@ -111,7 +105,7 @@ def template_parameters(config):
 def template_output_definition(endpoint_name,
                                endpoint_variant,
                                endpoint_type,
-                               vip_param,
+                               net_param,
                                uri_suffix=None,
                                name_override=None):
     def extract_field(field):
@@ -122,11 +116,29 @@ def template_output_definition(endpoint_name,
 
     port = extract_field(F_PORT)
     protocol = extract_field(F_PROTOCOL)
+    host_nobrackets = {
+        'str_replace': collections.OrderedDict([
+            ('template', extract_field(F_HOST)),
+            ('params', {
+                SUBST_IP_ADDRESS: {'get_param':
+                                   ['NetIpMap',
+                                    {'get_param': ['ServiceNetMap',
+                                     net_param]}]},
+                SUBST_CLOUDNAME: {'get_param': PARAM_CLOUDNAME},
+            })
+        ])
+    }
     host = {
         'str_replace': collections.OrderedDict([
             ('template', extract_field(F_HOST)),
             ('params', {
-                SUBST_IP_ADDRESS: {'get_param': vip_param},
+                SUBST_IP_ADDRESS: {'get_param':
+                                   ['NetIpMap',
+                                    {'str_replace':
+                                    {'template': 'NETWORK_uri',
+                                     'params': {'NETWORK':
+                                     {'get_param': ['ServiceNetMap',
+                                                    net_param]}}}}]},
                 SUBST_CLOUDNAME: {'get_param': PARAM_CLOUDNAME},
             })
         ])
@@ -140,6 +152,7 @@ def template_output_definition(endpoint_name,
                                                             endpoint_type)
 
     return name, {
+        'host_nobrackets': host_nobrackets,
         'host': host,
         'port': extract_field('port'),
         'protocol': extract_field('protocol'),
@@ -160,10 +173,9 @@ def template_endpoint_items(config):
                                             {'': None}).items():
                 name_override = defn.get('names', {}).get(variant)
                 yield template_output_definition(ep_name, variant, ep_type,
-                                                 vip_param_name(defn),
+                                                 net_param_name(defn),
                                                  suffix,
                                                  name_override)
-
     return itertools.chain.from_iterable(sorted(get_svc_endpoints(ep_name,
                                                                   svc))
                                          for (ep_name,
index ef3437f..84b03c7 100644 (file)
@@ -3,46 +3,46 @@
 
 Aodh:
     Internal:
-        vip_param: AodhApi
+        net_param: AodhApi
     Public:
-        vip_param: Public
+        net_param: Public
     Admin:
-        vip_param: AodhApi
+        net_param: AodhApi
     port: 8042
 
 Ceilometer:
     Internal:
-        vip_param: CeilometerApi
+        net_param: CeilometerApi
     Public:
-        vip_param: Public
+        net_param: Public
     Admin:
-        vip_param: CeilometerApi
+        net_param: CeilometerApi
     port: 8777
 
 Gnocchi:
     Internal:
-        vip_param: GnocchiApi
+        net_param: GnocchiApi
     Public:
-        vip_param: Public
+        net_param: Public
     Admin:
-        vip_param: GnocchiApi
+        net_param: GnocchiApi
     port: 8041
 
 Cinder:
     Internal:
-        vip_param: CinderApi
+        net_param: CinderApi
         uri_suffixes:
             '': /v1/%(tenant_id)s
             V2: /v2/%(tenant_id)s
             V3: /v3/%(tenant_id)s
     Public:
-        vip_param: Public
+        net_param: Public
         uri_suffixes:
             '': /v1/%(tenant_id)s
             V2: /v2/%(tenant_id)s
             V3: /v3/%(tenant_id)s
     Admin:
-        vip_param: CinderApi
+        net_param: CinderApi
         uri_suffixes:
             '': /v1/%(tenant_id)s
             V2: /v2/%(tenant_id)s
@@ -51,63 +51,57 @@ Cinder:
 
 Glance:
     Internal:
-        vip_param: GlanceApi
+        net_param: GlanceApi
     Public:
-        vip_param: Public
+        net_param: Public
     Admin:
-        vip_param: GlanceApi
+        net_param: GlanceApi
     port: 9292
 
 GlanceRegistry:
     Internal:
-        vip_param: GlanceRegistry
+        net_param: GlanceRegistry
     port: 9191
 
 Mysql:
     Internal:
-        vip_param: Mysql
-    protocol: mysql+pymysql
-    port: 3306
-
-MysqlNoBrackets:
-    Internal:
-        vip_param: MysqlNoBrackets
+        net_param: Mysql
     protocol: mysql+pymysql
     port: 3306
 
 Heat:
     Internal:
-        vip_param: HeatApi
+        net_param: HeatApi
         uri_suffixes:
             '': /v1/%(tenant_id)s
     Public:
-        vip_param: Public
+        net_param: Public
         uri_suffixes:
             '': /v1/%(tenant_id)s
     Admin:
-        vip_param: HeatApi
+        net_param: HeatApi
         uri_suffixes:
             '': /v1/%(tenant_id)s
     port: 8004
 
 HeatCfn:
     Internal:
-        vip_param: HeatApi
+        net_param: HeatApi
         uri_suffixes:
             '': /v1
     Public:
-        vip_param: Public
+        net_param: Public
         uri_suffixes:
             '': /v1
     Admin:
-        vip_param: HeatApi
+        net_param: HeatApi
         uri_suffixes:
             '': /v1
     port: 8000
 
 Horizon:
     Public:
-        vip_param: Public
+        net_param: Public
         uri_suffixes:
             '': /dashboard
     port: 80
@@ -116,7 +110,7 @@ Horizon:
 # Required for https://bugs.launchpad.net/puppet-nova/+bug/1542486
 Keystone:
     Internal:
-        vip_param: KeystonePublicApi
+        net_param: KeystonePublicApi
         uri_suffixes:
             '': /v2.0
             EC2: /v2.0/ec2tokens
@@ -124,12 +118,12 @@ Keystone:
         names:
             EC2: KeystoneEC2
     Public:
-        vip_param: Public
+        net_param: Public
         uri_suffixes:
             '': /v2.0
             V3: /v3
     Admin:
-        vip_param: KeystoneAdminApi
+        net_param: KeystoneAdminApi
         uri_suffixes:
             '': /v2.0
             V3: /v3
@@ -138,17 +132,17 @@ Keystone:
 
 Manila:
     Internal:
-        vip_param: ManilaApi
+        net_param: ManilaApi
         uri_suffixes:
             '': /v2/%(tenant_id)s
             V1: /v1/%(tenant_id)s
     Public:
-        vip_param: Public
+        net_param: Public
         uri_suffixes:
             '': /v2/%(tenant_id)s
             V1: /v1/%(tenant_id)s
     Admin:
-        vip_param: ManilaApi
+        net_param: ManilaApi
         uri_suffixes:
             '': /v2/%(tenant_id)s
             V1: /v1/%(tenant_id)s
@@ -156,50 +150,50 @@ Manila:
 
 Neutron:
     Internal:
-        vip_param: NeutronApi
+        net_param: NeutronApi
     Public:
-        vip_param: Public
+        net_param: Public
     Admin:
-        vip_param: NeutronApi
+        net_param: NeutronApi
     port: 9696
 
 Nova:
     Internal:
-        vip_param: NovaApi
+        net_param: NovaApi
         uri_suffixes:
             '': /v2.1
     Public:
-        vip_param: Public
+        net_param: Public
         uri_suffixes:
             '': /v2.1
     Admin:
-        vip_param: NovaApi
+        net_param: NovaApi
         uri_suffixes:
             '': /v2.1
     port: 8774
 
 NovaVNCProxy:
     Internal:
-        vip_param: NovaApi
+        net_param: NovaApi
     Public:
-        vip_param: Public
+        net_param: Public
     Admin:
-        vip_param: NovaApi
+        net_param: NovaApi
     port: 6080
 
 Swift:
     Internal:
-        vip_param: SwiftProxy
+        net_param: SwiftProxy
         uri_suffixes:
             '': /v1/AUTH_%(tenant_id)s
             S3:
     Public:
-        vip_param: Public
+        net_param: Public
         uri_suffixes:
             '': /v1/AUTH_%(tenant_id)s
             S3:
     Admin:
-        vip_param: SwiftProxy
+        net_param: SwiftProxy
         uri_suffixes:
             '':
             S3:
@@ -207,30 +201,30 @@ Swift:
 
 Sahara:
     Internal:
-        vip_param: SaharaApi
+        net_param: SaharaApi
         uri_suffixes:
             '': /v1.1/%(tenant_id)s
     Public:
-        vip_param: Public
+        net_param: Public
         uri_suffixes:
             '': /v1.1/%(tenant_id)s
     Admin:
-        vip_param: SaharaApi
+        net_param: SaharaApi
         uri_suffixes:
             '': /v1.1/%(tenant_id)s
     port: 8386
 
 Ironic:
     Internal:
-        vip_param: IronicApi
+        net_param: IronicApi
         uri_suffixes:
             '': /v1
     Public:
-        vip_param: Public
+        net_param: Public
         uri_suffixes:
             '': /v1
     Admin:
-        vip_param: IronicApi
+        net_param: IronicApi
         uri_suffixes:
             '': /v1
     port: 6385
index 0b5a13b..d055311 100644 (file)
@@ -8,24 +8,14 @@ description: A map of OpenStack endpoints. Since the endpoints are URLs,
   parameters come from net_ip_uri_map, which will include these brackets
   in IPv6 addresses.
 parameters:
-  AodhApiVirtualIP: {type: string, default: ''}
-  CeilometerApiVirtualIP: {type: string, default: ''}
-  CinderApiVirtualIP: {type: string, default: ''}
-  GlanceApiVirtualIP: {type: string, default: ''}
-  GlanceRegistryVirtualIP: {type: string, default: ''}
-  GnocchiApiVirtualIP: {type: string, default: ''}
-  HeatApiVirtualIP: {type: string, default: ''}
-  IronicApiVirtualIP: {type: string, default: ''}
-  KeystoneAdminApiVirtualIP: {type: string, default: ''}
-  KeystonePublicApiVirtualIP: {type: string, default: ''}
-  ManilaApiVirtualIP: {type: string, default: ''}
-  MysqlNoBracketsVirtualIP: {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: ''}
+  NetIpMap:
+    type: json
+    default: {}
+    description: The Net IP map
+  ServiceNetMap:
+    type: json
+    default: {}
+    description: The Service Net map
   EndpointMap:
     type: json
     default:
@@ -62,8 +52,6 @@ parameters:
       ManilaInternal: {protocol: http, port: '8786', host: IP_ADDRESS}
       ManilaPublic: {protocol: http, port: '8786', host: IP_ADDRESS}
       MysqlInternal: {protocol: mysql+pymysql, port: '3306', host: IP_ADDRESS}
-      MysqlNoBracketsInternal: {protocol: mysql+pymysql, port: '3306',
-        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}
@@ -93,7 +81,24 @@ outputs:
               get_param: [EndpointMap, AodhAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: AodhApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, AodhApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, AodhAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, AodhApiNetwork]
         port:
           get_param: [EndpointMap, AodhAdmin, port]
         protocol:
@@ -108,7 +113,14 @@ outputs:
                   get_param: [EndpointMap, AodhAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: AodhApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, AodhApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, AodhAdmin, port]
         uri_no_suffix:
@@ -121,7 +133,14 @@ outputs:
                   get_param: [EndpointMap, AodhAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: AodhApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, AodhApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, AodhAdmin, port]
       AodhInternal:
@@ -131,7 +150,24 @@ outputs:
               get_param: [EndpointMap, AodhInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: AodhApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, AodhApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, AodhInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, AodhApiNetwork]
         port:
           get_param: [EndpointMap, AodhInternal, port]
         protocol:
@@ -146,7 +182,14 @@ outputs:
                   get_param: [EndpointMap, AodhInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: AodhApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, AodhApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, AodhInternal, port]
         uri_no_suffix:
@@ -159,7 +202,14 @@ outputs:
                   get_param: [EndpointMap, AodhInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: AodhApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, AodhApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, AodhInternal, port]
       AodhPublic:
@@ -169,7 +219,24 @@ outputs:
               get_param: [EndpointMap, AodhPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, AodhPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, AodhPublic, port]
         protocol:
@@ -184,7 +251,14 @@ outputs:
                   get_param: [EndpointMap, AodhPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, AodhPublic, port]
         uri_no_suffix:
@@ -197,7 +271,14 @@ outputs:
                   get_param: [EndpointMap, AodhPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, AodhPublic, port]
       CeilometerAdmin:
@@ -207,7 +288,24 @@ outputs:
               get_param: [EndpointMap, CeilometerAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: CeilometerApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, CeilometerApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, CeilometerAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, CeilometerApiNetwork]
         port:
           get_param: [EndpointMap, CeilometerAdmin, port]
         protocol:
@@ -222,7 +320,14 @@ outputs:
                   get_param: [EndpointMap, CeilometerAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CeilometerApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CeilometerApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CeilometerAdmin, port]
         uri_no_suffix:
@@ -235,7 +340,14 @@ outputs:
                   get_param: [EndpointMap, CeilometerAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CeilometerApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CeilometerApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CeilometerAdmin, port]
       CeilometerInternal:
@@ -245,7 +357,24 @@ outputs:
               get_param: [EndpointMap, CeilometerInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: CeilometerApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, CeilometerApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, CeilometerInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, CeilometerApiNetwork]
         port:
           get_param: [EndpointMap, CeilometerInternal, port]
         protocol:
@@ -260,7 +389,14 @@ outputs:
                   get_param: [EndpointMap, CeilometerInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CeilometerApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CeilometerApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CeilometerInternal, port]
         uri_no_suffix:
@@ -273,7 +409,14 @@ outputs:
                   get_param: [EndpointMap, CeilometerInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CeilometerApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CeilometerApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CeilometerInternal, port]
       CeilometerPublic:
@@ -283,7 +426,24 @@ outputs:
               get_param: [EndpointMap, CeilometerPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, CeilometerPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, CeilometerPublic, port]
         protocol:
@@ -298,7 +458,14 @@ outputs:
                   get_param: [EndpointMap, CeilometerPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CeilometerPublic, port]
         uri_no_suffix:
@@ -311,7 +478,14 @@ outputs:
                   get_param: [EndpointMap, CeilometerPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CeilometerPublic, port]
       CinderAdmin:
@@ -321,7 +495,24 @@ outputs:
               get_param: [EndpointMap, CinderAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: CinderApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, CinderApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, CinderAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, CinderApiNetwork]
         port:
           get_param: [EndpointMap, CinderAdmin, port]
         protocol:
@@ -336,7 +527,14 @@ outputs:
                   get_param: [EndpointMap, CinderAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CinderApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CinderApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderAdmin, port]
             - /v1/%(tenant_id)s
@@ -350,7 +548,14 @@ outputs:
                   get_param: [EndpointMap, CinderAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CinderApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CinderApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderAdmin, port]
       CinderInternal:
@@ -360,7 +565,24 @@ outputs:
               get_param: [EndpointMap, CinderInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: CinderApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, CinderApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, CinderInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, CinderApiNetwork]
         port:
           get_param: [EndpointMap, CinderInternal, port]
         protocol:
@@ -375,7 +597,14 @@ outputs:
                   get_param: [EndpointMap, CinderInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CinderApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CinderApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderInternal, port]
             - /v1/%(tenant_id)s
@@ -389,7 +618,14 @@ outputs:
                   get_param: [EndpointMap, CinderInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CinderApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CinderApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderInternal, port]
       CinderPublic:
@@ -399,7 +635,24 @@ outputs:
               get_param: [EndpointMap, CinderPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, CinderPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, CinderPublic, port]
         protocol:
@@ -414,7 +667,14 @@ outputs:
                   get_param: [EndpointMap, CinderPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderPublic, port]
             - /v1/%(tenant_id)s
@@ -428,7 +688,14 @@ outputs:
                   get_param: [EndpointMap, CinderPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderPublic, port]
       CinderV2Admin:
@@ -438,7 +705,24 @@ outputs:
               get_param: [EndpointMap, CinderAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: CinderApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, CinderApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, CinderAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, CinderApiNetwork]
         port:
           get_param: [EndpointMap, CinderAdmin, port]
         protocol:
@@ -453,7 +737,14 @@ outputs:
                   get_param: [EndpointMap, CinderAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CinderApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CinderApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderAdmin, port]
             - /v2/%(tenant_id)s
@@ -467,7 +758,14 @@ outputs:
                   get_param: [EndpointMap, CinderAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CinderApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CinderApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderAdmin, port]
       CinderV2Internal:
@@ -477,7 +775,24 @@ outputs:
               get_param: [EndpointMap, CinderInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: CinderApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, CinderApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, CinderInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, CinderApiNetwork]
         port:
           get_param: [EndpointMap, CinderInternal, port]
         protocol:
@@ -492,7 +807,14 @@ outputs:
                   get_param: [EndpointMap, CinderInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CinderApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CinderApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderInternal, port]
             - /v2/%(tenant_id)s
@@ -506,7 +828,14 @@ outputs:
                   get_param: [EndpointMap, CinderInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CinderApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CinderApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderInternal, port]
       CinderV2Public:
@@ -516,7 +845,24 @@ outputs:
               get_param: [EndpointMap, CinderPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, CinderPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, CinderPublic, port]
         protocol:
@@ -531,7 +877,14 @@ outputs:
                   get_param: [EndpointMap, CinderPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderPublic, port]
             - /v2/%(tenant_id)s
@@ -545,7 +898,14 @@ outputs:
                   get_param: [EndpointMap, CinderPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderPublic, port]
       CinderV3Admin:
@@ -555,7 +915,24 @@ outputs:
               get_param: [EndpointMap, CinderAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: CinderApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, CinderApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, CinderAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, CinderApiNetwork]
         port:
           get_param: [EndpointMap, CinderAdmin, port]
         protocol:
@@ -570,7 +947,14 @@ outputs:
                   get_param: [EndpointMap, CinderAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CinderApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CinderApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderAdmin, port]
             - /v3/%(tenant_id)s
@@ -584,7 +968,14 @@ outputs:
                   get_param: [EndpointMap, CinderAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CinderApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CinderApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderAdmin, port]
       CinderV3Internal:
@@ -594,7 +985,24 @@ outputs:
               get_param: [EndpointMap, CinderInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: CinderApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, CinderApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, CinderInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, CinderApiNetwork]
         port:
           get_param: [EndpointMap, CinderInternal, port]
         protocol:
@@ -609,7 +1017,14 @@ outputs:
                   get_param: [EndpointMap, CinderInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CinderApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CinderApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderInternal, port]
             - /v3/%(tenant_id)s
@@ -623,7 +1038,14 @@ outputs:
                   get_param: [EndpointMap, CinderInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: CinderApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, CinderApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderInternal, port]
       CinderV3Public:
@@ -633,7 +1055,24 @@ outputs:
               get_param: [EndpointMap, CinderPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, CinderPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, CinderPublic, port]
         protocol:
@@ -648,7 +1087,14 @@ outputs:
                   get_param: [EndpointMap, CinderPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderPublic, port]
             - /v3/%(tenant_id)s
@@ -662,7 +1108,14 @@ outputs:
                   get_param: [EndpointMap, CinderPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, CinderPublic, port]
       GlanceAdmin:
@@ -672,7 +1125,24 @@ outputs:
               get_param: [EndpointMap, GlanceAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: GlanceApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, GlanceApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, GlanceAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, GlanceApiNetwork]
         port:
           get_param: [EndpointMap, GlanceAdmin, port]
         protocol:
@@ -687,7 +1157,14 @@ outputs:
                   get_param: [EndpointMap, GlanceAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: GlanceApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, GlanceApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, GlanceAdmin, port]
         uri_no_suffix:
@@ -700,7 +1177,14 @@ outputs:
                   get_param: [EndpointMap, GlanceAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: GlanceApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, GlanceApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, GlanceAdmin, port]
       GlanceInternal:
@@ -710,7 +1194,24 @@ outputs:
               get_param: [EndpointMap, GlanceInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: GlanceApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, GlanceApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, GlanceInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, GlanceApiNetwork]
         port:
           get_param: [EndpointMap, GlanceInternal, port]
         protocol:
@@ -725,7 +1226,14 @@ outputs:
                   get_param: [EndpointMap, GlanceInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: GlanceApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, GlanceApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, GlanceInternal, port]
         uri_no_suffix:
@@ -738,7 +1246,14 @@ outputs:
                   get_param: [EndpointMap, GlanceInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: GlanceApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, GlanceApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, GlanceInternal, port]
       GlancePublic:
@@ -748,7 +1263,24 @@ outputs:
               get_param: [EndpointMap, GlancePublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, GlancePublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, GlancePublic, port]
         protocol:
@@ -763,7 +1295,14 @@ outputs:
                   get_param: [EndpointMap, GlancePublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, GlancePublic, port]
         uri_no_suffix:
@@ -776,7 +1315,14 @@ outputs:
                   get_param: [EndpointMap, GlancePublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, GlancePublic, port]
       GlanceRegistryInternal:
@@ -786,7 +1332,24 @@ outputs:
               get_param: [EndpointMap, GlanceRegistryInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: GlanceRegistryVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, GlanceRegistryNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, GlanceRegistryInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, GlanceRegistryNetwork]
         port:
           get_param: [EndpointMap, GlanceRegistryInternal, port]
         protocol:
@@ -801,7 +1364,14 @@ outputs:
                   get_param: [EndpointMap, GlanceRegistryInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: GlanceRegistryVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, GlanceRegistryNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, GlanceRegistryInternal, port]
         uri_no_suffix:
@@ -814,7 +1384,14 @@ outputs:
                   get_param: [EndpointMap, GlanceRegistryInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: GlanceRegistryVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, GlanceRegistryNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, GlanceRegistryInternal, port]
       GnocchiAdmin:
@@ -824,7 +1401,24 @@ outputs:
               get_param: [EndpointMap, GnocchiAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: GnocchiApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, GnocchiApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, GnocchiAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, GnocchiApiNetwork]
         port:
           get_param: [EndpointMap, GnocchiAdmin, port]
         protocol:
@@ -839,7 +1433,14 @@ outputs:
                   get_param: [EndpointMap, GnocchiAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: GnocchiApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, GnocchiApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, GnocchiAdmin, port]
         uri_no_suffix:
@@ -852,7 +1453,14 @@ outputs:
                   get_param: [EndpointMap, GnocchiAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: GnocchiApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, GnocchiApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, GnocchiAdmin, port]
       GnocchiInternal:
@@ -862,7 +1470,24 @@ outputs:
               get_param: [EndpointMap, GnocchiInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: GnocchiApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, GnocchiApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, GnocchiInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, GnocchiApiNetwork]
         port:
           get_param: [EndpointMap, GnocchiInternal, port]
         protocol:
@@ -877,7 +1502,14 @@ outputs:
                   get_param: [EndpointMap, GnocchiInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: GnocchiApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, GnocchiApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, GnocchiInternal, port]
         uri_no_suffix:
@@ -890,7 +1522,14 @@ outputs:
                   get_param: [EndpointMap, GnocchiInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: GnocchiApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, GnocchiApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, GnocchiInternal, port]
       GnocchiPublic:
@@ -900,7 +1539,24 @@ outputs:
               get_param: [EndpointMap, GnocchiPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, GnocchiPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, GnocchiPublic, port]
         protocol:
@@ -915,7 +1571,14 @@ outputs:
                   get_param: [EndpointMap, GnocchiPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, GnocchiPublic, port]
         uri_no_suffix:
@@ -928,7 +1591,14 @@ outputs:
                   get_param: [EndpointMap, GnocchiPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, GnocchiPublic, port]
       HeatAdmin:
@@ -938,7 +1608,24 @@ outputs:
               get_param: [EndpointMap, HeatAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: HeatApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, HeatApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, HeatAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, HeatApiNetwork]
         port:
           get_param: [EndpointMap, HeatAdmin, port]
         protocol:
@@ -953,7 +1640,14 @@ outputs:
                   get_param: [EndpointMap, HeatAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: HeatApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, HeatApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, HeatAdmin, port]
             - /v1/%(tenant_id)s
@@ -967,7 +1661,14 @@ outputs:
                   get_param: [EndpointMap, HeatAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: HeatApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, HeatApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, HeatAdmin, port]
       HeatInternal:
@@ -977,7 +1678,24 @@ outputs:
               get_param: [EndpointMap, HeatInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: HeatApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, HeatApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, HeatInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, HeatApiNetwork]
         port:
           get_param: [EndpointMap, HeatInternal, port]
         protocol:
@@ -992,7 +1710,14 @@ outputs:
                   get_param: [EndpointMap, HeatInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: HeatApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, HeatApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, HeatInternal, port]
             - /v1/%(tenant_id)s
@@ -1006,7 +1731,14 @@ outputs:
                   get_param: [EndpointMap, HeatInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: HeatApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, HeatApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, HeatInternal, port]
       HeatPublic:
@@ -1016,7 +1748,24 @@ outputs:
               get_param: [EndpointMap, HeatPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, HeatPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, HeatPublic, port]
         protocol:
@@ -1031,7 +1780,14 @@ outputs:
                   get_param: [EndpointMap, HeatPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, HeatPublic, port]
             - /v1/%(tenant_id)s
@@ -1045,7 +1801,14 @@ outputs:
                   get_param: [EndpointMap, HeatPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, HeatPublic, port]
       HeatCfnAdmin:
@@ -1055,7 +1818,24 @@ outputs:
               get_param: [EndpointMap, HeatCfnAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: HeatApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, HeatApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, HeatCfnAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, HeatApiNetwork]
         port:
           get_param: [EndpointMap, HeatCfnAdmin, port]
         protocol:
@@ -1070,7 +1850,14 @@ outputs:
                   get_param: [EndpointMap, HeatCfnAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: HeatApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, HeatApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, HeatCfnAdmin, port]
             - /v1
@@ -1084,7 +1871,14 @@ outputs:
                   get_param: [EndpointMap, HeatCfnAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: HeatApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, HeatApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, HeatCfnAdmin, port]
       HeatCfnInternal:
@@ -1094,7 +1888,24 @@ outputs:
               get_param: [EndpointMap, HeatCfnInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: HeatApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, HeatApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, HeatCfnInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, HeatApiNetwork]
         port:
           get_param: [EndpointMap, HeatCfnInternal, port]
         protocol:
@@ -1109,7 +1920,14 @@ outputs:
                   get_param: [EndpointMap, HeatCfnInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: HeatApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, HeatApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, HeatCfnInternal, port]
             - /v1
@@ -1123,7 +1941,14 @@ outputs:
                   get_param: [EndpointMap, HeatCfnInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: HeatApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, HeatApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, HeatCfnInternal, port]
       HeatCfnPublic:
@@ -1133,7 +1958,24 @@ outputs:
               get_param: [EndpointMap, HeatCfnPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, HeatCfnPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, HeatCfnPublic, port]
         protocol:
@@ -1148,7 +1990,14 @@ outputs:
                   get_param: [EndpointMap, HeatCfnPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, HeatCfnPublic, port]
             - /v1
@@ -1162,7 +2011,14 @@ outputs:
                   get_param: [EndpointMap, HeatCfnPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, HeatCfnPublic, port]
       HorizonPublic:
@@ -1172,7 +2028,24 @@ outputs:
               get_param: [EndpointMap, HorizonPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, HorizonPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, HorizonPublic, port]
         protocol:
@@ -1187,7 +2060,14 @@ outputs:
                   get_param: [EndpointMap, HorizonPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, HorizonPublic, port]
             - /dashboard
@@ -1201,7 +2081,14 @@ outputs:
                   get_param: [EndpointMap, HorizonPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, HorizonPublic, port]
       IronicAdmin:
@@ -1211,7 +2098,24 @@ outputs:
               get_param: [EndpointMap, IronicAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: IronicApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, IronicApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, IronicAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, IronicApiNetwork]
         port:
           get_param: [EndpointMap, IronicAdmin, port]
         protocol:
@@ -1226,7 +2130,14 @@ outputs:
                   get_param: [EndpointMap, IronicAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: IronicApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, IronicApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, IronicAdmin, port]
             - /v1
@@ -1240,7 +2151,14 @@ outputs:
                   get_param: [EndpointMap, IronicAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: IronicApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, IronicApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, IronicAdmin, port]
       IronicInternal:
@@ -1250,7 +2168,24 @@ outputs:
               get_param: [EndpointMap, IronicInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: IronicApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, IronicApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, IronicInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, IronicApiNetwork]
         port:
           get_param: [EndpointMap, IronicInternal, port]
         protocol:
@@ -1265,7 +2200,14 @@ outputs:
                   get_param: [EndpointMap, IronicInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: IronicApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, IronicApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, IronicInternal, port]
             - /v1
@@ -1279,7 +2221,14 @@ outputs:
                   get_param: [EndpointMap, IronicInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: IronicApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, IronicApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, IronicInternal, port]
       IronicPublic:
@@ -1289,7 +2238,24 @@ outputs:
               get_param: [EndpointMap, IronicPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, IronicPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, IronicPublic, port]
         protocol:
@@ -1304,7 +2270,14 @@ outputs:
                   get_param: [EndpointMap, IronicPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, IronicPublic, port]
             - /v1
@@ -1318,7 +2291,14 @@ outputs:
                   get_param: [EndpointMap, IronicPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, IronicPublic, port]
       KeystoneAdmin:
@@ -1328,7 +2308,24 @@ outputs:
               get_param: [EndpointMap, KeystoneAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: KeystoneAdminApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, KeystoneAdminApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, KeystoneAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, KeystoneAdminApiNetwork]
         port:
           get_param: [EndpointMap, KeystoneAdmin, port]
         protocol:
@@ -1343,7 +2340,14 @@ outputs:
                   get_param: [EndpointMap, KeystoneAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: KeystoneAdminApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, KeystoneAdminApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, KeystoneAdmin, port]
             - /v2.0
@@ -1357,7 +2361,14 @@ outputs:
                   get_param: [EndpointMap, KeystoneAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: KeystoneAdminApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, KeystoneAdminApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, KeystoneAdmin, port]
       KeystoneEC2:
@@ -1367,7 +2378,24 @@ outputs:
               get_param: [EndpointMap, KeystoneInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, KeystonePublicApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, KeystoneInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, KeystonePublicApiNetwork]
         port:
           get_param: [EndpointMap, KeystoneInternal, port]
         protocol:
@@ -1382,7 +2410,14 @@ outputs:
                   get_param: [EndpointMap, KeystoneInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, KeystonePublicApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, KeystoneInternal, port]
             - /v2.0/ec2tokens
@@ -1396,7 +2431,14 @@ outputs:
                   get_param: [EndpointMap, KeystoneInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, KeystonePublicApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, KeystoneInternal, port]
       KeystoneInternal:
@@ -1406,7 +2448,24 @@ outputs:
               get_param: [EndpointMap, KeystoneInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, KeystonePublicApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, KeystoneInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, KeystonePublicApiNetwork]
         port:
           get_param: [EndpointMap, KeystoneInternal, port]
         protocol:
@@ -1421,7 +2480,14 @@ outputs:
                   get_param: [EndpointMap, KeystoneInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, KeystonePublicApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, KeystoneInternal, port]
             - /v2.0
@@ -1435,7 +2501,14 @@ outputs:
                   get_param: [EndpointMap, KeystoneInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, KeystonePublicApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, KeystoneInternal, port]
       KeystonePublic:
@@ -1445,7 +2518,24 @@ outputs:
               get_param: [EndpointMap, KeystonePublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, KeystonePublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, KeystonePublic, port]
         protocol:
@@ -1460,7 +2550,14 @@ outputs:
                   get_param: [EndpointMap, KeystonePublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, KeystonePublic, port]
             - /v2.0
@@ -1474,7 +2571,14 @@ outputs:
                   get_param: [EndpointMap, KeystonePublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, KeystonePublic, port]
       KeystoneV3Admin:
@@ -1484,7 +2588,24 @@ outputs:
               get_param: [EndpointMap, KeystoneAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: KeystoneAdminApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, KeystoneAdminApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, KeystoneAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, KeystoneAdminApiNetwork]
         port:
           get_param: [EndpointMap, KeystoneAdmin, port]
         protocol:
@@ -1499,7 +2620,14 @@ outputs:
                   get_param: [EndpointMap, KeystoneAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: KeystoneAdminApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, KeystoneAdminApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, KeystoneAdmin, port]
             - /v3
@@ -1513,7 +2641,14 @@ outputs:
                   get_param: [EndpointMap, KeystoneAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: KeystoneAdminApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, KeystoneAdminApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, KeystoneAdmin, port]
       KeystoneV3Internal:
@@ -1523,7 +2658,24 @@ outputs:
               get_param: [EndpointMap, KeystoneInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, KeystonePublicApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, KeystoneInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, KeystonePublicApiNetwork]
         port:
           get_param: [EndpointMap, KeystoneInternal, port]
         protocol:
@@ -1538,7 +2690,14 @@ outputs:
                   get_param: [EndpointMap, KeystoneInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, KeystonePublicApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, KeystoneInternal, port]
             - /v3
@@ -1552,7 +2711,14 @@ outputs:
                   get_param: [EndpointMap, KeystoneInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: KeystonePublicApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, KeystonePublicApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, KeystoneInternal, port]
       KeystoneV3Public:
@@ -1562,7 +2728,24 @@ outputs:
               get_param: [EndpointMap, KeystonePublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, KeystonePublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, KeystonePublic, port]
         protocol:
@@ -1577,7 +2760,14 @@ outputs:
                   get_param: [EndpointMap, KeystonePublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, KeystonePublic, port]
             - /v3
@@ -1591,7 +2781,14 @@ outputs:
                   get_param: [EndpointMap, KeystonePublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, KeystonePublic, port]
       ManilaAdmin:
@@ -1601,7 +2798,24 @@ outputs:
               get_param: [EndpointMap, ManilaAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: ManilaApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, ManilaApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ManilaAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, ManilaApiNetwork]
         port:
           get_param: [EndpointMap, ManilaAdmin, port]
         protocol:
@@ -1616,7 +2830,14 @@ outputs:
                   get_param: [EndpointMap, ManilaAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: ManilaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ManilaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, ManilaAdmin, port]
             - /v2/%(tenant_id)s
@@ -1630,7 +2851,14 @@ outputs:
                   get_param: [EndpointMap, ManilaAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: ManilaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ManilaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, ManilaAdmin, port]
       ManilaInternal:
@@ -1640,7 +2868,24 @@ outputs:
               get_param: [EndpointMap, ManilaInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: ManilaApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, ManilaApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ManilaInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, ManilaApiNetwork]
         port:
           get_param: [EndpointMap, ManilaInternal, port]
         protocol:
@@ -1655,7 +2900,14 @@ outputs:
                   get_param: [EndpointMap, ManilaInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: ManilaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ManilaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, ManilaInternal, port]
             - /v2/%(tenant_id)s
@@ -1669,7 +2921,14 @@ outputs:
                   get_param: [EndpointMap, ManilaInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: ManilaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ManilaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, ManilaInternal, port]
       ManilaPublic:
@@ -1679,7 +2938,24 @@ outputs:
               get_param: [EndpointMap, ManilaPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ManilaPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, ManilaPublic, port]
         protocol:
@@ -1694,7 +2970,14 @@ outputs:
                   get_param: [EndpointMap, ManilaPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, ManilaPublic, port]
             - /v2/%(tenant_id)s
@@ -1708,7 +2991,14 @@ outputs:
                   get_param: [EndpointMap, ManilaPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, ManilaPublic, port]
       ManilaV1Admin:
@@ -1718,7 +3008,24 @@ outputs:
               get_param: [EndpointMap, ManilaAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: ManilaApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, ManilaApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ManilaAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, ManilaApiNetwork]
         port:
           get_param: [EndpointMap, ManilaAdmin, port]
         protocol:
@@ -1733,7 +3040,14 @@ outputs:
                   get_param: [EndpointMap, ManilaAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: ManilaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ManilaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, ManilaAdmin, port]
             - /v1/%(tenant_id)s
@@ -1747,7 +3061,14 @@ outputs:
                   get_param: [EndpointMap, ManilaAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: ManilaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ManilaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, ManilaAdmin, port]
       ManilaV1Internal:
@@ -1757,7 +3078,24 @@ outputs:
               get_param: [EndpointMap, ManilaInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: ManilaApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, ManilaApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ManilaInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, ManilaApiNetwork]
         port:
           get_param: [EndpointMap, ManilaInternal, port]
         protocol:
@@ -1772,7 +3110,14 @@ outputs:
                   get_param: [EndpointMap, ManilaInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: ManilaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ManilaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, ManilaInternal, port]
             - /v1/%(tenant_id)s
@@ -1786,7 +3131,14 @@ outputs:
                   get_param: [EndpointMap, ManilaInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: ManilaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ManilaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, ManilaInternal, port]
       ManilaV1Public:
@@ -1796,7 +3148,24 @@ outputs:
               get_param: [EndpointMap, ManilaPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ManilaPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, ManilaPublic, port]
         protocol:
@@ -1811,7 +3180,14 @@ outputs:
                   get_param: [EndpointMap, ManilaPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, ManilaPublic, port]
             - /v1/%(tenant_id)s
@@ -1825,7 +3201,14 @@ outputs:
                   get_param: [EndpointMap, ManilaPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, ManilaPublic, port]
       MysqlInternal:
@@ -1835,7 +3218,24 @@ outputs:
               get_param: [EndpointMap, MysqlInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: MysqlVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, MysqlNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, MysqlInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, MysqlNetwork]
         port:
           get_param: [EndpointMap, MysqlInternal, port]
         protocol:
@@ -1850,7 +3250,14 @@ outputs:
                   get_param: [EndpointMap, MysqlInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: MysqlVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, MysqlNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, MysqlInternal, port]
         uri_no_suffix:
@@ -1863,55 +3270,41 @@ outputs:
                   get_param: [EndpointMap, MysqlInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: MysqlVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, MysqlNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, MysqlInternal, port]
-      MysqlNoBracketsInternal:
+      NeutronAdmin:
         host:
           str_replace:
             template:
-              get_param: [EndpointMap, MysqlNoBracketsInternal, host]
+              get_param: [EndpointMap, NeutronAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: MysqlNoBracketsVirtualIP}
-        port:
-          get_param: [EndpointMap, MysqlNoBracketsInternal, port]
-        protocol:
-          get_param: [EndpointMap, MysqlNoBracketsInternal, protocol]
-        uri:
-          list_join:
-          - ''
-          - - get_param: [EndpointMap, MysqlNoBracketsInternal, protocol]
-            - ://
-            - str_replace:
-                template:
-                  get_param: [EndpointMap, MysqlNoBracketsInternal, host]
-                params:
-                  CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: MysqlNoBracketsVirtualIP}
-            - ':'
-            - get_param: [EndpointMap, MysqlNoBracketsInternal, port]
-        uri_no_suffix:
-          list_join:
-          - ''
-          - - get_param: [EndpointMap, MysqlNoBracketsInternal, protocol]
-            - ://
-            - str_replace:
-                template:
-                  get_param: [EndpointMap, MysqlNoBracketsInternal, host]
-                params:
-                  CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: MysqlNoBracketsVirtualIP}
-            - ':'
-            - get_param: [EndpointMap, MysqlNoBracketsInternal, port]
-      NeutronAdmin:
-        host:
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, NeutronApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
           str_replace:
             template:
               get_param: [EndpointMap, NeutronAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: NeutronApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, NeutronApiNetwork]
         port:
           get_param: [EndpointMap, NeutronAdmin, port]
         protocol:
@@ -1926,7 +3319,14 @@ outputs:
                   get_param: [EndpointMap, NeutronAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: NeutronApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NeutronApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NeutronAdmin, port]
         uri_no_suffix:
@@ -1939,7 +3339,14 @@ outputs:
                   get_param: [EndpointMap, NeutronAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: NeutronApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NeutronApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NeutronAdmin, port]
       NeutronInternal:
@@ -1949,7 +3356,24 @@ outputs:
               get_param: [EndpointMap, NeutronInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: NeutronApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, NeutronApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, NeutronInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, NeutronApiNetwork]
         port:
           get_param: [EndpointMap, NeutronInternal, port]
         protocol:
@@ -1964,7 +3388,14 @@ outputs:
                   get_param: [EndpointMap, NeutronInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: NeutronApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NeutronApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NeutronInternal, port]
         uri_no_suffix:
@@ -1977,7 +3408,14 @@ outputs:
                   get_param: [EndpointMap, NeutronInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: NeutronApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NeutronApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NeutronInternal, port]
       NeutronPublic:
@@ -1987,7 +3425,24 @@ outputs:
               get_param: [EndpointMap, NeutronPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, NeutronPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, NeutronPublic, port]
         protocol:
@@ -2002,7 +3457,14 @@ outputs:
                   get_param: [EndpointMap, NeutronPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NeutronPublic, port]
         uri_no_suffix:
@@ -2015,7 +3477,14 @@ outputs:
                   get_param: [EndpointMap, NeutronPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NeutronPublic, port]
       NovaAdmin:
@@ -2025,7 +3494,24 @@ outputs:
               get_param: [EndpointMap, NovaAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: NovaApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, NovaApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, NovaAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, NovaApiNetwork]
         port:
           get_param: [EndpointMap, NovaAdmin, port]
         protocol:
@@ -2040,7 +3526,14 @@ outputs:
                   get_param: [EndpointMap, NovaAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: NovaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NovaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NovaAdmin, port]
             - /v2.1
@@ -2054,7 +3547,14 @@ outputs:
                   get_param: [EndpointMap, NovaAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: NovaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NovaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NovaAdmin, port]
       NovaInternal:
@@ -2064,7 +3564,24 @@ outputs:
               get_param: [EndpointMap, NovaInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: NovaApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, NovaApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, NovaInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, NovaApiNetwork]
         port:
           get_param: [EndpointMap, NovaInternal, port]
         protocol:
@@ -2079,7 +3596,14 @@ outputs:
                   get_param: [EndpointMap, NovaInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: NovaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NovaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NovaInternal, port]
             - /v2.1
@@ -2093,7 +3617,14 @@ outputs:
                   get_param: [EndpointMap, NovaInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: NovaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NovaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NovaInternal, port]
       NovaPublic:
@@ -2103,7 +3634,24 @@ outputs:
               get_param: [EndpointMap, NovaPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, NovaPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, NovaPublic, port]
         protocol:
@@ -2118,7 +3666,14 @@ outputs:
                   get_param: [EndpointMap, NovaPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NovaPublic, port]
             - /v2.1
@@ -2132,7 +3687,14 @@ outputs:
                   get_param: [EndpointMap, NovaPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NovaPublic, port]
       NovaVNCProxyAdmin:
@@ -2142,7 +3704,24 @@ outputs:
               get_param: [EndpointMap, NovaVNCProxyAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: NovaApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, NovaApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, NovaVNCProxyAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, NovaApiNetwork]
         port:
           get_param: [EndpointMap, NovaVNCProxyAdmin, port]
         protocol:
@@ -2157,7 +3736,14 @@ outputs:
                   get_param: [EndpointMap, NovaVNCProxyAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: NovaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NovaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NovaVNCProxyAdmin, port]
         uri_no_suffix:
@@ -2170,7 +3756,14 @@ outputs:
                   get_param: [EndpointMap, NovaVNCProxyAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: NovaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NovaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NovaVNCProxyAdmin, port]
       NovaVNCProxyInternal:
@@ -2180,7 +3773,24 @@ outputs:
               get_param: [EndpointMap, NovaVNCProxyInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: NovaApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, NovaApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, NovaVNCProxyInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, NovaApiNetwork]
         port:
           get_param: [EndpointMap, NovaVNCProxyInternal, port]
         protocol:
@@ -2195,7 +3805,14 @@ outputs:
                   get_param: [EndpointMap, NovaVNCProxyInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: NovaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NovaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NovaVNCProxyInternal, port]
         uri_no_suffix:
@@ -2208,7 +3825,14 @@ outputs:
                   get_param: [EndpointMap, NovaVNCProxyInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: NovaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NovaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NovaVNCProxyInternal, port]
       NovaVNCProxyPublic:
@@ -2218,7 +3842,24 @@ outputs:
               get_param: [EndpointMap, NovaVNCProxyPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, NovaVNCProxyPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, NovaVNCProxyPublic, port]
         protocol:
@@ -2233,7 +3874,14 @@ outputs:
                   get_param: [EndpointMap, NovaVNCProxyPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NovaVNCProxyPublic, port]
         uri_no_suffix:
@@ -2246,7 +3894,14 @@ outputs:
                   get_param: [EndpointMap, NovaVNCProxyPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NovaVNCProxyPublic, port]
       SaharaAdmin:
@@ -2256,7 +3911,24 @@ outputs:
               get_param: [EndpointMap, SaharaAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, SaharaApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, SaharaAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, SaharaApiNetwork]
         port:
           get_param: [EndpointMap, SaharaAdmin, port]
         protocol:
@@ -2271,7 +3943,14 @@ outputs:
                   get_param: [EndpointMap, SaharaAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, SaharaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SaharaAdmin, port]
             - /v1.1/%(tenant_id)s
@@ -2285,7 +3964,14 @@ outputs:
                   get_param: [EndpointMap, SaharaAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, SaharaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SaharaAdmin, port]
       SaharaInternal:
@@ -2295,7 +3981,24 @@ outputs:
               get_param: [EndpointMap, SaharaInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, SaharaApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, SaharaInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, SaharaApiNetwork]
         port:
           get_param: [EndpointMap, SaharaInternal, port]
         protocol:
@@ -2310,7 +4013,14 @@ outputs:
                   get_param: [EndpointMap, SaharaInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, SaharaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SaharaInternal, port]
             - /v1.1/%(tenant_id)s
@@ -2324,7 +4034,14 @@ outputs:
                   get_param: [EndpointMap, SaharaInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: SaharaApiVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, SaharaApiNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SaharaInternal, port]
       SaharaPublic:
@@ -2334,7 +4051,24 @@ outputs:
               get_param: [EndpointMap, SaharaPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, SaharaPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, SaharaPublic, port]
         protocol:
@@ -2349,7 +4083,14 @@ outputs:
                   get_param: [EndpointMap, SaharaPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SaharaPublic, port]
             - /v1.1/%(tenant_id)s
@@ -2363,7 +4104,14 @@ outputs:
                   get_param: [EndpointMap, SaharaPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SaharaPublic, port]
       SwiftAdmin:
@@ -2373,7 +4121,24 @@ outputs:
               get_param: [EndpointMap, SwiftAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, SwiftProxyNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, SwiftAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, SwiftProxyNetwork]
         port:
           get_param: [EndpointMap, SwiftAdmin, port]
         protocol:
@@ -2388,7 +4153,14 @@ outputs:
                   get_param: [EndpointMap, SwiftAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, SwiftProxyNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SwiftAdmin, port]
         uri_no_suffix:
@@ -2401,7 +4173,14 @@ outputs:
                   get_param: [EndpointMap, SwiftAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, SwiftProxyNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SwiftAdmin, port]
       SwiftInternal:
@@ -2411,7 +4190,24 @@ outputs:
               get_param: [EndpointMap, SwiftInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, SwiftProxyNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, SwiftInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, SwiftProxyNetwork]
         port:
           get_param: [EndpointMap, SwiftInternal, port]
         protocol:
@@ -2426,7 +4222,14 @@ outputs:
                   get_param: [EndpointMap, SwiftInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, SwiftProxyNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SwiftInternal, port]
             - /v1/AUTH_%(tenant_id)s
@@ -2440,7 +4243,14 @@ outputs:
                   get_param: [EndpointMap, SwiftInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, SwiftProxyNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SwiftInternal, port]
       SwiftPublic:
@@ -2450,7 +4260,24 @@ outputs:
               get_param: [EndpointMap, SwiftPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, SwiftPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, SwiftPublic, port]
         protocol:
@@ -2465,7 +4292,14 @@ outputs:
                   get_param: [EndpointMap, SwiftPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SwiftPublic, port]
             - /v1/AUTH_%(tenant_id)s
@@ -2479,7 +4313,14 @@ outputs:
                   get_param: [EndpointMap, SwiftPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SwiftPublic, port]
       SwiftS3Admin:
@@ -2489,7 +4330,24 @@ outputs:
               get_param: [EndpointMap, SwiftAdmin, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, SwiftProxyNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, SwiftAdmin, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, SwiftProxyNetwork]
         port:
           get_param: [EndpointMap, SwiftAdmin, port]
         protocol:
@@ -2504,7 +4362,14 @@ outputs:
                   get_param: [EndpointMap, SwiftAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, SwiftProxyNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SwiftAdmin, port]
         uri_no_suffix:
@@ -2517,7 +4382,14 @@ outputs:
                   get_param: [EndpointMap, SwiftAdmin, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, SwiftProxyNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SwiftAdmin, port]
       SwiftS3Internal:
@@ -2527,7 +4399,24 @@ outputs:
               get_param: [EndpointMap, SwiftInternal, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, SwiftProxyNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, SwiftInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, SwiftProxyNetwork]
         port:
           get_param: [EndpointMap, SwiftInternal, port]
         protocol:
@@ -2542,7 +4431,14 @@ outputs:
                   get_param: [EndpointMap, SwiftInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, SwiftProxyNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SwiftInternal, port]
         uri_no_suffix:
@@ -2555,7 +4451,14 @@ outputs:
                   get_param: [EndpointMap, SwiftInternal, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: SwiftProxyVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, SwiftProxyNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SwiftInternal, port]
       SwiftS3Public:
@@ -2565,7 +4468,24 @@ outputs:
               get_param: [EndpointMap, SwiftPublic, host]
             params:
               CLOUDNAME: {get_param: CloudName}
-              IP_ADDRESS: {get_param: PublicVirtualIP}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, SwiftPublic, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
         port:
           get_param: [EndpointMap, SwiftPublic, port]
         protocol:
@@ -2580,7 +4500,14 @@ outputs:
                   get_param: [EndpointMap, SwiftPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SwiftPublic, port]
         uri_no_suffix:
@@ -2593,6 +4520,13 @@ outputs:
                   get_param: [EndpointMap, SwiftPublic, host]
                 params:
                   CLOUDNAME: {get_param: CloudName}
-                  IP_ADDRESS: {get_param: PublicVirtualIP}
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SwiftPublic, port]
index dde5a8c..e6db316 100644 (file)
@@ -141,6 +141,7 @@ parameters:
       BlockStorageHostnameResolveNetwork: internal_api
       ObjectStorageHostnameResolveNetwork: internal_api
       CephStorageHostnameResolveNetwork: storage
+      PublicNetwork: external
     description: Mapping of service_name -> network name. Typically set
                  via parameter_defaults in the resource registry.
     type: json
@@ -396,24 +397,8 @@ resources:
     type: OS::TripleO::EndpointMap
     properties:
       CloudName: {get_param: CloudName}
-      CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
-      AodhApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
-      CinderApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
-      GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
-      GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
-      GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
-      HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
-      IronicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
-      KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
-      KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
-      ManilaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
-      MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
-      MysqlNoBracketsVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
-      NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
-      NovaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
-      SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
-      SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
-      PublicVirtualIP: {get_attr: [VipMap, net_ip_uri_map, external]}
+      NetIpMap: {get_attr: [VipMap, net_ip_map]}
+      ServiceNetMap: {get_param: ServiceNetMap}
 
   ControllerServiceChain:
     type: OS::TripleO::Services
index 30c3f41..6a9f5d7 100644 (file)
@@ -85,7 +85,7 @@ outputs:
         aodh::keystone::auth::tenant: 'service'
         aodh::db::mysql::user: aodh
         aodh::db::mysql::password: {get_param: AodhPassword}
-        aodh::db::mysql::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+        aodh::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
         aodh::db::mysql::dbname: aodh
         aodh::db::mysql::allowed_hosts:
           - '%'
index 5342cef..1398fed 100644 (file)
@@ -103,7 +103,7 @@ outputs:
         ceilometer::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
         ceilometer::rabbit_port: {get_param: RabbitClientPort}
         ceilometer::db::mysql::user: ceilometer
-        ceilometer::db::mysql::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+        ceilometer::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
         ceilometer::db::mysql::dbname: ceilometer
         ceilometer::db::mysql::allowed_hosts:
           - '%'
index f5d98af..c554bf9 100644 (file)
@@ -58,7 +58,7 @@ outputs:
         cinder::rabbit_password: {get_param: RabbitPassword}
         cinder::rabbit_port: {get_param: RabbitClientPort}
         cinder::db::mysql::user: cinder
-        cinder::db::mysql::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+        cinder::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
         cinder::db::mysql::dbname: cinder
         cinder::db::mysql::allowed_hosts:
           - '%'
index 40d1819..ca10fd1 100644 (file)
@@ -45,7 +45,7 @@ outputs:
         glance::registry::debug: {get_param: Debug}
         glance::registry::workers: {get_param: GlanceWorkers}
         glance::db::mysql::user: glance
-        glance::db::mysql::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+        glance::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
         glance::db::mysql::dbname: glance
         glance::db::mysql::allowed_hosts:
           - '%'
index a408d5d..c971de4 100644 (file)
@@ -89,7 +89,7 @@ outputs:
         gnocchi::statsd::flush_delay: 10
         gnocchi::statsd::archive_policy_name: 'low'
         gnocchi::db::mysql::user: gnocchi
-        gnocchi::db::mysql::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+        gnocchi::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
         gnocchi::db::mysql::dbname: gnocchi
         gnocchi::db::mysql::allowed_hosts:
           - '%'
index 13555a6..044ca88 100644 (file)
@@ -58,7 +58,7 @@ outputs:
             heat::db::mysql::password: {get_param: HeatPassword}
             heat::keystone::domain::domain_password: {get_param: HeatStackDomainAdminPassword}
             heat::db::mysql::user: heat
-            heat::db::mysql::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+            heat::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
             heat::db::mysql::dbname: heat
             heat::db::mysql::allowed_hosts:
               - '%'
index 41d2234..508694e 100644 (file)
@@ -59,7 +59,7 @@ outputs:
         ironic::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
         ironic::db::mysql::password: {get_param: IronicPassword}
         ironic::db::mysql::user: ironic
-        ironic::db::mysql::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+        ironic::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
         ironic::db::mysql::dbname: ironic
         ironic::db::mysql::allowed_hosts:
           - '%'
index d45ed86..988c80c 100644 (file)
@@ -112,7 +112,7 @@ outputs:
         keystone_enable_db_purge: {get_param: KeystoneEnableDBPurge}
         keystone::public_endpoint: {get_param: [EndpointMap, KeystonePublic, uri_no_suffix]}
         keystone::db::mysql::user: keystone
-        keystone::db::mysql::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+        keystone::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
         keystone::db::mysql::dbname: keystone
         keystone::db::mysql::allowed_hosts:
           - '%'
index c156379..663a934 100644 (file)
@@ -93,7 +93,7 @@ outputs:
         manila::rabbit_port: {get_param: RabbitClientPort}
         manila::debug: {get_param: Debug}
         manila::db::mysql::user: manila
-        manila::db::mysql::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+        manila::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
         manila::db::mysql::dbname: manila
         manila::db::database_db_max_retries: -1
         manila::db::database_max_retries: -1
index cd602e6..c40b37b 100644 (file)
@@ -82,7 +82,7 @@ outputs:
             neutron::server::sync_db: true
             neutron::db::mysql::password: {get_param: NeutronPassword}
             neutron::db::mysql::user: neutron
-            neutron::db::mysql::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+            neutron::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
             neutron::db::mysql::dbname: ovs_neutron
             neutron::db::mysql::allowed_hosts:
               - '%'
index 5bc94b2..9dd0c95 100644 (file)
@@ -70,14 +70,14 @@ outputs:
               - '/nova_api'
         nova::db::mysql::password: {get_input: nova_password}
         nova::db::mysql::user: nova
-        nova::db::mysql::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+        nova::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
         nova::db::mysql::dbname: nova
         nova::db::mysql::allowed_hosts:
           - '%'
           - "%{hiera('mysql_bind_host')}"
         nova::db::mysql_api::password: {get_input: nova_password}
         nova::db::mysql_api::user: nova_api
-        nova::db::mysql_api::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+        nova::db::mysql_api::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
         nova::db::mysql_api::dbname: nova_api
         nova::db::mysql_api::allowed_hosts:
           - '%'
@@ -96,13 +96,13 @@ outputs:
         nova::notification_driver: messagingv2
         nova::network::neutron::neutron_auth_type: 'v3password'
         nova::db::mysql::user: nova
-        nova::db::mysql::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+        nova::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
         nova::db::mysql::dbname: nova
         nova::db::mysql::allowed_hosts:
           - '%'
           - "%{hiera('mysql_bind_host')}"
         nova::db::mysql_api::user: nova_api
-        nova::db::mysql_api::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+        nova::db::mysql_api::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
         nova::db::mysql_api::dbname: nova_api
         nova::db::mysql_api::allowed_hosts:
           - '%'
index 7ec44a4..cbd7640 100644 (file)
@@ -53,7 +53,7 @@ outputs:
               - '/sahara'
         sahara::db::mysql::password: {get_param: SaharaPassword}
         sahara::db::mysql::user: sahara
-        sahara::db::mysql::host: {get_param: [EndpointMap, MysqlNoBracketsInternal, host]}
+        sahara::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
         sahara::db::mysql::dbname: sahara
         sahara::db::mysql::allowed_hosts:
           - '%'