Add gateway_ip in OS::Neutron::Subnet
[apex-tripleo-heat-templates.git] / overcloud.yaml
index 0499fa6..3adfa3e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: 2016-04-08
 
 description: >
   Deploy an OpenStack environment, consisting of several node types (roles),
 
 description: >
   Deploy an OpenStack environment, consisting of several node types (roles),
@@ -16,6 +16,10 @@ parameters:
     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
     type: string
     hidden: true
     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
     type: string
     hidden: true
+  AodhPassword:
+    description: The password for the aodh services.
+    type: string
+    hidden: true
   CeilometerBackend:
     default: 'mongodb'
     description: The ceilometer backend type.
   CeilometerBackend:
     default: 'mongodb'
     description: The ceilometer backend type.
@@ -28,6 +32,12 @@ parameters:
     description: The password for the ceilometer service account.
     type: string
     hidden: true
     description: The password for the ceilometer service account.
     type: string
     hidden: true
+  CeilometerMeterDispatcher:
+    default: 'database'
+    description: Dispatcher to process meter data
+    type: string
+    constraints:
+    - allowed_values: ['gnocchi', 'database']
   # This has to be an UUID so for now we generate it outside the template
   CephClusterFSID:
     default: ''
   # This has to be an UUID so for now we generate it outside the template
   CephClusterFSID:
     default: ''
@@ -72,6 +82,10 @@ parameters:
     default: []
     description: Should be used for arbitrary ips.
     type: json
     default: []
     description: Should be used for arbitrary ips.
     type: json
+  CorosyncIPv6:
+    default: false
+    description: Enable IPv6 in Corosync
+    type: boolean
   Debug:
     default: ''
     description: Set to True to enable debugging on all services.
   Debug:
     default: ''
     description: Set to True to enable debugging on all services.
@@ -100,10 +114,10 @@ parameters:
     type: string
     constraints:
       - custom_constraint: nova.keypair
     type: string
     constraints:
       - custom_constraint: nova.keypair
-  NeutronExternalNetworkBridge:
-    description: Name of bridge used for external network traffic.
-    type: string
-    default: 'br-ex'
+  MemcachedIPv6:
+    default: false
+    description: Enable IPv6 features in Memcached.
+    type: boolean
   NeutronBridgeMappings:
     description: >
       The OVS logical->physical bridge mappings to use. See the Neutron
   NeutronBridgeMappings:
     description: >
       The OVS logical->physical bridge mappings to use. See the Neutron
@@ -118,10 +132,6 @@ parameters:
     default: 'ctlplane'
     type: string
     description: Neutron ID or name for ctlplane network.
     default: 'ctlplane'
     type: string
     description: Neutron ID or name for ctlplane network.
-  NeutronEnableIsolatedMetadata:
-    default: 'False'
-    description: If True, DHCP provide metadata route to VM.
-    type: string
   NeutronEnableTunnelling:
     type: string
     default: "True"
   NeutronEnableTunnelling:
     type: string
     default: "True"
@@ -240,10 +250,10 @@ parameters:
     default: 'False'
     description: Whether to enable l3-agent HA
     type: string
     default: 'False'
     description: Whether to enable l3-agent HA
     type: string
-  NeutronDhcpAgentsPerNetwork:
-    type: number
-    default: 1
-    description: The number of neutron dhcp agents to schedule per network
+  NovaIPv6:
+    default: false
+    description: Enable IPv6 features in Nova
+    type: boolean
   NovaPassword:
     description: The password for the nova service account, used by nova-api.
     type: string
   NovaPassword:
     description: The password for the nova service account, used by nova-api.
     type: string
@@ -256,6 +266,10 @@ parameters:
     default: false
     description: Should MongoDb journaling be disabled
     type: boolean
     default: false
     description: Should MongoDb journaling be disabled
     type: boolean
+  MongoDbIPv6:
+    default: false
+    description: Enable IPv6 if MongoDB VIP is IPv6
+    type: boolean
   PublicVirtualFixedIPs:
     default: []
     description: >
   PublicVirtualFixedIPs:
     default: []
     description: >
@@ -266,13 +280,11 @@ parameters:
     type: string
     default: unset
     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
     type: string
     default: unset
     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
-  # FIXME: 'guest' is provisioned in RabbitMQ by default, we should create a user if these are changed
   RabbitUserName:
     default: guest
     description: The username for RabbitMQ
     type: string
   RabbitPassword:
   RabbitUserName:
     default: guest
     description: The username for RabbitMQ
     type: string
   RabbitPassword:
-    default: guest
     description: The password for RabbitMQ
     type: string
     hidden: true
     description: The password for RabbitMQ
     type: string
     hidden: true
@@ -286,11 +298,10 @@ parameters:
     default: 5672
     description: Set rabbit subscriber port, change this if using SSL
     type: number
     default: 5672
     description: Set rabbit subscriber port, change this if using SSL
     type: number
-  # We need to set this as string because 'unlimited' is a valid setting
-  RabbitFDLimit:
-    default: 16384
-    description: Configures RabbitMQ FD limit
+  RedisPassword:
+    description: The password for Redis
     type: string
     type: string
+    hidden: true
   SnmpdReadonlyUserName:
     default: ro_snmp_user
     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
   SnmpdReadonlyUserName:
     default: ro_snmp_user
     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
@@ -329,10 +340,6 @@ parameters:
     type: json
 
   # Controller-specific params
     type: json
 
   # Controller-specific params
-  AdminToken:
-    description: The keystone auth secret.
-    type: string
-    hidden: true
   CinderLVMLoopDeviceSize:
     default: 10280
     description: The size of the loopback file used by the cinder LVM driver.
   CinderLVMLoopDeviceSize:
     default: 10280
     description: The size of the loopback file used by the cinder LVM driver.
@@ -354,7 +361,7 @@ parameters:
     type: string
     hidden: true
   CinderISCSIHelper:
     type: string
     hidden: true
   CinderISCSIHelper:
-    default: tgtadm
+    default: lioadm
     description: The iSCSI helper to use with cinder.
     type: string
   ControllerCount:
     description: The iSCSI helper to use with cinder.
     type: string
   ControllerCount:
@@ -365,8 +372,7 @@ parameters:
   controllerExtraConfig:
     default: {}
     description: |
   controllerExtraConfig:
     default: {}
     description: |
-      Controller specific configuration to inject into the cluster. Same
-      structure as ExtraConfig.
+      Deprecated. Use ControllerExtraConfig via parameter_defaults instead.
     type: json
   controllerImage:
     type: string
     type: json
   controllerImage:
     type: string
@@ -442,69 +448,25 @@ parameters:
           ]
         }
     type: json
           ]
         }
     type: json
-  GlanceLogFile:
-    description: The filepath of the file to use for logging messages from Glance.
-    type: string
-    default: ''
-  GlanceNotifierStrategy:
-    description: Strategy to use for Glance notification queue
-    type: string
-    default: noop
-  GlancePassword:
-    description: The password for the glance service account, used by the glance services.
-    type: string
-    hidden: true
-  GlanceBackend:
-    default: swift
-    description: The short name of the Glance backend to use. Should be one
+  GnocchiBackend:
+    default: file
+    description: The short name of the Gnocchi backend to use. Should be one
       of swift, rbd or file
     type: string
     constraints:
     - allowed_values: ['swift', 'file', 'rbd']
       of swift, rbd or file
     type: string
     constraints:
     - allowed_values: ['swift', 'file', 'rbd']
-  HeatPassword:
-    description: The password for the Heat service account, used by the Heat services.
+  GnocchiIndexerBackend:
+    default: 'mysql'
+    description: The short name of the Gnocchi indexer backend to use.
     type: string
     type: string
-    hidden: true
-  HeatStackDomainAdminPassword:
-    description: Password for heat_domain_admin user.
+  GnocchiPassword:
+    description: The password for the gnocchi service account.
     type: string
     hidden: true
   InstanceNameTemplate:
     default: 'instance-%08x'
     description: Template string to be used to generate instance names
     type: string
     type: string
     hidden: true
   InstanceNameTemplate:
     default: 'instance-%08x'
     description: Template string to be used to generate instance names
     type: string
-  KeystoneCACertificate:
-    default: ''
-    description: Keystone self-signed certificate authority certificate.
-    type: string
-  KeystoneSigningCertificate:
-    default: ''
-    description: Keystone certificate for verifying token validity.
-    type: string
-  KeystoneSigningKey:
-    default: ''
-    description: Keystone key for signing tokens.
-    type: string
-    hidden: true
-  KeystoneSSLCertificate:
-    default: ''
-    description: Keystone certificate for verifying token validity.
-    type: string
-  KeystoneSSLCertificateKey:
-    default: ''
-    description: Keystone key for signing tokens.
-    type: string
-    hidden: true
-  KeystoneNotificationDriver:
-    description: Comma-separated list of Oslo notification drivers used by Keystone
-    default: ['messaging']
-    type: comma_delimited_list
-  KeystoneNotificationFormat:
-    description: The Keystone notification format
-    default: 'basic'
-    type: string
-    constraints:
-      - allowed_values: [ 'basic', 'cadf' ]
   ManageFirewall:
     default: false
     description: Whether to manage IPtables rules.
   ManageFirewall:
     default: false
     description: Whether to manage IPtables rules.
@@ -524,13 +486,6 @@ parameters:
     description: Configures MySQL max_connections config setting
     type: number
     default: 4096
     description: Configures MySQL max_connections config setting
     type: number
     default: 4096
-  NeutronDnsmasqOptions:
-    default: 'dhcp-option-force=26,%MTU%'
-    description: >
-      Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU
-      to be set to the value of NeutronTenantMtu, which should be set to account
-      for tunnel overhead.
-    type: string
   NeutronPublicInterfaceDefaultRoute:
     default: ''
     description: A custom default route for the NeutronPublicInterface.
   NeutronPublicInterfaceDefaultRoute:
     default: ''
     description: A custom default route for the NeutronPublicInterface.
@@ -553,10 +508,6 @@ parameters:
     description: A random string to be used as a salt when hashing to determine mappings in the ring.
     type: string
     hidden: true
     description: A random string to be used as a salt when hashing to determine mappings in the ring.
     type: string
     hidden: true
-  SwiftPassword:
-    description: The password for the swift service account, used by the swift proxy services.
-    type: string
-    hidden: true
   SwiftMountCheck:
     default: 'false'
     description: Value of mount_check in Swift account/container/object -server.conf
   SwiftMountCheck:
     default: 'false'
     description: Value of mount_check in Swift account/container/object -server.conf
@@ -653,6 +604,8 @@ parameters:
     default:
       NeutronTenantNetwork: tenant
       CeilometerApiNetwork: internal_api
     default:
       NeutronTenantNetwork: tenant
       CeilometerApiNetwork: internal_api
+      AodhApiNetwork: internal_api
+      GnocchiApiNetwork: internal_api
       MongoDbNetwork: internal_api
       CinderApiNetwork: internal_api
       CinderIscsiNetwork: storage
       MongoDbNetwork: internal_api
       CinderApiNetwork: internal_api
       CinderIscsiNetwork: storage
@@ -684,6 +637,34 @@ parameters:
                  via parameter_defaults in the resource registry.
     type: json
 
                  via parameter_defaults in the resource registry.
     type: json
 
+  ControllerServices:
+    default:
+      - OS::TripleO::Services::Keystone
+      - OS::TripleO::Services::GlanceApi
+      - OS::TripleO::Services::GlanceRegistry
+      - OS::TripleO::Services::HeatApi
+      - OS::TripleO::Services::HeatApiCfn
+      - OS::TripleO::Services::HeatApiCloudwatch
+      - OS::TripleO::Services::HeatEngine
+      - OS::TripleO::Services::NeutronDhcpAgent
+      - OS::TripleO::Services::NeutronL3Agent
+      - OS::TripleO::Services::NeutronMetadataAgent
+      - OS::TripleO::Services::RabbitMQ
+      - OS::TripleO::Services::Loadbalancer
+      - OS::TripleO::Services::Memcached
+      - OS::TripleO::Services::SwiftProxy
+    description: A list of service resources (configured in the Heat
+                 resource_registry) which represent nested stacks
+                 for each service that should get installed on the Controllers.
+    type: comma_delimited_list
+
+  ComputeServices:
+    default: []
+    description: A list of service resources (configured in the Heat
+                 resource_registry) which represent nested stacks
+                 for each service that should get installed on the Compute Nodes.
+    type: comma_delimited_list
+
 # Block storage specific parameters
   BlockStorageCount:
     type: number
 # Block storage specific parameters
   BlockStorageCount:
     type: number
@@ -732,6 +713,14 @@ parameters:
     type: json
     description: Optional scheduler hints to pass to nova
     default: {}
     type: json
     description: Optional scheduler hints to pass to nova
     default: {}
+  ObjectStorageServices:
+    default: []
+    description: A list of service resources (configured in the Heat
+                 resource_registry) which represent nested stacks
+                 for each service that should get installed on the ObjectStorage nodes.
+                 Note this role currently only supports steps 2, 3 and 4 configuration.
+    type: comma_delimited_list
+
 
 # Ceph storage specific parameters
   CephStorageCount:
 
 # Ceph storage specific parameters
   CephStorageCount:
@@ -756,7 +745,12 @@ parameters:
     type: json
     description: Optional scheduler hints to pass to nova
     default: {}
     type: json
     description: Optional scheduler hints to pass to nova
     default: {}
-
+  CephStorageServices:
+    default: []
+    description: A list of service resources (configured in the Heat
+                 resource_registry) which represent nested stacks
+                 for each service that should get installed on the CephStorage nodes.
+    type: comma_delimited_list
 
   # Hostname format for each role
   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
 
   # Hostname format for each role
   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
@@ -831,6 +825,12 @@ parameters:
       List of resources to be removed from CephStorageResourceGroup when
       doing an update which requires removal of specific resources.
 
       List of resources to be removed from CephStorageResourceGroup when
       doing an update which requires removal of specific resources.
 
+parameter_groups:
+- label: deprecated
+  description: Do not use deprecated params, they will be removed.
+  parameters:
+  - controllerExtraConfig
+
 
 resources:
 
 
 resources:
 
@@ -851,19 +851,28 @@ resources:
     type: OS::TripleO::EndpointMap
     properties:
       CloudName: {get_param: CloudName}
     type: OS::TripleO::EndpointMap
     properties:
       CloudName: {get_param: CloudName}
-      CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
-      CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
-      GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
-      GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
-      HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
-      KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
-      KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
-      MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
-      NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
-      NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
-      SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
-      SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
-      PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
+      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]}]}
+      KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
+      KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
+      MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_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]}
+
+  ControllerServiceChain:
+    type: OS::TripleO::Services
+    depends_on: Networks
+    properties:
+      Services: {get_param: ControllerServices}
+      EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
 
   Controller:
     type: OS::Heat::ResourceGroup
 
   Controller:
     type: OS::Heat::ResourceGroup
@@ -875,10 +884,11 @@ resources:
         type: OS::TripleO::Controller
         properties:
           AdminPassword: {get_param: AdminPassword}
         type: OS::TripleO::Controller
         properties:
           AdminPassword: {get_param: AdminPassword}
-          AdminToken: {get_param: AdminToken}
+          AodhPassword: {get_param: AodhPassword}
           CeilometerBackend: {get_param: CeilometerBackend}
           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
           CeilometerPassword: {get_param: CeilometerPassword}
           CeilometerBackend: {get_param: CeilometerBackend}
           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
           CeilometerPassword: {get_param: CeilometerPassword}
+          CeilometerMeterDispatcher: {get_param: CeilometerMeterDispatcher}
           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
           CinderNfsMountOptions: {get_param: CinderNfsMountOptions}
           CinderNfsServers: {get_param: CinderNfsServers}
           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
           CinderNfsMountOptions: {get_param: CinderNfsMountOptions}
           CinderNfsServers: {get_param: CinderNfsServers}
@@ -889,7 +899,8 @@ resources:
           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
           CloudDomain: {get_param: CloudDomain}
           ControlVirtualInterface: {get_param: ControlVirtualInterface}
           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
           CloudDomain: {get_param: CloudDomain}
           ControlVirtualInterface: {get_param: ControlVirtualInterface}
-          ControllerExtraConfig: {get_param: controllerExtraConfig}
+          controllerExtraConfig: {get_param: controllerExtraConfig}
+          CorosyncIPv6: {get_param: CorosyncIPv6}
           Debug: {get_param: Debug}
           EnableFencing: {get_param: EnableFencing}
           ManageFirewall: {get_param: ManageFirewall}
           Debug: {get_param: Debug}
           EnableFencing: {get_param: EnableFencing}
           ManageFirewall: {get_param: ManageFirewall}
@@ -900,13 +911,10 @@ resources:
           ExtraConfig: {get_param: ExtraConfig}
           FencingConfig: {get_param: FencingConfig}
           Flavor: {get_param: OvercloudControlFlavor}
           ExtraConfig: {get_param: ExtraConfig}
           FencingConfig: {get_param: FencingConfig}
           Flavor: {get_param: OvercloudControlFlavor}
-          GlancePassword: {get_param: GlancePassword}
-          GlanceBackend: {get_param: GlanceBackend}
-          GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
-          GlanceLogFile: {get_param: GlanceLogFile}
+          GnocchiPassword: {get_param: GnocchiPassword}
+          GnocchiBackend: {get_param: GnocchiBackend}
+          GnocchiIndexerBackend: {get_param: GnocchiIndexerBackend}
           HAProxySyslogAddress: {get_param: HAProxySyslogAddress}
           HAProxySyslogAddress: {get_param: HAProxySyslogAddress}
-          HeatPassword: {get_param: HeatPassword}
-          HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
           HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
           HorizonSecret: {get_resource: HorizonSecret}
           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
           HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
           HorizonSecret: {get_resource: HorizonSecret}
@@ -914,13 +922,7 @@ resources:
           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
           InstanceNameTemplate: {get_param: InstanceNameTemplate}
           KeyName: {get_param: KeyName}
           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
           InstanceNameTemplate: {get_param: InstanceNameTemplate}
           KeyName: {get_param: KeyName}
-          KeystoneCACertificate: {get_param: KeystoneCACertificate}
-          KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
-          KeystoneSigningKey: {get_param: KeystoneSigningKey}
-          KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
-          KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
-          KeystoneNotificationDriver: {get_param: KeystoneNotificationDriver}
-          KeystoneNotificationFormat: {get_param: KeystoneNotificationFormat}
+          MemcachedIPv6: {get_param: MemcachedIPv6}
           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
           MysqlMaxConnections: {get_param: MysqlMaxConnections}
           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
           MysqlMaxConnections: {get_param: MysqlMaxConnections}
@@ -929,8 +931,6 @@ resources:
           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
           NeutronTenantMtu: {get_param: NeutronTenantMtu}
           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
           NeutronTenantMtu: {get_param: NeutronTenantMtu}
-          NeutronExternalNetworkBridge: {get_param: NeutronExternalNetworkBridge}
-          NeutronEnableIsolatedMetadata: {get_param: NeutronEnableIsolatedMetadata}
           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
           NeutronEnableL2Pop: {get_param: NeutronEnableL2Pop}
           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
           NeutronEnableL2Pop: {get_param: NeutronEnableL2Pop}
           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
@@ -938,11 +938,6 @@ resources:
           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
           NeutronPassword: {get_param: NeutronPassword}
           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
           NeutronPassword: {get_param: NeutronPassword}
-          NeutronDnsmasqOptions:
-            str_replace:
-              template: {get_param: NeutronDnsmasqOptions}
-              params:
-                '%MTU%': {get_param: NeutronTenantMtu}
           NeutronDVR: {get_param: NeutronDVR}
           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
           NeutronAgentMode: {get_param: NeutronAgentMode}
           NeutronDVR: {get_param: NeutronDVR}
           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
           NeutronAgentMode: {get_param: NeutronAgentMode}
@@ -954,12 +949,13 @@ resources:
           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
           NeutronL3HA: {get_param: NeutronL3HA}
           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
           NeutronL3HA: {get_param: NeutronL3HA}
-          NeutronDhcpAgentsPerNetwork: {get_param: NeutronDhcpAgentsPerNetwork}
           NeutronNetworkType: {get_param: NeutronNetworkType}
           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
           NeutronNetworkType: {get_param: NeutronNetworkType}
           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
+          NovaIPv6: {get_param: NovaIPv6}
           NovaPassword: {get_param: NovaPassword}
           NtpServer: {get_param: NtpServer}
           MongoDbNoJournal: {get_param: MongoDbNoJournal}
           NovaPassword: {get_param: NovaPassword}
           NtpServer: {get_param: NtpServer}
           MongoDbNoJournal: {get_param: MongoDbNoJournal}
+          MongoDbIPv6: {get_param: MongoDbIPv6}
           PcsdPassword: {get_resource: PcsdPassword}
           PublicVirtualInterface: {get_param: PublicVirtualInterface}
           RabbitPassword: {get_param: RabbitPassword}
           PcsdPassword: {get_resource: PcsdPassword}
           PublicVirtualInterface: {get_param: PublicVirtualInterface}
           RabbitPassword: {get_param: RabbitPassword}
@@ -967,16 +963,16 @@ resources:
           RabbitCookie: {get_attr: [RabbitCookie, value]}
           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
           RabbitClientPort: {get_param: RabbitClientPort}
           RabbitCookie: {get_attr: [RabbitCookie, value]}
           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
           RabbitClientPort: {get_param: RabbitClientPort}
-          RabbitFDLimit: {get_param: RabbitFDLimit}
+          RedisPassword: {get_param: RedisPassword}
           SaharaPassword: {get_param: SaharaPassword}
           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
           SaharaPassword: {get_param: SaharaPassword}
           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
+          RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
           SwiftHashSuffix: {get_param: SwiftHashSuffix}
           SwiftMountCheck: {get_param: SwiftMountCheck}
           SwiftMinPartHours: {get_param: SwiftMinPartHours}
           SwiftPartPower: {get_param: SwiftPartPower}
           SwiftHashSuffix: {get_param: SwiftHashSuffix}
           SwiftMountCheck: {get_param: SwiftMountCheck}
           SwiftMinPartHours: {get_param: SwiftMinPartHours}
           SwiftPartPower: {get_param: SwiftPartPower}
-          SwiftPassword: {get_param: SwiftPassword}
           SwiftReplicas: { get_param: SwiftReplicas}
           TimeZone: {get_param: TimeZone}
           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]} # deprecated. Use per service VIP settings instead now.
           SwiftReplicas: { get_param: SwiftReplicas}
           TimeZone: {get_param: TimeZone}
           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]} # deprecated. Use per service VIP settings instead now.
@@ -984,15 +980,14 @@ resources:
           ServiceNetMap: {get_param: ServiceNetMap}
           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
           CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
           ServiceNetMap: {get_param: ServiceNetMap}
           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
           CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
+          AodhApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
+          GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
           CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
           CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
-          GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
-          GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
+          HeatApiVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
-          KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
-          KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
           SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
           SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
@@ -1005,6 +1000,13 @@ resources:
           NodeIndex: '%index%'
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: ControllerSchedulerHints}
           NodeIndex: '%index%'
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: ControllerSchedulerHints}
+          ServiceConfigSettings: {get_attr: [ControllerServiceChain, config_settings]}
+
+  ComputeServiceChain:
+    type: OS::TripleO::Services
+    properties:
+      Services: {get_param: ComputeServices}
+      EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
 
   Compute:
     type: OS::Heat::ResourceGroup
 
   Compute:
     type: OS::Heat::ResourceGroup
@@ -1060,6 +1062,7 @@ resources:
           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
+          NovaIPv6: {get_param: NovaIPv6}
           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
           NovaPassword: {get_param: NovaPassword}
           NovaOVSBridge: {get_param: NovaOVSBridge}
           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
           NovaPassword: {get_param: NovaPassword}
           NovaOVSBridge: {get_param: NovaOVSBridge}
@@ -1084,6 +1087,9 @@ resources:
           CloudDomain: {get_param: CloudDomain}
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: NovaComputeSchedulerHints}
           CloudDomain: {get_param: CloudDomain}
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: NovaComputeSchedulerHints}
+          NodeIndex: '%index%'
+          ServiceConfigSettings: {get_attr: [ComputeServiceChain, config_settings]}
+
 
   BlockStorage:
     type: OS::Heat::ResourceGroup
 
   BlockStorage:
     type: OS::Heat::ResourceGroup
@@ -1119,12 +1125,18 @@ resources:
                 '%stackname%': {get_param: 'OS::stack_name'}
           ServiceNetMap: {get_param: ServiceNetMap}
           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
                 '%stackname%': {get_param: 'OS::stack_name'}
           ServiceNetMap: {get_param: ServiceNetMap}
           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
-          MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
           ExtraConfig: {get_param: ExtraConfig}
           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
           CloudDomain: {get_param: CloudDomain}
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: BlockStorageSchedulerHints}
           ExtraConfig: {get_param: ExtraConfig}
           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
           CloudDomain: {get_param: CloudDomain}
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: BlockStorageSchedulerHints}
+          NodeIndex: '%index%'
+
+  ObjectStorageServiceChain:
+    type: OS::TripleO::Services
+    properties:
+      Services: {get_param: ObjectStorageServices}
+      EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
 
   ObjectStorage:
     type: OS::Heat::ResourceGroup
 
   ObjectStorage:
     type: OS::Heat::ResourceGroup
@@ -1157,6 +1169,14 @@ resources:
           CloudDomain: {get_param: CloudDomain}
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
           CloudDomain: {get_param: CloudDomain}
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
+          NodeIndex: '%index%'
+          ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, config_settings]}
+
+  CephStorageServiceChain:
+    type: OS::TripleO::Services
+    properties:
+      Services: {get_param: CephStorageServices}
+      EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
 
   CephStorage:
     type: OS::Heat::ResourceGroup
 
   CephStorage:
     type: OS::Heat::ResourceGroup
@@ -1184,6 +1204,8 @@ resources:
           CloudDomain: {get_param: CloudDomain}
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: CephStorageSchedulerHints}
           CloudDomain: {get_param: CloudDomain}
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: CephStorageSchedulerHints}
+          NodeIndex: '%index%'
+          ServiceConfigSettings: {get_attr: [CephStorageServiceChain, config_settings]}
 
   ControllerIpListMap:
     type: OS::TripleO::Network::Ports::NetIpListMap
 
   ControllerIpListMap:
     type: OS::TripleO::Network::Ports::NetIpListMap
@@ -1215,6 +1237,8 @@ resources:
       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
+      aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
+      gnocchi_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
@@ -1305,9 +1329,13 @@ resources:
     properties:
       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
     properties:
       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
+      ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
+      InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
+      StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
+      StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
       # No tenant or management VIP required
 
   VipConfig:
       # No tenant or management VIP required
 
   VipConfig:
@@ -1331,6 +1359,8 @@ resources:
         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
+        aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
+        gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
@@ -1411,29 +1441,6 @@ resources:
       ceph_mon_names: {get_attr: [Controller, hostname]}
       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
 
       ceph_mon_names: {get_attr: [Controller, hostname]}
       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
 
-  ControllerClusterConfig:
-    type: OS::Heat::StructuredConfig
-    properties:
-      group: os-apply-config
-      config:
-        corosync:
-          nodes: {get_attr: [Controller, corosync_node]}
-        horizon:
-          caches:
-            memcached:
-              nodes: {get_attr: [Controller, hostname]}
-        mysql:
-          nodes: {get_attr: [Controller, corosync_node]}
-        haproxy:
-          nodes: {get_attr: [Controller, corosync_node]}
-
-  ControllerClusterDeployment:
-    type: OS::Heat::StructuredDeployments
-    properties:
-      name: ControllerClusterDeployment
-      config: {get_resource: ControllerClusterConfig}
-      servers: {get_attr: [Controller, attributes, nova_server_resource]}
-
   ControllerAllNodesDeployment:
     type: OS::Heat::StructuredDeployments
     properties:
   ControllerAllNodesDeployment:
     type: OS::Heat::StructuredDeployments
     properties:
@@ -1538,7 +1545,13 @@ resources:
   # the nested template may configure each role differently (or not at all)
   AllNodesExtraConfig:
     type: OS::TripleO::AllNodesExtraConfig
   # the nested template may configure each role differently (or not at all)
   AllNodesExtraConfig:
     type: OS::TripleO::AllNodesExtraConfig
-    depends_on: UpdateWorkflow
+    depends_on:
+      - UpdateWorkflow
+      - ComputeAllNodesValidationDeployment
+      - BlockStorageAllNodesValidationDeployment
+      - ObjectStorageAllNodesValidationDeployment
+      - CephStorageAllNodesValidationDeployment
+      - ControllerAllNodesValidationDeployment
     properties:
       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
     properties:
       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
@@ -1556,6 +1569,7 @@ resources:
         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
         controller_config: {get_attr: [Controller, attributes, config_identifier]}
         deployment_identifier: {get_param: DeployIdentifier}
         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
         controller_config: {get_attr: [Controller, attributes, config_identifier]}
         deployment_identifier: {get_param: DeployIdentifier}
+      StepConfig: {get_attr: [ControllerServiceChain, step_config]}
 
   ComputeNodesPostDeployment:
     type: OS::TripleO::ComputePostDeployment
 
   ComputeNodesPostDeployment:
     type: OS::TripleO::ComputePostDeployment
@@ -1566,6 +1580,7 @@ resources:
         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
         compute_config: {get_attr: [Compute, attributes, config_identifier]}
         deployment_identifier: {get_param: DeployIdentifier}
         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
         compute_config: {get_attr: [Compute, attributes, config_identifier]}
         deployment_identifier: {get_param: DeployIdentifier}
+      StepConfig: {get_attr: [ComputeServiceChain, step_config]}
 
   ObjectStorageNodesPostDeployment:
     type: OS::TripleO::ObjectStoragePostDeployment
 
   ObjectStorageNodesPostDeployment:
     type: OS::TripleO::ObjectStoragePostDeployment
@@ -1576,6 +1591,7 @@ resources:
         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
         deployment_identifier: {get_param: DeployIdentifier}
         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
         deployment_identifier: {get_param: DeployIdentifier}
+      StepConfig: {get_attr: [ObjectStorageServiceChain, step_config]}
 
   BlockStorageNodesPostDeployment:
     type: OS::TripleO::BlockStoragePostDeployment
 
   BlockStorageNodesPostDeployment:
     type: OS::TripleO::BlockStoragePostDeployment
@@ -1596,6 +1612,7 @@ resources:
         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
         deployment_identifier: {get_param: DeployIdentifier}
         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
         deployment_identifier: {get_param: DeployIdentifier}
+      StepConfig: {get_attr: [CephStorageServiceChain, step_config]}
 
 outputs:
   KeystoneURL:
 
 outputs:
   KeystoneURL:
@@ -1607,6 +1624,9 @@ outputs:
   PublicVip:
     description: Controller VIP for public API endpoints
     value: {get_attr: [VipMap, net_ip_map, external]}
   PublicVip:
     description: Controller VIP for public API endpoints
     value: {get_attr: [VipMap, net_ip_map, external]}
+  AodhInternalVip:
+    description: VIP for Aodh API internal endpoint
+    value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
   CeilometerInternalVip:
     description: VIP for Ceilometer API internal endpoint
     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
   CeilometerInternalVip:
     description: VIP for Ceilometer API internal endpoint
     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
@@ -1616,6 +1636,9 @@ outputs:
   GlanceInternalVip:
     description: VIP for Glance API internal endpoint
     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
   GlanceInternalVip:
     description: VIP for Glance API internal endpoint
     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
+  GnocchiInternalVip:
+    description: VIP for Gnocchi API internal endpoint
+    value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
   HeatInternalVip:
     description: VIP for Heat API internal endpoint
     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
   HeatInternalVip:
     description: VIP for Heat API internal endpoint
     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
@@ -1634,6 +1657,12 @@ outputs:
   SwiftInternalVip:
     description: VIP for Swift Proxy internal endpoint
     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
   SwiftInternalVip:
     description: VIP for Swift Proxy internal endpoint
     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
+  EndpointMap:
+    description: |
+      Mapping of the resources with the needed info for their endpoints.
+      This includes the protocol used, the IP, port and also a full
+      representation of the URI.
+    value: {get_attr: [EndpointMap, endpoint_map]}
   HostsEntry:
     description: |
       The content that should be appended to your /etc/hosts if you want to get
   HostsEntry:
     description: |
       The content that should be appended to your /etc/hosts if you want to get