Use the server name attribute
[apex-tripleo-heat-templates.git] / overcloud-source.yaml
index 6449f8d..a9f3986 100644 (file)
@@ -1,6 +1,6 @@
 description: Nova API,Keystone,Heat Engine and API,Glance,Neutron,Dedicated MySQL
   server,Dedicated RabbitMQ Server,Group of Nova Computes
-heat_template_version: 2014-10-16
+heat_template_version: 2013-05-23
 parameters:
   AdminPassword:
     default: unset
@@ -25,6 +25,10 @@ parameters:
     default: 5000
     description: The size of the loopback file used by the cinder LVM driver.
     type: number
+  Debug:
+    default: ''
+    description: Set to True to enable debugging on all services.
+    type: string
   ExtraConfig:
     default: {}
     description: |
@@ -47,8 +51,8 @@ parameters:
           {"config":
             [{"section": "default",
               "values":
-                [{"option": "compute_manager",
-                  "value": "ironic.nova.compute.manager.ClusterComputeManager"
+                [{"option": "force_config_drive",
+                  "value": "always"
                  }
                 ]
              },
@@ -63,6 +67,18 @@ parameters:
           }
         }
     type: json
+  controllerExtraConfig:
+    default: {}
+    description: |
+      Controller specific configuration to inject into the cluster. Same
+      structure as ExtraConfig.
+    type: json
+  NovaComputeExtraConfig:
+    default: {}
+    description: |
+      NovaCompute specific configuration to inject into the cluster. Same
+      structure as ExtraConfig.
+    type: json
   OvercloudControlFlavor:
     default: baremetal
     description: Flavor for control nodes to request when deploying.
@@ -106,9 +122,22 @@ parameters:
     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.
+    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"
+  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
-    default: ''
   NeutronPassword:
     default: unset
     description: The password for the neutron service account, used by neutron agents.
@@ -159,14 +188,19 @@ parameters:
     hidden: true
   NeutronFlatNetworks:
     type: string
-    default: ''
-    description: If set, flat networks to configure in neutron plugins.
+    default: 'datacentre'
+    description: >
+      If set, flat networks to configure in neutron plugins. Defaults to
+      'datacentre' to permit external network creation.
   HypervisorNeutronPhysicalBridge:
-    default: ''
-    description: An OVS bridge to create on each hypervisor.
+    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: ''
+    default: 'eth0'
     description: What interface to add to the HypervisorNeutronPhysicalBridge.
     type: string
   NeutronPublicInterface:
@@ -181,6 +215,16 @@ parameters:
     default: ''
     description: A custom IP address to put onto the NeutronPublicInterface.
     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
   NeutronPublicInterfaceRawDevice:
     default: ''
     description: If set, the public interface is a vlan with this device as the raw device.
@@ -255,7 +299,7 @@ parameters:
     type: json
   PublicVirtualFixedIPs:
     default: []
-    description: |
+    description: >
         Control the IP allocation for the PublicVirtualInterface port. E.g.
         [{'ip_address':'1.2.3.4'}]
     type: json
@@ -283,6 +327,12 @@ parameters:
     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:
     type: OS::Neutron::Port
@@ -295,6 +345,10 @@ resources:
     type: OS::Heat::RandomString
     properties:
       length: 10
+  MysqlRootPassword:
+    type: OS::Heat::RandomString
+    properties:
+      length: 10
   PublicVirtualIP:
     type: OS::Neutron::Port
     properties:
@@ -308,46 +362,71 @@ resources:
       length: 20
       salt:
         get_param: RabbitCookieSalt
-  NovaCompute0Deploy:
+  NovaCompute0Deployment:
     type: FileInclude
     Path: nova-compute-instance.yaml
-    SubKey: resources.NovaCompute0Deploy
+    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: {list_join: ['', ['mysql://nova:unset@', {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}, '/nova']]}
-        CeilometerDSN: {list_join: ['', ['mysql://ceilometer:unset@', {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}, '/ceilometer']]}
-        NeutronDSN: {list_join: ['', ['mysql://neutron:unset@', {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}, '/ovs_neutron']]}
+        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:
             get_param: NeutronFlatNetworks
-        NeutronNetworkVLANRanges: ""
+        NeutronNetworkVLANRanges:
+            get_param: NeutronNetworkVLANRanges
         NeutronPhysicalBridge:
             get_param: HypervisorNeutronPhysicalBridge
         NeutronPublicInterface:
             get_param: HypervisorNeutronPublicInterface
         NeutronBridgeMappings:
             get_param: NeutronBridgeMappings
-  NovaCompute0AllNodes:
+  NovaCompute0AllNodesDeployment:
     type: FileInclude
     Path: nova-compute-instance.yaml
-    SubKey: resources.NovaCompute0AllNodesDeploy
+    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}
-  NovaCompute0:
+  NovaCompute0PassthroughSpecific:
     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:
@@ -368,14 +447,21 @@ resources:
               - 0
               - Merge::Map:
                   controller0:
-                  - Fn::Select:
+                  - get_attr:
+                    - controller0
                     - name
-                    - get_attr:
-                      - controller0
-                      - show
           nodeid: {get_input: bootstack_nodeid}
+        database:
+          host: &database_host
+            {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
         cinder:
-          db: mysql://cinder:unset@localhost/cinder
+          db:
+            Fn::Join:
+              - ''
+              - - mysql://cinder:unset@
+                - *database_host
+                - /cinder
+          debug: {get_param: Debug}
           volume_size_mb:
             get_param: CinderLVMLoopDeviceSize
           service-password:
@@ -400,7 +486,13 @@ resources:
           registry:
             host: {get_input: controller_virtual_ip}
           backend: swift
-          db: mysql://glance:unset@localhost/glance
+          db:
+            Fn::Join:
+              - ''
+              - - mysql://glance:unset@
+                - *database_host
+                - /glance
+          debug: {get_param: Debug}
           host:
             get_input: controller_virtual_ip
           port:
@@ -422,7 +514,13 @@ resources:
           admin_tenant_name: service
           admin_user: heat
           auth_encryption_key: unset___________
-          db: mysql://heat:unset@localhost/heat
+          db:
+            Fn::Join:
+              - ''
+              - - 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}
@@ -433,9 +531,15 @@ resources:
               nodes:
                 Merge::Map:
                   controller0:
-                    {get_attr: [controller0, show, name]}
+                    {get_attr: [controller0, name]}
         keystone:
-          db: mysql://keystone:unset@localhost/keystone
+          db:
+            Fn::Join:
+              - ''
+              - - mysql://keystone:unset@
+                - *database_host
+                - /keystone
+          debug: {get_param: Debug}
           host:
             get_input: controller_virtual_ip
           ca_certificate: {get_param: KeystoneCACertificate}
@@ -443,16 +547,19 @@ resources:
           signing_certificate: {get_param: KeystoneSigningCertificate}
         mysql:
           innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
+          local_bind: true
+          root-password: {get_resource: MysqlRootPassword}
           nodes:
             Merge::Map:
               controller0:
                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
           cluster_name:
-            list_join:
+            Fn::Join:
               - '-'
               - - '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
@@ -460,6 +567,7 @@ resources:
             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
@@ -467,15 +575,28 @@ resources:
               get_param: NeutronPublicInterfaceRawDevice
             public_interface_route:
               get_param: NeutronPublicInterfaceDefaultRoute
+            public_interface_tag:
+              get_param: NeutronPublicInterfaceTag
             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:
             get_param: NeutronPassword
           dnsmasq-options:
             get_param: NeutronDnsmasqOptions
         ceilometer:
-          db: mysql://ceilometer:unset@localhost/ceilometer
+          db:
+            Fn::Join:
+              - ''
+              - - mysql://ceilometer:unset@
+                - *database_host
+                - /ceilometer
+          debug: {get_param: Debug}
           metering_secret: {get_param: CeilometerMeteringSecret}
           service-password:
             get_param: CeilometerPassword
@@ -487,7 +608,12 @@ resources:
             get_param: SnmpdReadonlyUserPassword
         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}
@@ -550,7 +676,7 @@ resources:
             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:
@@ -586,6 +712,13 @@ resources:
             - name: heat_cfn
               port: 8000
               net_binds: *public_binds
+            - name: mysql
+              port: 3306
+              extra_server_params:
+                - backup
+              options:
+                - timeout client 0
+                - timeout server 0
             - name: nova_ec2
               port: 8773
             - name: nova_osapi
@@ -610,6 +743,11 @@ resources:
     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:
@@ -624,10 +762,11 @@ resources:
       networks:
         - network: ctlplane
       user_data_format: SOFTWARE_CONFIG
-  controller0AllNodes:
-    depends_on: [controller0Deployment,controller0SSLDeployment,controller0Swift,controller0Passthrough]
+  controller0AllNodesDeployment:
+    depends_on: [controller0Deployment,controller0SSLDeployment,controller0Swift,controller0PassthroughSpecific]
     type: OS::Heat::StructuredDeployment
     properties:
+      signal_transport: {get_param: DefaultSignalTransport}
       config: {get_resource: allNodesConfig}
       server: {get_resource: controller0}
   controller0Deployment:
@@ -637,24 +776,24 @@ resources:
       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]}
         heat.watch_server_url:
-          list_join:
+          Fn::Join:
             - ''
             - - 'http://'
               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
               - ':8003'
         heat.metadata_server_url:
-          list_join:
+          Fn::Join:
             - ''
             - - 'http://'
               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
               - ':8000'
         heat.waitcondition_server_url:
-          list_join:
+          Fn::Join:
             - ''
             - - 'http://'
               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
@@ -665,40 +804,64 @@ resources:
       config:
         completion-signal: {get_input: deploy_signal_id}
         hosts:
-          list_join:
+          Fn::Join:
           - "\n"
-          - - list_join:
+          - - Fn::Join:
               - "\n"
               - Merge::Map:
                   NovaCompute0:
-                    list_join:
+                    Fn::Join:
                     - ' '
                     - - {get_attr: [NovaCompute0, networks, ctlplane, 0]}
-                      - {get_attr: [NovaCompute0, show, name]}
-                      - list_join:
+                      - {get_attr: [NovaCompute0, name]}
+                      - Fn::Join:
                         - '.'
-                        - - {get_attr: [NovaCompute0, show, name]}
+                        - - {get_attr: [NovaCompute0, name]}
                           - 'novalocal'
-            - list_join:
+            - Fn::Join:
+              - "\n"
+              - Merge::Map:
+                  BlockStorage0:
+                    Fn::Join:
+                    - ' '
+                    - - {get_attr: [BlockStorage0, networks, ctlplane, 0]}
+                      - {get_attr: [BlockStorage0, name]}
+                      - Fn::Join:
+                        - '.'
+                        - - {get_attr: [BlockStorage0, name]}
+                          - 'novalocal'
+            - Fn::Join:
+              - "\n"
+              - Merge::Map:
+                  SwiftStorage0:
+                    Fn::Join:
+                    - ' '
+                    - - {get_attr: [SwiftStorage0, networks, ctlplane, 0]}
+                      - {get_attr: [SwiftStorage0, name]}
+                      - Fn::Join:
+                        - '.'
+                        - - {get_attr: [SwiftStorage0, name]}
+                          - 'novalocal'
+            - Fn::Join:
               - "\n"
               - Merge::Map:
                   controller0:
-                    list_join:
+                    Fn::Join:
                     - ' '
                     - - {get_attr: [controller0, networks, ctlplane, 0]}
-                      - {get_attr: [controller0, show, name]}
-                      - list_join:
+                      - {get_attr: [controller0, name]}
+                      - Fn::Join:
                         - '.'
-                        - - {get_attr: [controller0, show, name]}
+                        - - {get_attr: [controller0, name]}
                           - 'novalocal'
                       - {get_param: CloudName}
         rabbit:
           nodes:
-            list_join:
+            Fn::Join:
               - ','
               - Merge::Map:
                   controller0:
-                    {get_attr: [controller0, show, name]}
+                    {get_attr: [controller0, name]}
   controller0SSLDeployment:
     type: OS::Heat::StructuredDeployment
     properties:
@@ -718,11 +881,20 @@ resources:
       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
     value:
-      list_join:
+      Fn::Join:
       - ''
       - - http://
         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}