Merge "Refactor Heat dependencies for nova compute"
[apex-tripleo-heat-templates.git] / overcloud-source.yaml
index 073a62a..5530006 100644 (file)
@@ -12,9 +12,20 @@ parameters:
     description: The keystone auth secret.
     type: string
     hidden: true
     description: The keystone auth secret.
     type: string
     hidden: true
-  CinderPassword:
+  CeilometerComputeAgent:
+    description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
+    type: string
+    default: ''
+    constraints:
+    - allowed_values: ['', Present]
+  CeilometerMeteringSecret:
     default: unset
     default: unset
-    description: The password for the cinder service account, used by cinder-api.
+    description: Secret shared by the ceilometer services.
+    type: string
+    hidden: true
+  CeilometerPassword:
+    default: unset
+    description: The password for the ceilometer service account.
     type: string
     hidden: true
   CinderISCSIHelper:
     type: string
     hidden: true
   CinderISCSIHelper:
@@ -25,6 +36,42 @@ parameters:
     default: 5000
     description: The size of the loopback file used by the cinder LVM driver.
     type: number
     default: 5000
     description: The size of the loopback file used by the cinder LVM driver.
     type: number
+  CinderPassword:
+    default: unset
+    description: The password for the cinder service account, used by cinder-api.
+    type: string
+    hidden: true
+  CloudName:
+    default: ''
+    description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
+    type: string
+  ControlFixedIPs:
+    default: []
+    description: Should be used for arbitrary ips.
+    type: json
+  controllerExtraConfig:
+    default: {}
+    description: |
+      Controller specific configuration to inject into the cluster. Same
+      structure as ExtraConfig.
+    type: json
+  controllerImage:
+    type: string
+    default: overcloud-control
+  ControlVirtualInterface:
+    default: 'br-ex'
+    description: Interface where virtual ip will be assigned.
+    type: string
+  Debug:
+    default: ''
+    description: Set to True to enable debugging on all services.
+    type: string
+  DefaultSignalTransport:
+    default: CFN_SIGNAL
+    description: Transport to use for software-config signals.
+    type: string
+    constraints:
+      - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ]
   ExtraConfig:
     default: {}
     description: |
   ExtraConfig:
     default: {}
     description: |
@@ -47,8 +94,8 @@ parameters:
           {"config":
             [{"section": "default",
               "values":
           {"config":
             [{"section": "default",
               "values":
-                [{"option": "compute_manager",
-                  "value": "ironic.nova.compute.manager.ClusterComputeManager"
+                [{"option": "force_config_drive",
+                  "value": "always"
                  }
                 ]
              },
                  }
                 ]
              },
@@ -63,14 +110,15 @@ parameters:
           }
         }
     type: json
           }
         }
     type: json
-  OvercloudControlFlavor:
-    default: baremetal
-    description: Flavor for control nodes to request when deploying.
+  GlanceLogFile:
+    description: The filepath of the file to use for logging messages from Glance.
     type: string
     type: string
-  OvercloudComputeFlavor:
-    default: baremetal
-    description: Flavor for compute nodes to request when deploying.
+    default: ''
+  GlancePassword:
+    default: unset
+    description: The password for the glance service account, used by the glance services.
     type: string
     type: string
+    hidden: true
   GlancePort:
     default: 9292
     description: Glance port.
   GlancePort:
     default: 9292
     description: Glance port.
@@ -79,24 +127,31 @@ parameters:
     default: http
     description: Protocol to use when connecting to glance, set to https for SSL.
     type: string
     default: http
     description: Protocol to use when connecting to glance, set to https for SSL.
     type: string
-  GlancePassword:
-    default: unset
-    description: The password for the glance service account, used by the glance services.
-    type: string
-    hidden: true
   GlanceNotifierStrategy:
     description: Strategy to use for Glance notification queue
     type: string
     default: noop
   GlanceNotifierStrategy:
     description: Strategy to use for Glance notification queue
     type: string
     default: noop
-  GlanceLogFile:
-    description: The filepath of the file to use for logging messages from Glance.
-    type: string
-    default: ''
   HeatPassword:
     default: unset
     description: The password for the Heat service account, used by the Heat services.
     type: string
     hidden: true
   HeatPassword:
     default: unset
     description: The password for the Heat service account, used by the Heat services.
     type: string
     hidden: true
+  HeatStackDomainAdminPassword:
+    description: Password for heat_domain_admin user.
+    type: string
+    default: ''
+    hidden: true
+  HypervisorNeutronPhysicalBridge:
+    default: 'br-ex'
+    description: >
+      An OVS bridge to create on each hypervisor. This defaults to br-ex the
+      same as the control plane nodes, as we have a uniform configuration of
+      the openvswitch agent. Typically should not need to be changed.
+    type: string
+  HypervisorNeutronPublicInterface:
+    default: 'eth0'
+    description: What interface to add to the HypervisorNeutronPhysicalBridge.
+    type: string
   ImageUpdatePolicy:
     default: 'REBUILD_PRESERVE_EPHEMERAL'
     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
   ImageUpdatePolicy:
     default: 'REBUILD_PRESERVE_EPHEMERAL'
     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
@@ -105,81 +160,87 @@ parameters:
     default: default
     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
     type: string
     default: default
     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
     type: string
-  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: string
-    default: "datacentre:br-ex"
-  NeutronPassword:
-    default: unset
-    description: The password for the neutron service account, used by neutron agents.
+  KeystoneCACertificate:
+    default: ''
+    description: Keystone self-signed certificate authority certificate.
     type: string
     type: string
-    hidden: true
-  CeilometerComputeAgent:
-    description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
+  KeystoneSigningCertificate:
+    default: ''
+    description: Keystone certificate for verifying token validity.
     type: string
     type: string
+  KeystoneSigningKey:
     default: ''
     default: ''
-    constraints:
-    - allowed_values: ['', Present]
-  CeilometerMeteringSecret:
-    default: unset
-    description: Secret shared by the ceilometer services.
+    description: Keystone key for signing tokens.
     type: string
     hidden: true
     type: string
     hidden: true
-  CeilometerPassword:
-    default: unset
-    description: The password for the ceilometer service account.
+  LiveUpdateComputeImage:
     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
+    description: The image ID for live-updates to the overcloud compute nodes.
+    default: ''
+  LiveUpdateHost:
     type: string
     type: string
-  SnmpdReadonlyUserPassword:
-    default: unset
-    description: The user password for SNMPd with readonly rights running on all Overcloud nodes
+    description: The IP address for the undercloud Glance API.
+    default: ''
+  LiveUpdatePassword:
     type: string
     type: string
-    hidden: true
-  CloudName:
     default: ''
     default: ''
-    description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
+    description: The live-update password for the undercloud Glance API.
+    hidden: true
+  LiveUpdateTenantName:
     type: string
     type: string
-  NovaComputeDriver:
-    default: libvirt.LibvirtDriver
+    description: The live-update tenant name for the undercloud Glance API.
+    default: ''
+  LiveUpdateUserName:
     type: string
     type: string
-  NovaComputeLibvirtType:
+    description: The live-update username for the undercloud Glance API.
     default: ''
     default: ''
+  MysqlInnodbBufferPoolSize:
+    description: >
+        Specifies the size of the buffer pool in megabytes. Setting to
+        zero should be interpreted as "no value" and will defer to the
+        lower level default.
+    type: number
+    default: 0
+  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: string
     type: string
-  NovaImage:
+    default: "datacentre:br-ex"
+  NeutronControlPlaneID:
+    default: ''
     type: string
     type: string
-    default: overcloud-compute
-  NovaPassword:
-    default: unset
-    description: The password for the nova service account, used by nova-api.
+    description: Neutron ID for ctlplane network.
+  NeutronDnsmasqOptions:
+    default: 'dhcp-option-force=26,1400'
+    description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
     type: string
     type: string
-    hidden: true
   NeutronFlatNetworks:
     type: string
     default: 'datacentre'
   NeutronFlatNetworks:
     type: string
     default: 'datacentre'
-    description: |
+    description: >
       If set, flat networks to configure in neutron plugins. Defaults to
       'datacentre' to permit external network creation.
       If set, flat networks to configure in neutron plugins. Defaults to
       'datacentre' to permit external network creation.
-  HypervisorNeutronPhysicalBridge:
-    default: 'br-ex'
-    description: |
-      An OVS bridge to create on each hypervisor. This defaults to br-ex the
-      same as the control plane nodes, as we have a uniform configuration of
-      the openvswitch agent. Typically should not need to be changed.
+  NeutronNetworkType:
+    default: 'gre'
+    description: The tenant network type for Neutron, either gre or vxlan.
     type: string
     type: string
-  HypervisorNeutronPublicInterface:
-    default: 'eth0'
-    description: What interface to add to the HypervisorNeutronPhysicalBridge.
+  NeutronNetworkVLANRanges:
+    default: 'datacentre'
+    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: string
     type: string
+  NeutronPassword:
+    default: unset
+    description: The password for the neutron service account, used by neutron agents.
+    type: string
+    hidden: true
   NeutronPublicInterface:
     default: eth0
     description: What interface to bridge onto br-ex for network nodes.
   NeutronPublicInterface:
     default: eth0
     description: What interface to bridge onto br-ex for network nodes.
@@ -196,77 +257,56 @@ parameters:
     default: ''
     description: If set, the public interface is a vlan with this device as the raw device.
     type: string
     default: ''
     description: If set, the public interface is a vlan with this device as the raw device.
     type: string
-  NeutronControlPlaneID:
+  NeutronPublicInterfaceTag:
     default: ''
     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
+  NeutronTunnelTypes:
+    default: 'gre'
+    description: |
+        The tunnel types for the Neutron tenant network. To specify multiple
+        values, use a comma separated string, like so: 'gre,vxlan'
     type: string
     type: string
-    description: Neutron ID for ctlplane network.
-  NeutronDnsmasqOptions:
-    default: 'dhcp-option-force=26,1400'
-    description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the gre tunnel overhead.
-    type: string
-  controllerImage:
-    type: string
-    default: overcloud-control
-  NtpServer:
+  NovaComputeDriver:
+    default: libvirt.LibvirtDriver
     type: string
     type: string
+  NovaComputeExtraConfig:
+    default: {}
+    description: |
+      NovaCompute specific configuration to inject into the cluster. Same
+      structure as ExtraConfig.
+    type: json
+  NovaComputeLibvirtType:
     default: ''
     default: ''
-  RabbitUserName:
-    default: guest
-    description: The username for RabbitMQ
-    type: string
-  RabbitPassword:
-    default: guest
-    description: The password for RabbitMQ
     type: string
     type: string
-    hidden: true
-  RabbitCookieSalt:
+  NovaImage:
     type: string
     type: string
+    default: overcloud-compute
+  NovaPassword:
     default: unset
     default: unset
-    description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
-  HeatStackDomainAdminPassword:
-    description: Password for heat_domain_admin user.
+    description: The password for the nova service account, used by nova-api.
     type: string
     type: string
-    default: ''
     hidden: true
     hidden: true
-  LiveUpdateUserName:
-    type: string
-    description: The live-update username for the undercloud Glance API.
-    default: ''
-  LiveUpdateTenantName:
-    type: string
-    description: The live-update tenant name for the undercloud Glance API.
-    default: ''
-  LiveUpdateHost:
-    type: string
-    description: The IP address for the undercloud Glance API.
-    default: ''
-  LiveUpdatePassword:
+  NtpServer:
     type: string
     default: ''
     type: string
     default: ''
-    description: The live-update password for the undercloud Glance API.
-    hidden: true
-  LiveUpdateComputeImage:
+  OvercloudComputeFlavor:
+    default: baremetal
+    description: Flavor for compute nodes to request when deploying.
     type: string
     type: string
-    description: The image ID for live-updates to the overcloud compute nodes.
-    default: ''
-  MysqlInnodbBufferPoolSize:
-    description: >
-        Specifies the size of the buffer pool in megabytes. Setting to
-        zero should be interpreted as "no value" and will defer to the
-        lower level default.
-    type: number
-    default: 0
-  ControlVirtualInterface:
-    default: 'br-ex'
-    description: Interface where virtual ip will be assigned.
+  OvercloudControlFlavor:
+    default: baremetal
+    description: Flavor for control nodes to request when deploying.
     type: string
     type: string
-  ControlFixedIPs:
-    default: []
-    description: Should be used for arbitrary ips.
-    type: json
   PublicVirtualFixedIPs:
     default: []
   PublicVirtualFixedIPs:
     default: []
-    description: |
+    description: >
         Control the IP allocation for the PublicVirtualInterface port. E.g.
         [{'ip_address':'1.2.3.4'}]
     type: json
         Control the IP allocation for the PublicVirtualInterface port. E.g.
         [{'ip_address':'1.2.3.4'}]
     type: json
@@ -281,25 +321,28 @@ parameters:
     type: string
     description: >
         Neutron network to allocate public virtual IP port on.
     type: string
     description: >
         Neutron network to allocate public virtual IP port on.
-  KeystoneCACertificate:
-    default: ''
-    description: Keystone self-signed certificate authority certificate.
-    type: string
-  KeystoneSigningCertificate:
-    default: ''
-    description: Keystone certificate for verifying token validity.
+  RabbitCookieSalt:
     type: string
     type: string
-  KeystoneSigningKey:
-    default: ''
-    description: Keystone key for signing tokens.
+    default: unset
+    description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
+  RabbitPassword:
+    default: guest
+    description: The password for RabbitMQ
     type: string
     hidden: true
     type: string
     hidden: true
-  DefaultSignalTransport:
-    default: CFN_SIGNAL
-    description: Transport to use for software-config signals.
+  RabbitUserName:
+    default: guest
+    description: The username for RabbitMQ
     type: string
     type: string
-    constraints:
-      - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ]
+  SnmpdReadonlyUserName:
+    default: ro_snmp_user
+    description: The user name for SNMPd with readonly rights running on all Overcloud nodes
+    type: string
+  SnmpdReadonlyUserPassword:
+    default: unset
+    description: The user password for SNMPd with readonly rights running on all Overcloud nodes
+    type: string
+    hidden: true
 resources:
   ControlVirtualIP:
     type: OS::Neutron::Port
 resources:
   ControlVirtualIP:
     type: OS::Neutron::Port
@@ -360,11 +403,15 @@ resources:
             - - mysql://neutron:unset@
               - *compute_database_host
               - /ovs_neutron
             - - mysql://neutron:unset@
               - *compute_database_host
               - /ovs_neutron
-        NeutronNetworkType: "gre"
+        NeutronNetworkType:
+            get_param: NeutronNetworkType
+        NeutronTunnelTypes:
+            get_param: NeutronTunnelTypes
         NeutronEnableTunnelling: "True"
         NeutronFlatNetworks:
             get_param: NeutronFlatNetworks
         NeutronEnableTunnelling: "True"
         NeutronFlatNetworks:
             get_param: NeutronFlatNetworks
-        NeutronNetworkVLANRanges: ""
+        NeutronNetworkVLANRanges:
+            get_param: NeutronNetworkVLANRanges
         NeutronPhysicalBridge:
             get_param: HypervisorNeutronPhysicalBridge
         NeutronPublicInterface:
         NeutronPhysicalBridge:
             get_param: HypervisorNeutronPhysicalBridge
         NeutronPublicInterface:
@@ -377,16 +424,22 @@ resources:
     SubKey: resources.NovaCompute0AllNodesDeployment
     parameters:
         AllNodesConfig: {get_resource: allNodesConfig}
     SubKey: resources.NovaCompute0AllNodesDeployment
     parameters:
         AllNodesConfig: {get_resource: allNodesConfig}
+  NovaCompute0:
+    type: FileInclude
+    Path: nova-compute-instance.yaml
+    SubKey: resources.NovaCompute0
   NovaCompute0Passthrough:
     type: FileInclude
     Path: nova-compute-instance.yaml
     SubKey: resources.NovaCompute0Passthrough
     parameters:
         passthrough_config: {get_param: ExtraConfig}
   NovaCompute0Passthrough:
     type: FileInclude
     Path: nova-compute-instance.yaml
     SubKey: resources.NovaCompute0Passthrough
     parameters:
         passthrough_config: {get_param: ExtraConfig}
-  NovaCompute0:
+  NovaCompute0PassthroughSpecific:
     type: FileInclude
     Path: nova-compute-instance.yaml
     type: FileInclude
     Path: nova-compute-instance.yaml
-    SubKey: resources.NovaCompute0
+    SubKey: resources.NovaCompute0PassthroughSpecific
+    parameters:
+        passthrough_config_specific: {get_param: NovaComputeExtraConfig}
   controllerConfig:
     type: OS::Heat::StructuredConfig
     properties:
   controllerConfig:
     type: OS::Heat::StructuredConfig
     properties:
@@ -407,11 +460,9 @@ resources:
               - 0
               - Merge::Map:
                   controller0:
               - 0
               - Merge::Map:
                   controller0:
-                  - Fn::Select:
+                  - get_attr:
+                    - controller0
                     - name
                     - name
-                    - get_attr:
-                      - controller0
-                      - show
           nodeid: {get_input: bootstack_nodeid}
         database:
           host: &database_host
           nodeid: {get_input: bootstack_nodeid}
         database:
           host: &database_host
@@ -423,6 +474,7 @@ resources:
               - - mysql://cinder:unset@
                 - *database_host
                 - /cinder
               - - mysql://cinder:unset@
                 - *database_host
                 - /cinder
+          debug: {get_param: Debug}
           volume_size_mb:
             get_param: CinderLVMLoopDeviceSize
           service-password:
           volume_size_mb:
             get_param: CinderLVMLoopDeviceSize
           service-password:
@@ -453,6 +505,7 @@ resources:
               - - mysql://glance:unset@
                 - *database_host
                 - /glance
               - - mysql://glance:unset@
                 - *database_host
                 - /glance
+          debug: {get_param: Debug}
           host:
             get_input: controller_virtual_ip
           port:
           host:
             get_input: controller_virtual_ip
           port:
@@ -480,6 +533,7 @@ resources:
               - - mysql://heat:unset@
                 - *database_host
                 - /heat
               - - mysql://heat:unset@
                 - *database_host
                 - /heat
+          debug: {get_param: Debug}
           stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
           watch_server_url: {get_input: heat.watch_server_url}
           metadata_server_url: {get_input: heat.metadata_server_url}
           stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
           watch_server_url: {get_input: heat.watch_server_url}
           metadata_server_url: {get_input: heat.metadata_server_url}
@@ -490,7 +544,7 @@ resources:
               nodes:
                 Merge::Map:
                   controller0:
               nodes:
                 Merge::Map:
                   controller0:
-                    {get_attr: [controller0, show, name]}
+                    {get_attr: [controller0, name]}
         keystone:
           db:
             Fn::Join:
         keystone:
           db:
             Fn::Join:
@@ -498,6 +552,7 @@ resources:
               - - mysql://keystone:unset@
                 - *database_host
                 - /keystone
               - - mysql://keystone:unset@
                 - *database_host
                 - /keystone
+          debug: {get_param: Debug}
           host:
             get_input: controller_virtual_ip
           ca_certificate: {get_param: KeystoneCACertificate}
           host:
             get_input: controller_virtual_ip
           ca_certificate: {get_param: KeystoneCACertificate}
@@ -517,6 +572,7 @@ resources:
               - - 'tripleo'
                 - {get_resource: MysqlClusterUniquePart}
         neutron:
               - - 'tripleo'
                 - {get_resource: MysqlClusterUniquePart}
         neutron:
+          debug: {get_param: Debug}
           flat-networks: {get_param: NeutronFlatNetworks}
           host: {get_input: controller_virtual_ip}
           metadata_proxy_shared_secret: unset
           flat-networks: {get_param: NeutronFlatNetworks}
           host: {get_input: controller_virtual_ip}
           metadata_proxy_shared_secret: unset
@@ -524,6 +580,7 @@ resources:
             enable_tunneling: 'True'
             local_ip:
               get_input: controller_host
             enable_tunneling: 'True'
             local_ip:
               get_input: controller_host
+            network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
             bridge_mappings: {get_param: NeutronBridgeMappings}
             public_interface:
               get_param: NeutronPublicInterface
             bridge_mappings: {get_param: NeutronBridgeMappings}
             public_interface:
               get_param: NeutronPublicInterface
@@ -531,8 +588,13 @@ resources:
               get_param: NeutronPublicInterfaceRawDevice
             public_interface_route:
               get_param: NeutronPublicInterfaceDefaultRoute
               get_param: NeutronPublicInterfaceRawDevice
             public_interface_route:
               get_param: NeutronPublicInterfaceDefaultRoute
+            public_interface_tag:
+              get_param: NeutronPublicInterfaceTag
             physical_bridge: br-ex
             physical_bridge: br-ex
-            tenant_network_type: gre
+            tenant_network_type:
+              get_param: NeutronNetworkType
+            tunnel_types:
+              get_param: NeutronTunnelTypes
           ovs_db:
             Fn::Join:
               - ''
           ovs_db:
             Fn::Join:
               - ''
@@ -550,6 +612,7 @@ resources:
               - - mysql://ceilometer:unset@
                 - *database_host
                 - /ceilometer
               - - mysql://ceilometer:unset@
                 - *database_host
                 - /ceilometer
+          debug: {get_param: Debug}
           metering_secret: {get_param: CeilometerMeteringSecret}
           service-password:
             get_param: CeilometerPassword
           metering_secret: {get_param: CeilometerMeteringSecret}
           service-password:
             get_param: CeilometerPassword
@@ -629,7 +692,7 @@ resources:
             Merge::Map:
               controller0:
                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
             Merge::Map:
               controller0:
                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
-                name: {get_attr: [controller0, show, name]}
+                name: {get_attr: [controller0, name]}
           net_binds:
             - ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
           services:
           net_binds:
             - ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
           services:
@@ -680,6 +743,9 @@ resources:
             - name: nova_metadata
               port: 8775
               net_binds: *public_binds
             - name: nova_metadata
               port: 8775
               net_binds: *public_binds
+            - name: nova_novncproxy
+              port: 6080
+              net_binds: *public_binds
             - name: ceilometer
               port: 8777
               net_binds: *public_binds
             - name: ceilometer
               port: 8777
               net_binds: *public_binds
@@ -696,6 +762,11 @@ resources:
     properties:
       group: os-apply-config
       config: {get_input: passthrough_config}
     properties:
       group: os-apply-config
       config: {get_input: passthrough_config}
+  controllerPassthroughSpecific:
+    type: OS::Heat::StructuredConfig
+    properties:
+      group: os-apply-config
+      config: {get_input: passthrough_config_specific}
   controller0:
     type: OS::Nova::Server
     properties:
   controller0:
     type: OS::Nova::Server
     properties:
@@ -711,7 +782,7 @@ resources:
         - network: ctlplane
       user_data_format: SOFTWARE_CONFIG
   controller0AllNodesDeployment:
         - network: ctlplane
       user_data_format: SOFTWARE_CONFIG
   controller0AllNodesDeployment:
-    depends_on: [controller0Deployment,controller0SSLDeployment,controller0Swift,controller0Passthrough]
+    depends_on: [controller0Deployment,controller0SSLDeployment,controller0Swift,controller0PassthroughSpecific]
     type: OS::Heat::StructuredDeployment
     properties:
       signal_transport: {get_param: DefaultSignalTransport}
     type: OS::Heat::StructuredDeployment
     properties:
       signal_transport: {get_param: DefaultSignalTransport}
@@ -724,7 +795,7 @@ resources:
       config: {get_resource: controllerConfig}
       server: {get_resource: controller0}
       input_values:
       config: {get_resource: controllerConfig}
       server: {get_resource: controller0}
       input_values:
-        bootstack_nodeid: {get_attr: [controller0, show, name]}
+        bootstack_nodeid: {get_attr: [controller0, name]}
         controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
         controller_virtual_ip:
           {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
         controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
         controller_virtual_ip:
           {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
@@ -761,10 +832,10 @@ resources:
                     Fn::Join:
                     - ' '
                     - - {get_attr: [NovaCompute0, networks, ctlplane, 0]}
                     Fn::Join:
                     - ' '
                     - - {get_attr: [NovaCompute0, networks, ctlplane, 0]}
-                      - {get_attr: [NovaCompute0, show, name]}
+                      - {get_attr: [NovaCompute0, name]}
                       - Fn::Join:
                         - '.'
                       - Fn::Join:
                         - '.'
-                        - - {get_attr: [NovaCompute0, show, name]}
+                        - - {get_attr: [NovaCompute0, name]}
                           - 'novalocal'
             - Fn::Join:
               - "\n"
                           - 'novalocal'
             - Fn::Join:
               - "\n"
@@ -773,10 +844,10 @@ resources:
                     Fn::Join:
                     - ' '
                     - - {get_attr: [BlockStorage0, networks, ctlplane, 0]}
                     Fn::Join:
                     - ' '
                     - - {get_attr: [BlockStorage0, networks, ctlplane, 0]}
-                      - {get_attr: [BlockStorage0, show, name]}
+                      - {get_attr: [BlockStorage0, name]}
                       - Fn::Join:
                         - '.'
                       - Fn::Join:
                         - '.'
-                        - - {get_attr: [BlockStorage0, show, name]}
+                        - - {get_attr: [BlockStorage0, name]}
                           - 'novalocal'
             - Fn::Join:
               - "\n"
                           - 'novalocal'
             - Fn::Join:
               - "\n"
@@ -785,10 +856,10 @@ resources:
                     Fn::Join:
                     - ' '
                     - - {get_attr: [SwiftStorage0, networks, ctlplane, 0]}
                     Fn::Join:
                     - ' '
                     - - {get_attr: [SwiftStorage0, networks, ctlplane, 0]}
-                      - {get_attr: [SwiftStorage0, show, name]}
+                      - {get_attr: [SwiftStorage0, name]}
                       - Fn::Join:
                         - '.'
                       - Fn::Join:
                         - '.'
-                        - - {get_attr: [SwiftStorage0, show, name]}
+                        - - {get_attr: [SwiftStorage0, name]}
                           - 'novalocal'
             - Fn::Join:
               - "\n"
                           - 'novalocal'
             - Fn::Join:
               - "\n"
@@ -797,10 +868,10 @@ resources:
                     Fn::Join:
                     - ' '
                     - - {get_attr: [controller0, networks, ctlplane, 0]}
                     Fn::Join:
                     - ' '
                     - - {get_attr: [controller0, networks, ctlplane, 0]}
-                      - {get_attr: [controller0, show, name]}
+                      - {get_attr: [controller0, name]}
                       - Fn::Join:
                         - '.'
                       - Fn::Join:
                         - '.'
-                        - - {get_attr: [controller0, show, name]}
+                        - - {get_attr: [controller0, name]}
                           - 'novalocal'
                       - {get_param: CloudName}
         rabbit:
                           - 'novalocal'
                       - {get_param: CloudName}
         rabbit:
@@ -809,7 +880,7 @@ resources:
               - ','
               - Merge::Map:
                   controller0:
               - ','
               - Merge::Map:
                   controller0:
-                    {get_attr: [controller0, show, name]}
+                    {get_attr: [controller0, name]}
   controller0SSLDeployment:
     type: OS::Heat::StructuredDeployment
     properties:
   controller0SSLDeployment:
     type: OS::Heat::StructuredDeployment
     properties:
@@ -829,6 +900,15 @@ resources:
       signal_transport: NO_SIGNAL
       input_values:
         passthrough_config: {get_param: ExtraConfig}
       signal_transport: NO_SIGNAL
       input_values:
         passthrough_config: {get_param: ExtraConfig}
+  controller0PassthroughSpecific:
+    depends_on: [controller0Passthrough]
+    type: OS::Heat::StructuredDeployment
+    properties:
+      config: {get_resource: controllerPassthroughSpecific}
+      server: {get_resource: controller0}
+      signal_transport: NO_SIGNAL
+      input_values:
+        passthrough_config_specific: {get_param: controllerExtraConfig}
 outputs:
   KeystoneURL:
     description: URL for the Overcloud Keystone service
 outputs:
   KeystoneURL:
     description: URL for the Overcloud Keystone service