Composable Pacemaker service
[apex-tripleo-heat-templates.git] / overcloud.yaml
index 2b0666b..bac959c 100644 (file)
@@ -20,56 +20,10 @@ parameters:
     description: The password for the aodh services.
     type: string
     hidden: true
-  CeilometerBackend:
-    default: 'mongodb'
-    description: The ceilometer backend type.
-    type: string
-  CeilometerMeteringSecret:
-    description: Secret shared by the ceilometer services.
-    type: string
-    hidden: true
-  CeilometerPassword:
-    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: ''
-    type: string
-    description: The Ceph cluster FSID. Must be a UUID.
-  CephMonKey:
-    default: ''
-    description: The Ceph monitors key. Can be created with ceph-authtool --gen-print-key.
-    type: string
-    hidden: true
-  CephAdminKey:
-    default: ''
-    description: The Ceph admin client key. Can be created with ceph-authtool --gen-print-key.
-    type: string
-    hidden: true
   CinderEnableNfsBackend:
     default: false
     description: Whether to enable or not the NFS backend for Cinder
     type: boolean
-  CephClientKey:
-    default: ''
-    description: The Ceph client key. Can be created with ceph-authtool --gen-print-key. Currently only used for external Ceph deployments to create the openstack user keyring.
-    type: string
-    hidden: true
-  CephExternalMonHost:
-    default: ''
-    type: string
-    description: List of externally managed Ceph Mon Host IPs. Only used for external Ceph deployments.
-  CinderEnableIscsiBackend:
-    default: true
-    description: Whether to enable or not the Iscsi backend for Cinder
-    type: boolean
   CinderEnableRbdBackend:
     default: false
     description: Whether to enable or not the Rbd backend for Cinder
@@ -94,10 +48,6 @@ parameters:
     default: /dev/log
     description: Syslog address where HAproxy will send its log
     type: string
-  HorizonAllowedHosts:
-    default: '*'
-    description: A list of IP/Hostname allowed to connect to horizon
-    type: comma_delimited_list
   ImageUpdatePolicy:
     default: 'REBUILD_PRESERVE_EPHEMERAL'
     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
@@ -118,46 +68,10 @@ parameters:
     default: false
     description: Enable IPv6 features in Memcached.
     type: boolean
-  NeutronExternalNetworkBridge:
-    description: Name of bridge used for external network traffic.
-    type: string
-    default: 'br-ex'
-  NeutronBridgeMappings:
-    description: >
-      The OVS logical->physical bridge mappings to use. See the Neutron
-      documentation for details. Defaults to mapping br-ex - the external
-      bridge on hosts - to a physical name 'datacentre' which can be used
-      to create provider networks (and we use this for the default floating
-      network) - if changing this either use different post-install network
-      scripts or be sure to keep 'datacentre' as a mapping network name.
-    type: comma_delimited_list
-    default: "datacentre:br-ex"
   NeutronControlPlaneID:
     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"
-  NeutronEnableL2Pop:
-    type: string
-    description: >
-        Enable/disable the L2 population feature in the Neutron agents.
-    default: "False"
-  NeutronFlatNetworks:
-    type: comma_delimited_list
-    default: 'datacentre'
-    description: >
-      If set, flat networks to configure in neutron plugins. Defaults to
-      'datacentre' to permit external network creation.
-  NeutronNetworkType:
-    default: 'vxlan'
-    description: The tenant network type for Neutron.
-    type: comma_delimited_list
   NeutronPassword:
     description: The password for the neutron service account, used by neutron agents.
     type: string
@@ -166,102 +80,6 @@ parameters:
     default: nic1
     description: What interface to bridge onto br-ex for network nodes.
     type: string
-  NeutronPublicInterfaceTag:
-    default: ''
-    description: >
-      VLAN tag for creating a public VLAN. The tag will be used to
-      create an access port on the exterior bridge for each control plane node,
-      and that port will be given the IP address returned by neutron from the
-      public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
-      overcloud.yaml to include the deployment of VLAN ports to the control
-      plane.
-    type: string
-  NeutronComputeAgentMode:
-    default: 'dvr'
-    description: Agent mode for the neutron-l3-agent on the compute hosts
-    type: string
-  NeutronAgentMode:
-    default: 'dvr_snat'
-    description: Agent mode for the neutron-l3-agent on the controller hosts
-    type: string
-  NeutronDVR:
-    default: 'False'
-    description: Whether to configure Neutron Distributed Virtual Routers
-    type: string
-  NeutronMetadataProxySharedSecret:
-    description: Shared secret to prevent spoofing
-    type: string
-    hidden: true
-  NeutronTenantMtu:
-    description: >
-      The default MTU for tenant networks. For VXLAN/GRE tunneling, this should
-      be at least 50 bytes smaller than the MTU on the physical network. This
-      value will be used to set the MTU on the virtual Ethernet device.
-      This value will be used to construct the NeutronDnsmasqOptions, since that
-      will determine the MTU that is assigned to the VM host through DHCP.
-    default: "1400"
-    type: string
-  NeutronTunnelTypes:
-    default: 'vxlan'
-    description: |
-        The tunnel types for the Neutron tenant network.
-    type: comma_delimited_list
-  NeutronTunnelIdRanges:
-    description: |
-        Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
-        of GRE tunnel IDs that are available for tenant network allocation
-    default: ["1:4094", ]
-    type: comma_delimited_list
-  NeutronVniRanges:
-    description: |
-        Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
-        of VXLAN VNI IDs that are available for tenant network allocation
-    default: ["1:4094", ]
-    type: comma_delimited_list
-  NeutronCorePlugin:
-    default: 'ml2'
-    description: |
-        The core plugin for Neutron. The value should be the entrypoint to be loaded
-        from neutron.core_plugins namespace.
-    type: string
-  NeutronServicePlugins:
-    default: "router,qos"
-    description: |
-        Comma-separated list of service plugin entrypoints to be loaded from the
-        neutron.service_plugins namespace.
-    type: comma_delimited_list
-  NeutronTypeDrivers:
-    default: "vxlan,vlan,flat,gre"
-    description: |
-        Comma-separated list of network type driver entrypoints to be loaded.
-    type: comma_delimited_list
-  NeutronMechanismDrivers:
-    default: 'openvswitch'
-    description: |
-        The mechanism drivers for the Neutron tenant network.
-    type: comma_delimited_list
-  NeutronPluginExtensions:
-    default: "qos,port_security"
-    description: |
-        Comma-separated list of extensions enabled for the Neutron plugin.
-    type: comma_delimited_list
-  NeutronAgentExtensions:
-    default: "qos"
-    description: |
-        Comma-separated list of extensions enabled for the Neutron agents.
-    type: comma_delimited_list
-  NeutronAllowL3AgentFailover:
-    default: 'False'
-    description: Allow automatic l3-agent failover
-    type: string
-  NeutronL3HA:
-    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
@@ -270,18 +88,6 @@ parameters:
     description: The password for the nova service account, used by nova-api.
     type: string
     hidden: true
-  NtpServer:
-    default: ''
-    description: Comma-separated list of ntp servers
-    type: comma_delimited_list
-  MongoDbNoJournal:
-    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: >
@@ -310,27 +116,10 @@ parameters:
     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
-    type: string
-  RabbitIPv6:
-    default: false
-    description: Enable IPv6 in RabbitMQ
-    type: boolean
   RedisPassword:
     description: The password for Redis
     type: string
     hidden: true
-  SnmpdReadonlyUserName:
-    default: ro_snmp_user
-    description: The user name for SNMPd with readonly rights running on all Overcloud nodes
-    type: string
-  SnmpdReadonlyUserPassword:
-    description: The user password for SNMPd with readonly rights running on all Overcloud nodes
-    type: string
-    hidden: true
   StorageVirtualFixedIPs:
     default: []
     description: >
@@ -343,10 +132,6 @@ parameters:
         Control the IP allocation for the StorageMgmgVirtualInterface port. E.g.
         [{'ip_address':'1.2.3.4'}]
     type: json
-  TimeZone:
-    default: 'UTC'
-    description: The timezone to be set on nodes.
-    type: string
   CloudDomain:
     default: 'localdomain'
     type: string
@@ -361,30 +146,6 @@ parameters:
     type: json
 
   # Controller-specific params
-  CinderLVMLoopDeviceSize:
-    default: 10280
-    description: The size of the loopback file used by the cinder LVM driver.
-    type: number
-  CinderNfsMountOptions:
-    default: ''
-    description: >
-      Mount options for NFS mounts used by Cinder NFS backend. Effective
-      when CinderEnableNfsBackend is true.
-    type: string
-  CinderNfsServers:
-    default: ''
-    description: >
-      NFS servers used by Cinder NFS backend. Effective when
-      CinderEnableNfsBackend is true.
-    type: comma_delimited_list
-  CinderPassword:
-    description: The password for the cinder service account, used by cinder-api.
-    type: string
-    hidden: true
-  CinderISCSIHelper:
-    default: lioadm
-    description: The iSCSI helper to use with cinder.
-    type: string
   ControllerCount:
     type: number
     default: 1
@@ -418,14 +179,6 @@ parameters:
     default: true
     description: Whether to use Galera instead of regular MariaDB.
     type: boolean
-  ControllerEnableCephStorage:
-    default: false
-    description: Whether to deploy Ceph Storage (OSD) on the Controller
-    type: boolean
-  ControllerEnableSwiftStorage:
-    default: true
-    description: Whether to enable Swift Storage on the Controller
-    type: boolean
   ControllerSchedulerHints:
     type: json
     description: Optional scheduler hints to pass to nova
@@ -469,46 +222,6 @@ parameters:
           ]
         }
     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
-      of swift, rbd or file
-    type: string
-    constraints:
-    - allowed_values: ['swift', 'file', 'rbd']
-  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']
-  GnocchiIndexerBackend:
-    default: 'mysql'
-    description: The short name of the Gnocchi indexer backend to use.
-    type: string
-  GnocchiPassword:
-    description: The password for the gnocchi service account.
-    type: string
-    hidden: true
-  HeatPassword:
-    description: The password for the Heat service account, used by the Heat services.
-    type: string
-    hidden: true
-  HeatStackDomainAdminPassword:
-    description: Password for heat_stack_domain_admin user.
     type: string
     hidden: true
   InstanceNameTemplate:
@@ -516,7 +229,7 @@ parameters:
     description: Template string to be used to generate instance names
     type: string
   ManageFirewall:
-    default: false
+    default: true
     description: Whether to manage IPtables rules.
     type: boolean
   PurgeFirewallRules:
@@ -534,25 +247,6 @@ parameters:
     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.
-    type: string
-  NeutronPublicInterfaceIP:
-    default: ''
-    description: A custom IP address to put onto the NeutronPublicInterface.
-    type: string
-  NeutronPublicInterfaceRawDevice:
-    default: ''
-    description: If set, the public interface is a vlan with this device as the raw device.
-    type: string
   PublicVirtualInterface:
     default: 'br-ex'
     description: >
@@ -563,14 +257,6 @@ parameters:
     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
-    type: boolean
   SwiftMinPartHours:
     type: number
     default: 1
@@ -583,10 +269,6 @@ parameters:
     type: number
     default: 3
     description: How many replicas to use in the swift rings.
-  SaharaPassword:
-    description: The password for the sahara service account.
-    type: string
-    hidden: true
 
 # Compute-specific params
   CeilometerComputeAgent:
@@ -609,13 +291,6 @@ parameters:
     default: nic1
     description: What interface to add to the HypervisorNeutronPhysicalBridge.
     type: string
-  NeutronNetworkVLANRanges:
-    default: 'datacentre:1:1000'
-    description: >
-      The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
-      Neutron documentation for permitted values. Defaults to permitting any
-      VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
-    type: comma_delimited_list
   NovaComputeDriver:
     type: string
     default: libvirt.LibvirtDriver
@@ -670,6 +345,7 @@ parameters:
       CinderIscsiNetwork: storage
       GlanceApiNetwork: storage
       GlanceRegistryNetwork: internal_api
+      IronicApiNetwork: internal_api
       KeystoneAdminApiNetwork: ctlplane # allows undercloud to config endpoints
       KeystonePublicApiNetwork: internal_api
       NeutronApiNetwork: internal_api
@@ -698,12 +374,74 @@ parameters:
 
   ControllerServices:
     default:
+      - OS::TripleO::Services::CephMon
+      - OS::TripleO::Services::CephExternal
+      - OS::TripleO::Services::CinderApi
+      - OS::TripleO::Services::CinderScheduler
+      - OS::TripleO::Services::CinderVolume
+      - OS::TripleO::Services::Kernel
       - 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::NeutronServer
+      - OS::TripleO::Services::NeutronCorePlugin
+      - OS::TripleO::Services::NeutronOvsAgent
+      - OS::TripleO::Services::RabbitMQ
+      - OS::TripleO::Services::HAproxy
+      - OS::TripleO::Services::Keepalived
+      - OS::TripleO::Services::Memcached
+      - OS::TripleO::Services::Pacemaker
+      - OS::TripleO::Services::Redis
+      - OS::TripleO::Services::NovaConductor
+      - OS::TripleO::Services::MongoDb
+      - OS::TripleO::Services::NovaApi
+      - OS::TripleO::Services::NovaScheduler
+      - OS::TripleO::Services::NovaConsoleauth
+      - OS::TripleO::Services::NovaVncproxy
+      - OS::TripleO::Services::Ntp
+      - OS::TripleO::Services::SwiftProxy
+      - OS::TripleO::Services::SwiftStorage
+      - OS::TripleO::Services::Snmp
+      - OS::TripleO::Services::Timezone
+      - OS::TripleO::Services::CeilometerApi
+      - OS::TripleO::Services::CeilometerCollector
+      - OS::TripleO::Services::CeilometerExpirer
+      - OS::TripleO::Services::CeilometerAgentCentral
+      - OS::TripleO::Services::CeilometerAgentNotification
+      - OS::TripleO::Services::Horizon
+      - OS::TripleO::Services::GnocchiApi
+      - OS::TripleO::Services::GnocchiMetricd
+      - OS::TripleO::Services::GnocchiStatsd
+
     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:
+      - OS::TripleO::Services::CephClient
+      - OS::TripleO::Services::CephExternal
+      - OS::TripleO::Services::Timezone
+      - OS::TripleO::Services::Ntp
+      - OS::TripleO::Services::Snmp
+      - OS::TripleO::Services::NovaCompute
+      - OS::TripleO::Services::NovaLibvirt
+      - OS::TripleO::Services::Kernel
+      - OS::TripleO::Services::ComputeNeutronCorePlugin
+      - OS::TripleO::Services::ComputeNeutronOvsAgent
+    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
@@ -727,7 +465,17 @@ parameters:
     type: json
     description: Optional scheduler hints to pass to nova
     default: {}
-
+  BlockStorageServices:
+    default:
+      - OS::TripleO::Services::CinderVolume
+      - OS::TripleO::Services::Kernel
+      - OS::TripleO::Services::Ntp
+      - OS::TripleO::Services::Timezone
+      - OS::TripleO::Services::Snmp
+    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 BlockStorage nodes.
+    type: comma_delimited_list
 
 # Object storage specific parameters
   ObjectStorageCount:
@@ -752,6 +500,19 @@ parameters:
     type: json
     description: Optional scheduler hints to pass to nova
     default: {}
+  ObjectStorageServices:
+    default:
+      - OS::TripleO::Services::Kernel
+      - OS::TripleO::Services::Ntp
+      - OS::TripleO::Services::SwiftStorage
+      - OS::TripleO::Services::Snmp
+      - OS::TripleO::Services::Timezone
+    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:
@@ -776,7 +537,16 @@ parameters:
     type: json
     description: Optional scheduler hints to pass to nova
     default: {}
-
+  CephStorageServices:
+    default:
+      - OS::TripleO::Services::CephOSD
+      - OS::TripleO::Services::Kernel
+      - OS::TripleO::Services::Ntp
+      - OS::TripleO::Services::Timezone
+    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
@@ -884,9 +654,11 @@ resources:
       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]}]}
       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]}]}
@@ -898,7 +670,6 @@ resources:
     properties:
       Services: {get_param: ControllerServices}
       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
-      MysqlVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
 
   Controller:
     type: OS::Heat::ResourceGroup
@@ -911,18 +682,6 @@ resources:
         properties:
           AdminPassword: {get_param: AdminPassword}
           AodhPassword: {get_param: AodhPassword}
-          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}
-          CinderPassword: {get_param: CinderPassword}
-          CinderISCSIHelper: {get_param: CinderISCSIHelper}
-          CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
-          CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
-          CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
           CloudDomain: {get_param: CloudDomain}
           ControlVirtualInterface: {get_param: ControlVirtualInterface}
           controllerExtraConfig: {get_param: controllerExtraConfig}
@@ -932,23 +691,11 @@ resources:
           ManageFirewall: {get_param: ManageFirewall}
           PurgeFirewallRules: {get_param: PurgeFirewallRules}
           EnableGalera: {get_param: EnableGalera}
-          EnableCephStorage: {get_param: ControllerEnableCephStorage}
-          EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
           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}
-          HeatPassword: {get_param: HeatPassword}
-          HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
-          HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
           HorizonSecret: {get_resource: HorizonSecret}
           Image: {get_param: controllerImage}
           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
@@ -959,43 +706,10 @@ resources:
           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
           MysqlMaxConnections: {get_param: MysqlMaxConnections}
           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
-          NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
-          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}
           NeutronPublicInterface: {get_param: NeutronPublicInterface}
-          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}
-          NeutronCorePlugin: {get_param: NeutronCorePlugin}
-          NeutronServicePlugins: {get_param: NeutronServicePlugins}
-          NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
-          NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
-          NeutronPluginExtensions: {get_param: NeutronPluginExtensions}
-          NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
-          NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
-          NeutronL3HA: {get_param: NeutronL3HA}
-          NeutronDhcpAgentsPerNetwork: {get_param: NeutronDhcpAgentsPerNetwork}
-          NeutronNetworkType: {get_param: NeutronNetworkType}
-          NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
           NovaIPv6: {get_param: NovaIPv6}
           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}
@@ -1003,40 +717,16 @@ resources:
           RabbitCookie: {get_attr: [RabbitCookie, value]}
           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
           RabbitClientPort: {get_param: RabbitClientPort}
-          RabbitFDLimit: {get_param: RabbitFDLimit}
-          RabbitIPv6: {get_param: RabbitIPv6}
           RedisPassword: {get_param: RedisPassword}
-          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}
-          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.
-          PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
           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]}]}
-          HeatApiVirtualIPUri: {get_attr: [VipMap, net_ip_uri_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]}]}
-          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]}]}
-          MysqlVirtualIPUri: {get_attr: [VipMap, net_ip_uri_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]}]}
           UpdateIdentifier: {get_param: UpdateIdentifier}
           Hostname:
             str_replace:
@@ -1046,7 +736,14 @@ resources:
           NodeIndex: '%index%'
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: ControllerSchedulerHints}
-          ServiceConfigSettings: {get_attr: [ControllerServiceChain, config_settings]}
+          ServiceConfigSettings: {get_attr: [ControllerServiceChain, role_data, config_settings]}
+
+  ComputeServiceChain:
+
+    type: OS::TripleO::Services
+    properties:
+      Services: {get_param: ComputeServices}
+      EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
 
   Compute:
     type: OS::Heat::ResourceGroup
@@ -1059,8 +756,6 @@ resources:
         properties:
           AdminPassword: {get_param: AdminPassword}
           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
-          CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
-          CeilometerPassword: {get_param: CeilometerPassword}
           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
           Debug: {get_param: Debug}
@@ -1072,30 +767,10 @@ resources:
           KeyName: {get_param: KeyName}
           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
-          NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
-          NeutronTenantMtu: {get_param: NeutronTenantMtu}
-          NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
-          NeutronEnableL2Pop : {get_param: NeutronEnableL2Pop}
-          NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
-          NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
-          NeutronNetworkType: {get_param: NeutronNetworkType}
-          NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
-          NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
           NeutronPassword: {get_param: NeutronPassword}
           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
-          NeutronDVR: {get_param: NeutronDVR}
-          NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
-          NeutronAgentMode: {get_param: NeutronComputeAgentMode}
-          NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
-          NeutronCorePlugin: {get_param: NeutronCorePlugin}
-          NeutronServicePlugins: {get_param: NeutronServicePlugins}
-          NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
-          NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
-          NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
           # L3 HA and Failover is not relevant for Computes, should be removed
-          NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
-          NeutronL3HA: {get_param: NeutronL3HA}
           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
           NovaComputeDriver: {get_param: NovaComputeDriver}
           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
@@ -1107,16 +782,12 @@ resources:
           NovaPassword: {get_param: NovaPassword}
           NovaOVSBridge: {get_param: NovaOVSBridge}
           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
-          NtpServer: {get_param: NtpServer}
           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
           RabbitPassword: {get_param: RabbitPassword}
           RabbitUserName: {get_param: RabbitUserName}
           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
           RabbitClientPort: {get_param: RabbitClientPort}
-          SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
-          SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
           ServiceNetMap: {get_param: ServiceNetMap}
-          TimeZone: {get_param: TimeZone}
           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
           UpdateIdentifier: {get_param: UpdateIdentifier}
           Hostname:
@@ -1128,6 +799,13 @@ resources:
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: NovaComputeSchedulerHints}
           NodeIndex: '%index%'
+          ServiceConfigSettings: {get_attr: [ComputeServiceChain, role_data, config_settings]}
+
+  BlockStorageServiceChain:
+    type: OS::TripleO::Services
+    properties:
+      Services: {get_param: BlockStorageServices}
+      EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
 
   BlockStorage:
     type: OS::Heat::ResourceGroup
@@ -1138,23 +816,9 @@ resources:
       resource_def:
         type: OS::TripleO::BlockStorage
         properties:
-          Debug: {get_param: Debug}
           Image: {get_param: BlockStorageImage}
-          CinderISCSIHelper: {get_param: CinderISCSIHelper}
-          CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
-          # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
-          CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
-          CinderPassword: {get_param: CinderPassword}
           KeyName: {get_param: KeyName}
           Flavor: {get_param: OvercloudBlockStorageFlavor}
-          VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
-          GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
-          RabbitPassword: {get_param: RabbitPassword}
-          RabbitUserName: {get_param: RabbitUserName}
-          RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
-          RabbitClientPort: {get_param: RabbitClientPort}
-          TimeZone: {get_param: TimeZone}
-          NtpServer: {get_param: NtpServer}
           UpdateIdentifier: {get_param: UpdateIdentifier}
           Hostname:
             str_replace:
@@ -1162,14 +826,19 @@ resources:
               params:
                 '%stackname%': {get_param: 'OS::stack_name'}
           ServiceNetMap: {get_param: ServiceNetMap}
-          EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
-          MysqlVirtualIPUri: {get_attr: [VipMap, net_ip_uri_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}
           NodeIndex: '%index%'
+          ServiceConfigSettings: {get_attr: [BlockStorageServiceChain, role_data, config_settings]}
+
+  ObjectStorageServiceChain:
+    type: OS::TripleO::Services
+    properties:
+      Services: {get_param: ObjectStorageServices}
+      EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
 
   ObjectStorage:
     type: OS::Heat::ResourceGroup
@@ -1183,13 +852,10 @@ resources:
           KeyName: {get_param: KeyName}
           Flavor: {get_param: OvercloudSwiftStorageFlavor}
           HashSuffix: {get_param: SwiftHashSuffix}
-          MountCheck: {get_param: SwiftMountCheck}
           MinPartHours: {get_param: SwiftMinPartHours}
           PartPower: {get_param: SwiftPartPower}
           Image: {get_param: SwiftStorageImage}
           Replicas: { get_param: SwiftReplicas}
-          TimeZone: {get_param: TimeZone}
-          NtpServer: {get_param: NtpServer}
           UpdateIdentifier: {get_param: UpdateIdentifier}
           ServiceNetMap: {get_param: ServiceNetMap}
           Hostname:
@@ -1203,6 +869,13 @@ resources:
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
           NodeIndex: '%index%'
+          ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, role_data, config_settings]}
+
+  CephStorageServiceChain:
+    type: OS::TripleO::Services
+    properties:
+      Services: {get_param: CephStorageServices}
+      EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
 
   CephStorage:
     type: OS::Heat::ResourceGroup
@@ -1216,9 +889,7 @@ resources:
           Image: {get_param: CephStorageImage}
           KeyName: {get_param: KeyName}
           Flavor: {get_param: OvercloudCephStorageFlavor}
-          NtpServer: {get_param: NtpServer}
           ServiceNetMap: {get_param: ServiceNetMap}
-          TimeZone: {get_param: TimeZone}
           UpdateIdentifier: {get_param: UpdateIdentifier}
           Hostname:
             str_replace:
@@ -1231,6 +902,7 @@ resources:
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: CephStorageSchedulerHints}
           NodeIndex: '%index%'
+          ServiceConfigSettings: {get_attr: [CephStorageServiceChain, role_data, config_settings]}
 
   ControllerIpListMap:
     type: OS::TripleO::Network::Ports::NetIpListMap
@@ -1273,6 +945,9 @@ resources:
       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
+      ironic_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
+      ceph_mon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
+      ceph_mon_node_names: {get_attr: [Controller, hostname]}
       DeployIdentifier: {get_param: DeployIdentifier}
       UpdateIdentifier: {get_param: UpdateIdentifier}
 
@@ -1396,22 +1071,10 @@ resources:
         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
+        ironic_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
 
-  ControllerBootstrapNodeConfig:
-    type: OS::TripleO::BootstrapNode::SoftwareConfig
-    properties:
-      bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
-      bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
-
-  ControllerBootstrapNodeDeployment:
-    type: OS::Heat::StructuredDeployments
-    properties:
-      name: ControllerBootstrapNodeDeployment
-      config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
-      servers: {get_attr: [Controller, attributes, nova_server_resource]}
-
   ControllerSwiftDeployment:
     type: OS::Heat::StructuredDeployments
     properties:
@@ -1456,38 +1119,6 @@ resources:
 
   CephClusterConfig:
     type: OS::TripleO::CephClusterConfig::SoftwareConfig
-    properties:
-      ceph_storage_count: {get_param: CephStorageCount}
-      ceph_fsid: {get_param: CephClusterFSID}
-      ceph_mon_key: {get_param: CephMonKey}
-      ceph_admin_key: {get_param: CephAdminKey}
-      ceph_client_key: {get_param: CephClientKey}
-      ceph_external_mon_ips: {get_param: CephExternalMonHost}
-      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
@@ -1495,6 +1126,9 @@ resources:
       name: ControllerAllNodesDeployment
       config: {get_attr: [allNodesConfig, config_id]}
       servers: {get_attr: [Controller, attributes, nova_server_resource]}
+      input_values:
+        bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
+        bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
 
   ComputeAllNodesDeployment:
     type: OS::Heat::StructuredDeployments
@@ -1502,6 +1136,9 @@ resources:
       name: ComputeAllNodesDeployment
       config: {get_attr: [allNodesConfig, config_id]}
       servers: {get_attr: [Compute, attributes, nova_server_resource]}
+      input_values:
+        bootstrap_nodeid: {get_attr: [Compute, resource.0.hostname]}
+        bootstrap_nodeid_ip: {get_attr: [Compute, resource.0.ip_address]}
 
   BlockStorageAllNodesDeployment:
     type: OS::Heat::StructuredDeployments
@@ -1509,6 +1146,9 @@ resources:
       name: BlockStorageAllNodesDeployment
       config: {get_attr: [allNodesConfig, config_id]}
       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
+      input_values:
+        bootstrap_nodeid: {get_attr: [BlockStorage, resource.0.hostname]}
+        bootstrap_nodeid_ip: {get_attr: [BlockStorage, resource.0.ip_address]}
 
   ObjectStorageAllNodesDeployment:
     type: OS::Heat::StructuredDeployments
@@ -1516,6 +1156,9 @@ resources:
       name: ObjectStorageAllNodesDeployment
       config: {get_attr: [allNodesConfig, config_id]}
       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
+      input_values:
+        bootstrap_nodeid: {get_attr: [ObjectStorage, resource.0.hostname]}
+        bootstrap_nodeid_ip: {get_attr: [ObjectStorage, resource.0.ip_address]}
 
   CephStorageAllNodesDeployment:
     type: OS::Heat::StructuredDeployments
@@ -1523,6 +1166,9 @@ resources:
       name: CephStorageAllNodesDeployment
       config: {get_attr: [allNodesConfig, config_id]}
       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
+      input_values:
+        bootstrap_nodeid: {get_attr: [CephStorage, resource.0.hostname]}
+        bootstrap_nodeid_ip: {get_attr: [CephStorage, resource.0.ip_address]}
 
   # All Nodes Validations
   AllNodesValidationConfig:
@@ -1610,54 +1256,38 @@ resources:
   # Nested stack deployment runs after all other controller deployments
   ControllerNodesPostDeployment:
     type: OS::TripleO::ControllerPostDeployment
-    depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
+    depends_on: [ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
     properties:
       servers: {get_attr: [Controller, attributes, nova_server_resource]}
-      NodeConfigIdentifiers:
-        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]}
+      RoleData: {get_attr: [ControllerServiceChain, role_data]}
 
   ComputeNodesPostDeployment:
     type: OS::TripleO::ComputePostDeployment
     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
     properties:
       servers: {get_attr: [Compute, attributes, nova_server_resource]}
-      NodeConfigIdentifiers:
-        allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
-        compute_config: {get_attr: [Compute, attributes, config_identifier]}
-        deployment_identifier: {get_param: DeployIdentifier}
+      RoleData: {get_attr: [ComputeServiceChain, role_data]}
 
   ObjectStorageNodesPostDeployment:
     type: OS::TripleO::ObjectStoragePostDeployment
     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
     properties:
       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
-      NodeConfigIdentifiers:
-        allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
-        objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
-        deployment_identifier: {get_param: DeployIdentifier}
+      RoleData: {get_attr: [ObjectStorageServiceChain, role_data]}
 
   BlockStorageNodesPostDeployment:
     type: OS::TripleO::BlockStoragePostDeployment
     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
     properties:
       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
-      NodeConfigIdentifiers:
-        allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
-        blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
-        deployment_identifier: {get_param: DeployIdentifier}
+      RoleData: {get_attr: [BlockStorageServiceChain, role_data]}
 
   CephStorageNodesPostDeployment:
     type: OS::TripleO::CephStoragePostDeployment
     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
     properties:
       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
-      NodeConfigIdentifiers:
-        allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
-        cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
-        deployment_identifier: {get_param: DeployIdentifier}
+      RoleData: {get_attr: [CephStorageServiceChain, role_data]}
 
 outputs:
   KeystoneURL:
@@ -1687,6 +1317,9 @@ outputs:
   HeatInternalVip:
     description: VIP for Heat API internal endpoint
     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
+  IronicInternalVip:
+    description: VIP for Ironic API internal endpoint
+    value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
   KeystoneInternalVip:
     description: VIP for Keystone API internal endpoint
     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}