Merge "Set vnc to use controller virtual_ip"
[apex-tripleo-heat-templates.git] / overcloud-source.yaml
index ce86dfa..6b172e7 100644 (file)
@@ -1,33 +1,33 @@
-Description: Nova API,Keystone,Heat Engine and API,Glance,Neutron,Dedicated MySQL
+description: Nova API,Keystone,Heat Engine and API,Glance,Neutron,Dedicated MySQL
   server,Dedicated RabbitMQ Server,Group of Nova Computes
   server,Dedicated RabbitMQ Server,Group of Nova Computes
-HeatTemplateFormatVersion: '2012-12-12'
-Parameters:
+heat_template_version: 2013-05-23
+parameters:
   AdminPassword:
   AdminPassword:
-    Default: unset
-    Description: The password for the keystone admin account, used for monitoring, querying neutron etc.
-    Type: String
-    NoEcho: true
+    default: unset
+    description: The password for the keystone admin account, used for monitoring, querying neutron etc.
+    type: string
+    hidden: true
   AdminToken:
   AdminToken:
-    Default: unset
-    Description: The keystone auth secret.
-    Type: String
-    NoEcho: true
+    default: unset
+    description: The keystone auth secret.
+    type: string
+    hidden: true
   CinderPassword:
   CinderPassword:
-    Default: unset
-    Description: The password for the cinder service account, used by cinder-api.
-    Type: String
-    NoEcho: true
+    default: unset
+    description: The password for the cinder service account, used by cinder-api.
+    type: string
+    hidden: true
   CinderISCSIHelper:
   CinderISCSIHelper:
-    Default: tgtadm
-    Description: The iSCSI helper to use with cinder.
-    Type: String
+    default: tgtadm
+    description: The iSCSI helper to use with cinder.
+    type: string
   CinderLVMLoopDeviceSize:
   CinderLVMLoopDeviceSize:
-    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
   ExtraConfig:
   ExtraConfig:
-    Default: {}
-    Description: |
+    default: {}
+    description: |
       Additional configuration to inject into the cluster. The JSON should have
       the following structure:
         {"FILEKEY":
       Additional configuration to inject into the cluster. The JSON should have
       the following structure:
         {"FILEKEY":
@@ -62,304 +62,332 @@ Parameters:
             ]
           }
         }
             ]
           }
         }
-    Type: Json
+    type: json
   OvercloudControlFlavor:
   OvercloudControlFlavor:
-    Default: baremetal
-    Description: Flavor for control nodes to request when deploying.
-    Type: String
+    default: baremetal
+    description: Flavor for control nodes to request when deploying.
+    type: string
   OvercloudComputeFlavor:
   OvercloudComputeFlavor:
-    Default: baremetal
-    Description: Flavor for compute nodes to request when deploying.
-    Type: String
+    default: baremetal
+    description: Flavor for compute nodes to request when deploying.
+    type: string
   GlancePort:
   GlancePort:
-    Default: 9292
-    Description: Glance port.
-    Type: String
+    default: 9292
+    description: Glance port.
+    type: string
   GlanceProtocol:
   GlanceProtocol:
-    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:
   GlancePassword:
-    Default: unset
-    Description: The password for the glance service account, used by the glance services.
-    Type: String
-    NoEcho: true
+    default: unset
+    description: The password for the glance service account, used by the glance services.
+    type: string
+    hidden: true
   GlanceNotifierStrategy:
   GlanceNotifierStrategy:
-    Description: Strategy to use for Glance notification queue
-    Type: String
-    Default: noop
+    description: Strategy to use for Glance notification queue
+    type: string
+    default: noop
   GlanceLogFile:
   GlanceLogFile:
-    Description: The filepath of the file to use for logging messages from Glance.
-    Type: String
-    Default: ''
+    description: The filepath of the file to use for logging messages from Glance.
+    type: string
+    default: ''
   HeatPassword:
   HeatPassword:
-    Default: unset
-    Description: The password for the Heat service account, used by the Heat services.
-    Type: String
-    NoEcho: true
+    default: unset
+    description: The password for the Heat service account, used by the Heat services.
+    type: string
+    hidden: true
   ImageUpdatePolicy:
   ImageUpdatePolicy:
-    Default: 'REBUILD_PRESERVE_EPHEMERAL'
-    Description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
-    Type: String
+    default: 'REBUILD_PRESERVE_EPHEMERAL'
+    description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
+    type: string
   KeyName:
   KeyName:
-    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:
   NeutronBridgeMappings:
-    Description: The OVS logical->physical bridge mappings to use.
-    Type: String
-    Default: ''
+    description: The OVS logical->physical bridge mappings to use.
+    type: string
+    default: ''
   NeutronPassword:
   NeutronPassword:
-    Default: unset
-    Description: The password for the neutron service account, used by neutron agents.
-    Type: String
-    NoEcho: true
+    default: unset
+    description: The password for the neutron service account, used by neutron agents.
+    type: string
+    hidden: true
   CeilometerComputeAgent:
   CeilometerComputeAgent:
-    Description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
-    Type: String
-    Default: ''
-    AllowedValues: ['', Present]
+    description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
+    type: string
+    default: ''
+    constraints:
+    - allowed_values: ['', Present]
   CeilometerMeteringSecret:
   CeilometerMeteringSecret:
-    Default: unset
-    Description: Secret shared by the ceilometer services.
-    Type: String
-    NoEcho: true
+    default: unset
+    description: Secret shared by the ceilometer services.
+    type: string
+    hidden: true
   CeilometerPassword:
   CeilometerPassword:
-    Default: unset
-    Description: The password for the ceilometer service account.
-    Type: String
-    NoEcho: true
+    default: unset
+    description: The password for the ceilometer service account.
+    type: string
+    hidden: true
   SnmpdReadonlyUserName:
   SnmpdReadonlyUserName:
-    Default: ro_snmp_user
-    Description: The user name for SNMPd with readonly rights running on all Overcloud nodes
-    Type: String
+    default: ro_snmp_user
+    description: The user name for SNMPd with readonly rights running on all Overcloud nodes
+    type: string
   SnmpdReadonlyUserPassword:
   SnmpdReadonlyUserPassword:
-    Default: unset
-    Description: The user password for SNMPd with readonly rights running on all Overcloud nodes
-    Type: String
-    NoEcho: true
+    default: unset
+    description: The user password for SNMPd with readonly rights running on all Overcloud nodes
+    type: string
+    hidden: true
   CloudName:
   CloudName:
-    Default: ''
-    Description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
-    Type: String
+    default: ''
+    description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
+    type: string
   NovaComputeDriver:
   NovaComputeDriver:
-    Default: libvirt.LibvirtDriver
-    Type: String
+    default: libvirt.LibvirtDriver
+    type: string
   NovaComputeLibvirtType:
   NovaComputeLibvirtType:
-    Default: ''
-    Type: String
+    default: ''
+    type: string
   NovaImage:
   NovaImage:
-    Type: String
-    Default: overcloud-compute
+    type: string
+    default: overcloud-compute
   NovaPassword:
   NovaPassword:
-    Default: unset
-    Description: The password for the nova service account, used by nova-api.
-    Type: String
-    NoEcho: true
+    default: unset
+    description: The password for the nova service account, used by nova-api.
+    type: string
+    hidden: true
   NeutronFlatNetworks:
   NeutronFlatNetworks:
-    Type: String
-    Default: ''
-    Description: If set, flat networks to configure in neutron plugins.
+    type: string
+    default: ''
+    description: If set, flat networks to configure in neutron plugins.
   HypervisorNeutronPhysicalBridge:
   HypervisorNeutronPhysicalBridge:
-    Default: ''
-    Description: An OVS bridge to create on each hypervisor.
-    Type: String
+    default: ''
+    description: An OVS bridge to create on each hypervisor.
+    type: string
   HypervisorNeutronPublicInterface:
   HypervisorNeutronPublicInterface:
-    Default: ''
-    Description: What interface to add to the HypervisorNeutronPhysicalBridge.
-    Type: String
+    default: ''
+    description: What interface to add to the HypervisorNeutronPhysicalBridge.
+    type: string
   NeutronPublicInterface:
   NeutronPublicInterface:
-    Default: eth0
-    Description: What interface to bridge onto br-ex for network nodes.
-    Type: String
+    default: eth0
+    description: What interface to bridge onto br-ex for network nodes.
+    type: string
   NeutronPublicInterfaceDefaultRoute:
   NeutronPublicInterfaceDefaultRoute:
-    Default: ''
-    Description: A custom default route for the NeutronPublicInterface.
-    Type: String
+    default: ''
+    description: A custom default route for the NeutronPublicInterface.
+    type: string
   NeutronPublicInterfaceIP:
   NeutronPublicInterfaceIP:
-    Default: ''
-    Description: A custom IP address to put onto the NeutronPublicInterface.
-    Type: String
+    default: ''
+    description: A custom IP address to put onto the NeutronPublicInterface.
+    type: string
   NeutronPublicInterfaceRawDevice:
   NeutronPublicInterfaceRawDevice:
-    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:
   NeutronControlPlaneID:
-    Default: ''
-    Type: String
-    Description: Neutron ID for ctlplane network.
+    default: ''
+    type: string
+    description: Neutron ID for ctlplane network.
   NeutronDnsmasqOptions:
   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
+    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:
   controllerImage:
-    Type: String
-    Default: overcloud-control
+    type: string
+    default: overcloud-control
   NtpServer:
   NtpServer:
-    Type: String
-    Default: ''
+    type: string
+    default: ''
   RabbitUserName:
   RabbitUserName:
-    Default: guest
-    Description: The username for RabbitMQ
-    Type: String
+    default: guest
+    description: The username for RabbitMQ
+    type: string
   RabbitPassword:
   RabbitPassword:
-    Default: guest
-    Description: The password for RabbitMQ
-    Type: String
-    NoEcho: true
+    default: guest
+    description: The password for RabbitMQ
+    type: string
+    hidden: true
   RabbitCookieSalt:
   RabbitCookieSalt:
-    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.
   HeatStackDomainAdminPassword:
   HeatStackDomainAdminPassword:
-    Description: Password for heat_domain_admin user.
-    Type: String
-    Default: ''
-    NoEcho: true
+    description: Password for heat_domain_admin user.
+    type: string
+    default: ''
+    hidden: true
   LiveUpdateUserName:
   LiveUpdateUserName:
-    Type: String
-    Description: The live-update username for the undercloud Glance API.
-    Default: ''
+    type: string
+    description: The live-update username for the undercloud Glance API.
+    default: ''
   LiveUpdateTenantName:
   LiveUpdateTenantName:
-    Type: String
-    Description: The live-update tenant name for the undercloud Glance API.
-    Default: ''
+    type: string
+    description: The live-update tenant name for the undercloud Glance API.
+    default: ''
   LiveUpdateHost:
   LiveUpdateHost:
-    Type: String
-    Description: The IP address for the undercloud Glance API.
-    Default: ''
+    type: string
+    description: The IP address for the undercloud Glance API.
+    default: ''
   LiveUpdatePassword:
   LiveUpdatePassword:
-    Type: String
-    Default: ''
-    Description: The live-update password for the undercloud Glance API.
-    NoEcho: true
+    type: string
+    default: ''
+    description: The live-update password for the undercloud Glance API.
+    hidden: true
   LiveUpdateComputeImage:
   LiveUpdateComputeImage:
-    Type: String
-    Description: The image ID for live-updates to the overcloud compute nodes.
-    Default: ''
+    type: string
+    description: The image ID for live-updates to the overcloud compute nodes.
+    default: ''
   MysqlInnodbBufferPoolSize:
   MysqlInnodbBufferPoolSize:
-    Description: >
+    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.
         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
+    type: number
+    default: 0
   ControlVirtualInterface:
   ControlVirtualInterface:
-    Default: 'br-ex'
-    Description: Interface where virtual ip will be assigned.
-    Type: String
+    default: 'br-ex'
+    description: Interface where virtual ip will be assigned.
+    type: string
   ControlFixedIPs:
   ControlFixedIPs:
-    Default: []
-    Description: Should be used for arbitrary ips.
-    Type: Json
+    default: []
+    description: Should be used for arbitrary ips.
+    type: json
   PublicVirtualFixedIPs:
   PublicVirtualFixedIPs:
-    Default: []
-    Description: |
+    default: []
+    description: |
         Control the IP allocation for the PublicVirtualInterface port. E.g.
         [{'ip_address':'1.2.3.4'}]
         Control the IP allocation for the PublicVirtualInterface port. E.g.
         [{'ip_address':'1.2.3.4'}]
-    Type: Json
+    type: json
   PublicVirtualInterface:
   PublicVirtualInterface:
-    Default: 'br-ex'
-    Description: >
+    default: 'br-ex'
+    description: >
         Specifies the interface where the public-facing virtual ip will be assigned.
         This should be int_public when a VLAN is being used.
         Specifies the interface where the public-facing virtual ip will be assigned.
         This should be int_public when a VLAN is being used.
-    Type: String
+    type: string
   PublicVirtualNetwork:
   PublicVirtualNetwork:
-    Default: 'ctlplane'
-    Type: String
-    Description: >
+    default: 'ctlplane'
+    type: string
+    description: >
         Neutron network to allocate public virtual IP port on.
   KeystoneCACertificate:
         Neutron network to allocate public virtual IP port on.
   KeystoneCACertificate:
-    Default: ''
-    Description: Keystone self-signed certificate authority certificate.
-    Type: String
+    default: ''
+    description: Keystone self-signed certificate authority certificate.
+    type: string
   KeystoneSigningCertificate:
   KeystoneSigningCertificate:
-    Default: ''
-    Description: Keystone certificate for verifying token validity.
-    Type: String
+    default: ''
+    description: Keystone certificate for verifying token validity.
+    type: string
   KeystoneSigningKey:
   KeystoneSigningKey:
-    Default: ''
-    Description: Keystone key for signing tokens.
-    Type: String
-    NoEcho: true
-Resources:
+    default: ''
+    description: Keystone key for signing tokens.
+    type: string
+    hidden: true
+  DefaultSignalTransport:
+    default: CFN_SIGNAL
+    description: Transport to use for software-config signals.
+    type: string
+    constraints:
+      - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ]
+resources:
   ControlVirtualIP:
   ControlVirtualIP:
-    Type: OS::Neutron::Port
-    Properties:
+    type: OS::Neutron::Port
+    properties:
       name: control_virtual_ip
       name: control_virtual_ip
-      network_id: {Ref: NeutronControlPlaneID}
+      network_id: {get_param: NeutronControlPlaneID}
       fixed_ips:
       fixed_ips:
-        Ref: ControlFixedIPs
+        get_param: ControlFixedIPs
   MysqlClusterUniquePart:
   MysqlClusterUniquePart:
-    Type: OS::Heat::RandomString
-    Properties:
+    type: OS::Heat::RandomString
+    properties:
+      length: 10
+  MysqlRootPassword:
+    type: OS::Heat::RandomString
+    properties:
       length: 10
   PublicVirtualIP:
       length: 10
   PublicVirtualIP:
-    Type: OS::Neutron::Port
-    Properties:
+    type: OS::Neutron::Port
+    properties:
       name: public_virtual_ip
       name: public_virtual_ip
-      network: {Ref: PublicVirtualNetwork}
+      network: {get_param: PublicVirtualNetwork}
       fixed_ips:
       fixed_ips:
-        Ref: PublicVirtualFixedIPs
+        get_param: PublicVirtualFixedIPs
   RabbitCookie:
   RabbitCookie:
-    Type: OS::Heat::RandomString
-    Properties:
+    type: OS::Heat::RandomString
+    properties:
       length: 20
       salt:
       length: 20
       salt:
-        Ref: RabbitCookieSalt
-  NovaCompute0Config:
-    Type: FileInclude
+        get_param: RabbitCookieSalt
+  NovaCompute0Deployment:
+    type: FileInclude
     Path: nova-compute-instance.yaml
     Path: nova-compute-instance.yaml
-    SubKey: Resources.NovaCompute0Deploy
-    Parameters:
-        NovaApiHost: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
-        KeystoneHost: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
-        NeutronHost: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
-        GlanceHost: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
-        NovaDSN: {"Fn::Join": ['', ['mysql://nova:unset@', {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}, '/nova']]}
-        CeilometerDSN: {"Fn::Join": ['', ['mysql://ceilometer:unset@', {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}, '/ceilometer']]}
-        NeutronDSN: {"Fn::Join": ['', ['mysql://neutron:unset@', {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}, '/ovs_neutron']]}
+    SubKey: resources.NovaCompute0Deployment
+    parameters:
+        DefaultSignalTransport:
+            get_param: DefaultSignalTransport
+        NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+        KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+        NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+        GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+        RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+        NovaDSN:
+          Fn::Join:
+            - ''
+            - - mysql://nova:unset@
+              - &compute_database_host {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+              - /nova
+        NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
+        CeilometerDSN:
+          Fn::Join:
+            - ''
+            - - mysql://ceilometer:unset@
+              - *compute_database_host
+              - /ceilometer
+        NeutronDSN:
+          Fn::Join:
+            - ''
+            - - mysql://neutron:unset@
+              - *compute_database_host
+              - /ovs_neutron
         NeutronNetworkType: "gre"
         NeutronEnableTunnelling: "True"
         NeutronFlatNetworks:
         NeutronNetworkType: "gre"
         NeutronEnableTunnelling: "True"
         NeutronFlatNetworks:
-            Ref: NeutronFlatNetworks
+            get_param: NeutronFlatNetworks
         NeutronNetworkVLANRanges: ""
         NeutronPhysicalBridge:
         NeutronNetworkVLANRanges: ""
         NeutronPhysicalBridge:
-            Ref: HypervisorNeutronPhysicalBridge
+            get_param: HypervisorNeutronPhysicalBridge
         NeutronPublicInterface:
         NeutronPublicInterface:
-            Ref: HypervisorNeutronPublicInterface
+            get_param: HypervisorNeutronPublicInterface
         NeutronBridgeMappings:
         NeutronBridgeMappings:
-            Ref: NeutronBridgeMappings
-  NovaCompute0AllNodes:
-    Type: FileInclude
+            get_param: NeutronBridgeMappings
+  NovaCompute0AllNodesDeployment:
+    type: FileInclude
     Path: nova-compute-instance.yaml
     Path: nova-compute-instance.yaml
-    SubKey: Resources.NovaCompute0AllNodesDeploy
-    Parameters:
-        AllNodesConfig: {Ref: allNodesConfig}
+    SubKey: resources.NovaCompute0AllNodesDeployment
+    parameters:
+        AllNodesConfig: {get_resource: allNodesConfig}
   NovaCompute0Passthrough:
   NovaCompute0Passthrough:
-    Type: OS::Heat::StructuredDeployment
-    Properties:
-      config: {Ref: NovaComputePassthrough}
-      server: {Ref: NovaCompute0}
-      signal_transport: NO_SIGNAL
-      input_values:
-        passthrough_config: {Ref: ExtraConfig}
+    type: FileInclude
+    Path: nova-compute-instance.yaml
+    SubKey: resources.NovaCompute0Passthrough
+    parameters:
+        passthrough_config: {get_param: ExtraConfig}
   NovaCompute0:
   NovaCompute0:
-    Type: FileInclude
+    type: FileInclude
     Path: nova-compute-instance.yaml
     Path: nova-compute-instance.yaml
-    SubKey: Resources.NovaCompute0
+    SubKey: resources.NovaCompute0
   controllerConfig:
   controllerConfig:
-    Type: OS::Heat::StructuredConfig
-    Properties:
+    type: OS::Heat::StructuredConfig
+    properties:
       group: os-apply-config
       config:
         admin-password:
       group: os-apply-config
       config:
         admin-password:
-          Ref: AdminPassword
+          get_param: AdminPassword
         admin-token:
         admin-token:
-          Ref: AdminToken
+          get_param: AdminToken
         bootstack:
           public_interface_ip:
         bootstack:
           public_interface_ip:
-            Ref: NeutronPublicInterfaceIP
+            get_param: NeutronPublicInterfaceIP
         bootstrap_host:
           bootstrap_nodeid:
             Fn::Select:
         bootstrap_host:
           bootstrap_nodeid:
             Fn::Select:
@@ -370,18 +398,26 @@ Resources:
                   controller0:
                   - Fn::Select:
                     - name
                   controller0:
                   - Fn::Select:
                     - name
-                    - Fn::GetAtt:
+                    - get_attr:
                       - controller0
                       - show
           nodeid: {get_input: bootstack_nodeid}
                       - controller0
                       - show
           nodeid: {get_input: bootstack_nodeid}
+        database:
+          host: &database_host
+            {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
         cinder:
         cinder:
-          db: mysql://cinder:unset@localhost/cinder
+          db:
+            Fn::Join:
+              - ''
+              - - mysql://cinder:unset@
+                - *database_host
+                - /cinder
           volume_size_mb:
           volume_size_mb:
-            Ref: CinderLVMLoopDeviceSize
+            get_param: CinderLVMLoopDeviceSize
           service-password:
           service-password:
-            Ref: CinderPassword
+            get_param: CinderPassword
           iscsi-helper:
           iscsi-helper:
-            Ref: CinderISCSIHelper
+            get_param: CinderISCSIHelper
         controller-address:
           get_input: controller_host
         corosync:
         controller-address:
           get_input: controller_host
         corosync:
@@ -390,7 +426,7 @@ Resources:
           nodes:
             Merge::Map:
               controller0:
           nodes:
             Merge::Map:
               controller0:
-                ip: {"Fn::Select": [ 0, {"Fn::Select": [ "ctlplane", {"Fn::GetAtt": [controller0, networks]} ]} ] }
+                ip: {get_attr: [controller0, networks, ctlplane, 0]}
         pacemaker:
           stonith_enabled : false
           recheck_interval : 5
         pacemaker:
           stonith_enabled : false
           recheck_interval : 5
@@ -400,30 +436,40 @@ Resources:
           registry:
             host: {get_input: controller_virtual_ip}
           backend: swift
           registry:
             host: {get_input: controller_virtual_ip}
           backend: swift
-          db: mysql://glance:unset@localhost/glance
+          db:
+            Fn::Join:
+              - ''
+              - - mysql://glance:unset@
+                - *database_host
+                - /glance
           host:
             get_input: controller_virtual_ip
           port:
           host:
             get_input: controller_virtual_ip
           port:
-            Ref: GlancePort
+            get_param: GlancePort
           protocol:
           protocol:
-            Ref: GlanceProtocol
+            get_param: GlanceProtocol
           service-password:
           service-password:
-            Ref: GlancePassword
+            get_param: GlancePassword
           swift-store-user: service:glance
           swift-store-key:
           swift-store-user: service:glance
           swift-store-key:
-            Ref: GlancePassword
+            get_param: GlancePassword
           notifier-strategy:
           notifier-strategy:
-            Ref: GlanceNotifierStrategy
+            get_param: GlanceNotifierStrategy
           log-file:
           log-file:
-            Ref: GlanceLogFile
+            get_param: GlanceLogFile
         heat:
           admin_password:
         heat:
           admin_password:
-            Ref: HeatPassword
+            get_param: HeatPassword
           admin_tenant_name: service
           admin_user: heat
           auth_encryption_key: unset___________
           admin_tenant_name: service
           admin_user: heat
           auth_encryption_key: unset___________
-          db: mysql://heat:unset@localhost/heat
-          stack_domain_admin_password: {Ref: HeatStackDomainAdminPassword}
+          db:
+            Fn::Join:
+              - ''
+              - - mysql://heat:unset@
+                - *database_host
+                - /heat
+          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}
           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
           watch_server_url: {get_input: heat.watch_server_url}
           metadata_server_url: {get_input: heat.metadata_server_url}
           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
@@ -433,99 +479,122 @@ Resources:
               nodes:
                 Merge::Map:
                   controller0:
               nodes:
                 Merge::Map:
                   controller0:
-                    {"Fn::Select": [ name, {"Fn::GetAtt": [controller0, show]} ] }
+                    {get_attr: [controller0, show, name]}
         keystone:
         keystone:
-          db: mysql://keystone:unset@localhost/keystone
+          db:
+            Fn::Join:
+              - ''
+              - - mysql://keystone:unset@
+                - *database_host
+                - /keystone
           host:
             get_input: controller_virtual_ip
           host:
             get_input: controller_virtual_ip
-          ca_certificate: {Ref: KeystoneCACertificate}
-          signing_key: {Ref: KeystoneSigningKey}
-          signing_certificate: {Ref: KeystoneSigningCertificate}
+          ca_certificate: {get_param: KeystoneCACertificate}
+          signing_key: {get_param: KeystoneSigningKey}
+          signing_certificate: {get_param: KeystoneSigningCertificate}
         mysql:
         mysql:
-          innodb_buffer_pool_size: {Ref: MysqlInnodbBufferPoolSize}
+          innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
+          local_bind: true
+          root-password: {get_resource: MysqlRootPassword}
           nodes:
             Merge::Map:
               controller0:
           nodes:
             Merge::Map:
               controller0:
-                ip: {"Fn::Select": [ 0, {"Fn::Select": [ "ctlplane", {"Fn::GetAtt": [controller0, networks]} ]} ] }
+                ip: {get_attr: [controller0, networks, ctlplane, 0]}
           cluster_name:
             Fn::Join:
               - '-'
               - - 'tripleo'
           cluster_name:
             Fn::Join:
               - '-'
               - - 'tripleo'
-                - {Ref: MysqlClusterUniquePart}
+                - {get_resource: MysqlClusterUniquePart}
         neutron:
         neutron:
-          flat-networks: {Ref: NeutronFlatNetworks}
+          flat-networks: {get_param: NeutronFlatNetworks}
           host: {get_input: controller_virtual_ip}
           metadata_proxy_shared_secret: unset
           ovs:
             enable_tunneling: 'True'
             local_ip:
               get_input: controller_host
           host: {get_input: controller_virtual_ip}
           metadata_proxy_shared_secret: unset
           ovs:
             enable_tunneling: 'True'
             local_ip:
               get_input: controller_host
-            bridge_mappings: {Ref: NeutronBridgeMappings}
+            bridge_mappings: {get_param: NeutronBridgeMappings}
             public_interface:
             public_interface:
-              Ref: NeutronPublicInterface
+              get_param: NeutronPublicInterface
             public_interface_raw_device:
             public_interface_raw_device:
-              Ref: NeutronPublicInterfaceRawDevice
+              get_param: NeutronPublicInterfaceRawDevice
             public_interface_route:
             public_interface_route:
-              Ref: NeutronPublicInterfaceDefaultRoute
+              get_param: NeutronPublicInterfaceDefaultRoute
             physical_bridge: br-ex
             tenant_network_type: gre
             physical_bridge: br-ex
             tenant_network_type: gre
-          ovs_db: mysql://neutron:unset@localhost/ovs_neutron?charset=utf8
+          ovs_db:
+            Fn::Join:
+              - ''
+              - - mysql://neutron:unset@
+                - *database_host
+                - /ovs_neutron?charset=utf8
           service-password:
           service-password:
-            Ref: NeutronPassword
+            get_param: NeutronPassword
           dnsmasq-options:
           dnsmasq-options:
-            Ref: NeutronDnsmasqOptions
+            get_param: NeutronDnsmasqOptions
         ceilometer:
         ceilometer:
-          db: mysql://ceilometer:unset@localhost/ceilometer
-          metering_secret: {Ref: CeilometerMeteringSecret}
+          db:
+            Fn::Join:
+              - ''
+              - - mysql://ceilometer:unset@
+                - *database_host
+                - /ceilometer
+          metering_secret: {get_param: CeilometerMeteringSecret}
           service-password:
           service-password:
-            Ref: CeilometerPassword
+            get_param: CeilometerPassword
         snmpd:
           export_MIB: UCD-SNMP-MIB
           readonly_user_name:
         snmpd:
           export_MIB: UCD-SNMP-MIB
           readonly_user_name:
-            Ref: SnmpdReadonlyUserName
+            get_param: SnmpdReadonlyUserName
           readonly_user_password:
           readonly_user_password:
-            Ref: SnmpdReadonlyUserPassword
+            get_param: SnmpdReadonlyUserPassword
         nova:
           compute_driver: libvirt.LibvirtDriver
         nova:
           compute_driver: libvirt.LibvirtDriver
-          db: mysql://nova:unset@localhost/nova
+          db:
+            Fn::Join:
+              - ''
+              - - mysql://nova:unset@
+                - *database_host
+                - /nova
           default_floating_pool:
             ext-net
           host: {get_input: controller_virtual_ip}
           metadata-proxy: true
           service-password:
           default_floating_pool:
             ext-net
           host: {get_input: controller_virtual_ip}
           metadata-proxy: true
           service-password:
-            Ref: NovaPassword
+            get_param: NovaPassword
         rabbit:
         rabbit:
+          host: {get_input: controller_virtual_ip}
           username:
           username:
-            Ref: RabbitUserName
+            get_param: RabbitUserName
           password:
           password:
-            Ref: RabbitPassword
+            get_param: RabbitPassword
           cookie:
           cookie:
-            Fn::GetAtt:
+            get_attr:
             - RabbitCookie
             - value
         ntp:
           servers:
             - RabbitCookie
             - value
         ntp:
           servers:
-              - {server: {Ref: NtpServer}, fudge: "stratum 0"}
+              - {server: {get_param: NtpServer}, fudge: "stratum 0"}
         virtual_interfaces:
           instances:
             - vrrp_instance_name: VI_CONTROL
               virtual_router_id: 51
               keepalive_interface:
         virtual_interfaces:
           instances:
             - vrrp_instance_name: VI_CONTROL
               virtual_router_id: 51
               keepalive_interface:
-                Ref: ControlVirtualInterface
+                get_param: ControlVirtualInterface
               priority: 101
               virtual_ips:
               priority: 101
               virtual_ips:
-              - ip: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
+              - ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
                 interface:
                 interface:
-                  Ref: ControlVirtualInterface
+                  get_param: ControlVirtualInterface
             - vrrp_instance_name: VI_PUBLIC
               virtual_router_id: 52
               keepalive_interface:
             - vrrp_instance_name: VI_PUBLIC
               virtual_router_id: 52
               keepalive_interface:
-                Ref: PublicVirtualInterface
+                get_param: PublicVirtualInterface
               priority: 101
               virtual_ips:
               priority: 101
               virtual_ips:
-              - ip: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [PublicVirtualIP, fixed_ips]]]}
+              - ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
                 interface:
                 interface:
-                  Ref: PublicVirtualInterface
+                  get_param: PublicVirtualInterface
           vrrp_sync_groups:
             - name: VG1
               members:
           vrrp_sync_groups:
             - name: VG1
               members:
@@ -533,31 +602,31 @@ Resources:
                 - VI_PUBLIC
         keepalived:
           keepalive_interface:
                 - VI_PUBLIC
         keepalived:
           keepalive_interface:
-            Ref: PublicVirtualInterface
+            get_param: PublicVirtualInterface
           priority: 101
         virtual_ips:
             -
           priority: 101
         virtual_ips:
             -
-              ip: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
+              ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
               interface:
               interface:
-                Ref: ControlVirtualInterface
+                get_param: ControlVirtualInterface
             -
             -
-              ip: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [PublicVirtualIP, fixed_ips]]]}
+              ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
               interface:
               interface:
-                Ref: PublicVirtualInterface
+                get_param: PublicVirtualInterface
         haproxy:
           nodes:
             Merge::Map:
               controller0:
         haproxy:
           nodes:
             Merge::Map:
               controller0:
-                ip: {"Fn::Select": [ 0, {"Fn::Select": [ "ctlplane", {"Fn::GetAtt": [controller0, networks]} ]} ] }
-                name: {"Fn::Select": [ name, {"Fn::GetAtt": [controller0, show]} ] }
+                ip: {get_attr: [controller0, networks, ctlplane, 0]}
+                name: {get_attr: [controller0, show, name]}
           net_binds:
           net_binds:
-            - ip: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
+            - ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
           services:
             - name: keystone_admin
               port: 35357
               net_binds: &public_binds
           services:
             - name: keystone_admin
               port: 35357
               net_binds: &public_binds
-                - ip: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
-                - ip: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [PublicVirtualIP, fixed_ips]]]}
+                - ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
+                - ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
             - name: keystone_public
               port: 5000
               net_binds: *public_binds
             - name: keystone_public
               port: 5000
               net_binds: *public_binds
@@ -585,6 +654,10 @@ Resources:
             - name: heat_cfn
               port: 8000
               net_binds: *public_binds
             - name: heat_cfn
               port: 8000
               net_binds: *public_binds
+            - name: mysql
+              port: 3306
+              extra_server_params:
+                - backup
             - name: nova_ec2
               port: 8773
             - name: nova_osapi
             - name: nova_ec2
               port: 8773
             - name: nova_osapi
@@ -599,74 +672,69 @@ Resources:
             - name: swift_proxy_server
               port: 8080
               net_binds: *public_binds
             - name: swift_proxy_server
               port: 8080
               net_binds: *public_binds
+            - name: rabbitmq
+              port: 5672
+              options:
+                - timeout client 0
+                - timeout server 0
   controllerPassthrough:
   controllerPassthrough:
-    Type: OS::Heat::StructuredConfig
-    Properties:
+    type: OS::Heat::StructuredConfig
+    properties:
       group: os-apply-config
       config: {get_input: passthrough_config}
   controller0:
       group: os-apply-config
       config: {get_input: passthrough_config}
   controller0:
-    Type: OS::Nova::Server
-    Properties:
+    type: OS::Nova::Server
+    properties:
       image:
       image:
-        Ref: controllerImage
+        get_param: controllerImage
       image_update_policy:
       image_update_policy:
-        Ref: ImageUpdatePolicy
+        get_param: ImageUpdatePolicy
       flavor:
       flavor:
-        Ref: OvercloudControlFlavor
+        get_param: OvercloudControlFlavor
       key_name:
       key_name:
-        Ref: KeyName
+        get_param: KeyName
       networks:
         - network: ctlplane
       user_data_format: SOFTWARE_CONFIG
       networks:
         - network: ctlplane
       user_data_format: SOFTWARE_CONFIG
-  controller0AllNodesConfig:
-    Type: OS::Heat::StructuredDeployment
-    Properties:
-      config: {Ref: allNodesConfig}
-      server: {Ref: controller0}
+  controller0AllNodesDeployment:
+    depends_on: [controller0Deployment,controller0SSLDeployment,controller0Swift,controller0Passthrough]
+    type: OS::Heat::StructuredDeployment
+    properties:
+      signal_transport: {get_param: DefaultSignalTransport}
+      config: {get_resource: allNodesConfig}
+      server: {get_resource: controller0}
   controller0Deployment:
   controller0Deployment:
-    Type: OS::Heat::StructuredDeployment
-    Properties:
+    type: OS::Heat::StructuredDeployment
+    properties:
       signal_transport: NO_SIGNAL
       signal_transport: NO_SIGNAL
-      config: {Ref: controllerConfig}
-      server: {Ref: controller0}
+      config: {get_resource: controllerConfig}
+      server: {get_resource: controller0}
       input_values:
       input_values:
-        bootstack_nodeid:
-          Fn::Select:
-          - name
-          - Fn::GetAtt:
-            - controller0
-            - show
-        controller_host:
-          Fn::Select:
-            - 0
-            - Fn::Select:
-              - ctlplane
-              - Fn::GetAtt:
-                - controller0
-                - networks
+        bootstack_nodeid: {get_attr: [controller0, show, name]}
+        controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
         controller_virtual_ip:
         controller_virtual_ip:
-          {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
+          {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
         heat.watch_server_url:
           Fn::Join:
             - ''
             - - 'http://'
         heat.watch_server_url:
           Fn::Join:
             - ''
             - - 'http://'
-              - {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
+              - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
               - ':8003'
         heat.metadata_server_url:
           Fn::Join:
             - ''
             - - 'http://'
               - ':8003'
         heat.metadata_server_url:
           Fn::Join:
             - ''
             - - 'http://'
-              - {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
+              - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
               - ':8000'
         heat.waitcondition_server_url:
           Fn::Join:
             - ''
             - - 'http://'
               - ':8000'
         heat.waitcondition_server_url:
           Fn::Join:
             - ''
             - - 'http://'
-              - {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
+              - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
               - ':8000/v1/waitcondition'
   allNodesConfig:
               - ':8000/v1/waitcondition'
   allNodesConfig:
-    Type: OS::Heat::StructuredConfig
-    Properties:
+    type: OS::Heat::StructuredConfig
+    properties:
       config:
         completion-signal: {get_input: deploy_signal_id}
         hosts:
       config:
         completion-signal: {get_input: deploy_signal_id}
         hosts:
@@ -678,25 +746,35 @@ Resources:
                   NovaCompute0:
                     Fn::Join:
                     - ' '
                   NovaCompute0:
                     Fn::Join:
                     - ' '
-                    - - Fn::Select:
-                        - 0
-                        - Fn::Select:
-                          - ctlplane
-                          - Fn::GetAtt:
-                            - NovaCompute0
-                            - networks
-                      - Fn::Select:
-                        - name
-                        - Fn::GetAtt:
-                          - NovaCompute0
-                          - show
+                    - - {get_attr: [NovaCompute0, networks, ctlplane, 0]}
+                      - {get_attr: [NovaCompute0, show, name]}
                       - Fn::Join:
                         - '.'
                       - Fn::Join:
                         - '.'
-                        - - Fn::Select:
-                            - name
-                            - Fn::GetAtt:
-                              - NovaCompute0
-                              - show
+                        - - {get_attr: [NovaCompute0, show, name]}
+                          - 'novalocal'
+            - Fn::Join:
+              - "\n"
+              - Merge::Map:
+                  BlockStorage0:
+                    Fn::Join:
+                    - ' '
+                    - - {get_attr: [BlockStorage0, networks, ctlplane, 0]}
+                      - {get_attr: [BlockStorage0, show, name]}
+                      - Fn::Join:
+                        - '.'
+                        - - {get_attr: [BlockStorage0, show, name]}
+                          - 'novalocal'
+            - Fn::Join:
+              - "\n"
+              - Merge::Map:
+                  SwiftStorage0:
+                    Fn::Join:
+                    - ' '
+                    - - {get_attr: [SwiftStorage0, networks, ctlplane, 0]}
+                      - {get_attr: [SwiftStorage0, show, name]}
+                      - Fn::Join:
+                        - '.'
+                        - - {get_attr: [SwiftStorage0, show, name]}
                           - 'novalocal'
             - Fn::Join:
               - "\n"
                           - 'novalocal'
             - Fn::Join:
               - "\n"
@@ -704,72 +782,45 @@ Resources:
                   controller0:
                     Fn::Join:
                     - ' '
                   controller0:
                     Fn::Join:
                     - ' '
-                    - - Fn::Select:
-                        - 0
-                        - Fn::Select:
-                          - ctlplane
-                          - Fn::GetAtt:
-                            - controller0
-                            - networks
-                      - Fn::Select:
-                        - name
-                        - Fn::GetAtt:
-                          - controller0
-                          - show
+                    - - {get_attr: [controller0, networks, ctlplane, 0]}
+                      - {get_attr: [controller0, show, name]}
                       - Fn::Join:
                         - '.'
                       - Fn::Join:
                         - '.'
-                        - - Fn::Select:
-                            - name
-                            - Fn::GetAtt:
-                              - controller0
-                              - show
+                        - - {get_attr: [controller0, show, name]}
                           - 'novalocal'
                           - 'novalocal'
-                      - {Ref: CloudName}
+                      - {get_param: CloudName}
         rabbit:
           nodes:
             Fn::Join:
               - ','
               - Merge::Map:
                   controller0:
         rabbit:
           nodes:
             Fn::Join:
               - ','
               - Merge::Map:
                   controller0:
-                    {"Fn::Select": [ name, {"Fn::GetAtt": [controller0, show]} ] }
+                    {get_attr: [controller0, show, name]}
   controller0SSLDeployment:
   controller0SSLDeployment:
-    Type: OS::Heat::StructuredDeployment
-    Properties:
-      config: {Ref: SSLConfig}
-      server: {Ref: controller0}
+    type: OS::Heat::StructuredDeployment
+    properties:
+      config: {get_resource: SSLConfig}
+      server: {get_resource: controller0}
       signal_transport: NO_SIGNAL
       input_values:
       signal_transport: NO_SIGNAL
       input_values:
-        controller_host:
-          Fn::Select:
-            - 0
-            - Fn::Select:
-              - ctlplane
-              - Fn::GetAtt:
-                - controller0
-                - networks
-        ssl_certificate: {Ref: SSLCertificate}
-        ssl_key: {Ref: SSLKey}
-        ssl_ca_certificate: {Ref: SSLCACertificate}
+        controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
+        ssl_certificate: {get_param: SSLCertificate}
+        ssl_key: {get_param: SSLKey}
+        ssl_ca_certificate: {get_param: SSLCACertificate}
   controller0Passthrough:
   controller0Passthrough:
-    Type: OS::Heat::StructuredDeployment
-    Properties:
-      config: {Ref: controllerPassthrough}
-      server: {Ref: controller0}
+    type: OS::Heat::StructuredDeployment
+    properties:
+      config: {get_resource: controllerPassthrough}
+      server: {get_resource: controller0}
       signal_transport: NO_SIGNAL
       input_values:
       signal_transport: NO_SIGNAL
       input_values:
-        passthrough_config: {Ref: ExtraConfig}
-Outputs:
+        passthrough_config: {get_param: ExtraConfig}
+outputs:
   KeystoneURL:
   KeystoneURL:
-    Description: URL for the Overcloud Keystone service
-    Value:
+    description: URL for the Overcloud Keystone service
+    value:
       Fn::Join:
       - ''
       - - http://
       Fn::Join:
       - ''
       - - http://
-        - Fn::Select:
-          - ip_address
-          - Fn::Select:
-            - 0
-            - Fn::GetAtt:
-              - ControlVirtualIP
-              - fixed_ips
+        - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
         - :5000/v2.0/
         - :5000/v2.0/