Merge "Restore rabbit.host and add an haproxy rabbit listener"
[apex-tripleo-heat-templates.git] / undercloud-source.yaml
index f18612c..ef8d7cd 100644 (file)
-Description: All-in-one baremetal OpenStack and all dependencies.
-HeatTemplateFormatVersion: '2012-12-12'
-Parameters:
+description: All-in-one baremetal OpenStack and all dependencies.
+heat_template_version: 2014-10-16
+parameters:
   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:
-    Default: unset
-    Description: The keystone auth secret.
-    Type: String
-    NoEcho: true
+    default: unset
+    description: The keystone auth secret.
+    type: string
+    hidden: true
+  CinderLVMLoopDeviceSize:
+    default: 5000
+    description: The size of the loopback file used by the cinder LVM driver.
+    type: number
   BaremetalArch:
-    Default: i386
-    Description: The architecture to use in Nova-BM - i386 or amd64.
-    Type: String
+    default: i386
+    description: The architecture to use in Nova-BM - i386 or amd64.
+    type: string
+  CeilometerMeteringSecret:
+    default: unset
+    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
+  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
+  ExtraConfig:
+    default: {}
+    description: |
+      Additional configuration to inject into the cluster. The JSON should have
+      the following structure:
+        {"FILEKEY":
+          {"config:
+            [{"section": "SECTIONNAME",
+              "values":
+               [{"option": "OPTIONNAME",
+                  "value": "VALUENAME"
+                }
+               ]
+             }
+            ]
+          }
+        }
+      For instance:
+        {"nova":
+          {"config":
+            [{"section": "default",
+              "values":
+                [{"option": "compute_manager",
+                  "value": "ironic.nova.compute.manager.ClusterComputeManager"
+                 }
+                ]
+             },
+             {"section": "cells",
+              "values":
+                [{"option": "driver",
+                  "value": "nova.cells.rpc_driver.CellsRPCDriver"
+                 }
+                ]
+             }
+            ]
+          }
+        }
+    type: json
   Flavor:
-    Default: baremetal
-    Description: Flavor to request when deploying.
-    Type: String
+    default: baremetal
+    description: Flavor to request when deploying.
+    type: string
+  GlancePort:
+   default: 9292
+   description: Glance port.
+   type: string
+  GlanceProtocol:
+   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
-    NoEcho: true
+    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
+    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: ''
+    description: The filepath of the file to use for logging messages from Glance.
+    type: string
+    default: ''
   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
   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:
+    default: REBUILD_PRESERVE_EPHEMERAL
+    description: What policy to use when reconstructing instances. REBUILD for rebuilds,
+      REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
+    type: string
   undercloudImage:
-    Default: undercloud
-    Type: String
+    default: undercloud
+    type: string
   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
   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
+  NeutronPublicInterfaceDefaultRoute:
+    default: ''
+    description: A custom default route for the NeutronPublicInterface.
+    type: string
+  NeutronPublicInterfaceIP:
+    default: ''
+    description: A custom IP address to put onto the NeutronPublicInterface.
+    type: string
+  NeutronPublicInterfaceRawDevice:
+    default: ''
+    description: If set, the public interface is a vlan with this device as the raw device.
+    type: string
+  NtpServer:
+    type: string
+    default: ''
   RabbitUserName:
-    Default: guest
-    Description: The username for RabbitMQ
-    Type: String
+    default: guest
+    description: The username for RabbitMQ
+    type: string
   RabbitPassword:
-    Default: guest
-    Description: The password for RabbitMQ
-    Type: String
-    NoEcho: true
+    default: guest
+    description: The password for RabbitMQ
+    type: string
+    hidden: true
   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:
-    Description: Password for heat_domain_admin user.
-    Type: String
-    Default: ''
-    NoEcho: true
-Resources:
+    description: Password for heat_domain_admin user.
+    type: string
+    default: ''
+    hidden: true
+  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
+  KeystoneCACertificate:
+    default: ''
+    description: Keystone self-signed certificate authority certificate.
+    type: string
+  KeystoneSigningCertificate:
+    default: ''
+    description: Keystone certificate for verifying token validity.
+    type: string
+  KeystoneSigningKey:
+    default: ''
+    description: Keystone key for signing tokens.
+    type: string
+    hidden: true
+resources:
   RabbitCookie:
-    Type: OS::Heat::RandomString
-    Properties:
+    type: OS::Heat::RandomString
+    properties:
       length: 20
       salt:
-        Ref: RabbitCookieSalt
-  AccessPolicy:
-    Properties:
-      AllowedResources:
-      - undercloudConfig
-    Type: OS::Heat::AccessPolicy
-  notCompute0Key:
-    Properties:
-      UserName:
-        Ref: User
-    Type: AWS::IAM::AccessKey
-  notCompute0CompletionCondition:
-    Type: AWS::CloudFormation::WaitCondition
-    DependsOn: undercloud
-    Properties:
-      Handle: {Ref: notCompute0CompletionHandle}
-      Count: '1'
-      Timeout: '1800'
-  notCompute0CompletionHandle:
-    Type: AWS::CloudFormation::WaitConditionHandle
-  User:
-    Properties:
-      Policies:
-      - Ref: AccessPolicy
-    Type: AWS::IAM::User
+        get_param: RabbitCookieSalt
   undercloudConfig:
-    Type: AWS::AutoScaling::LaunchConfiguration
-    Properties:
-      ImageId: '0'
-      InstanceType: foo
-    Metadata:
-      OpenStack::Role: undercloudConfig
-      OpenStack::Heat::Stack: {}
-      OpenStack::ImageBuilder::Elements: [ boot-stack, heat-cfntools, neutron-network-node ]
-      admin-password:
-        Ref: AdminPassword
-      admin-token: 
-        Ref: AdminToken
-      controller-address:
-        Fn::Select:
-          - 0
-          - Fn::Select:
-            - "ctlplane"
-            - Fn::GetAtt:
-              - undercloud
-              - networks
-      cinder:
-        db: mysql://cinder:unset@localhost/cinder
-        volume_size_mb: '5000'
-      completion-handle:
-        Ref: notCompute0CompletionHandle
-      db-password: unset
-      glance:
-        backend: file
-        db: mysql://glance:unset@localhost/glance
-        host: 127.0.0.1
-        service-password:
-          Ref: GlancePassword
-        notifier-strategy:
-          Ref: GlanceNotifierStrategy
-        log-file:
-          Ref: GlanceLogFile
-      heat:
-        admin_password:
-          Ref: HeatPassword
-        admin_tenant_name: service
-        admin_user: heat
-        auth_encryption_key: unset___________
-        db: mysql://heat:unset@localhost/heat
-        stack_domain_admin_password: {Ref: HeatStackDomainAdminPassword}
-        watch_server_url:
-          Fn::Join:
-            - ''
-            - - http://
-              - Fn::Select:
-                  - 0
-                  - Fn::Select:
-                    - "ctlplane"
-                    - Fn::GetAtt:
-                      - undercloud
-                      - networks
-              - ":8003"
-        metadata_server_url:
-          Fn::Join:
-            - ''
-            - - http://
-              - Fn::Select:
-                  - 0
-                  - Fn::Select:
-                    - "ctlplane"
-                    - Fn::GetAtt:
-                      - undercloud
-                      - networks
-              - ":8000"
-        waitcondition_server_url:
-          Fn::Join:
-            - ''
-            - - http://
-              - Fn::Select:
-                  - 0
+    type: OS::Heat::StructuredConfig
+    properties:
+      config:
+        completion-signal: {get_input: deploy_signal_id}
+        admin-password:
+          get_param: AdminPassword
+        admin-token:
+          get_param: AdminToken
+        bootstrap_host:
+          bootstrap_nodeid:
+            Fn::Select:
+            - 0
+            - Fn::Select:
+              - 0
+              - Merge::Map:
+                  undercloud:
                   - Fn::Select:
-                    - "ctlplane"
-                    - Fn::GetAtt:
+                    - name
+                    - get_attr:
                       - undercloud
-                      - networks
-              - ":8000/v1/waitcondition"
-      os-collect-config:
-        cfn:
-          access_key_id:
-            Ref: notCompute0Key
-          path: undercloudConfig.Metadata
-          secret_access_key:
-            Fn::GetAtt:
-            - notCompute0Key
-            - SecretAccessKey
-          stack_name:
-            Ref: AWS::StackName
-      keystone:
-        db: mysql://keystone:unset@localhost/keystone
-        host: 127.0.0.1
-      neutron:
-        host: 127.0.0.1
-        ovs_db: mysql://neutron:unset@localhost/ovs_neutron?charset=utf8
-        ovs:
-          dnsmasq_range: [192.0.2.25, 192.0.2.44]
-          public_interface:
-            Ref: NeutronPublicInterface
-          physical_bridge: br-ctlplane
-          physical_network: ctlplane
-          network_vlan_ranges: ctlplane
-          bridge_mappings: ctlplane:br-ctlplane
-          tenant_network_type: vlan
-          enable_tunneling: 'False'
-        service-password:
-          Ref: NeutronPassword
-      rabbit:
-        host: 127.0.0.1
-        username:
-          Ref: RabbitUserName
-        password:
-          Ref: RabbitPassword
-        cookie:
-          Fn::GetAtt:
-          - RabbitCookie
-          - value
+                      - show
+          nodeid: {get_input: bootstack_nodeid}
+        bootstack:
+          public_interface_ip:
+            get_param: NeutronPublicInterfaceIP
+        controller-address:
+          get_input: controller_host
+        corosync:
+          bindnetaddr: {get_input: controller_host}
+          mcastport: 5577
+          nodes:
+            Merge::Map:
+              controller0:
+                ip: {get_attr: [undercloud, networks, ctlplane, 0]}
+        pacemaker:
+          stonith_enabled : false
+          recheck_interval : 5
+          quorum_policy : ignore
+        ceilometer:
+          db: mysql://ceilometer:unset@localhost/ceilometer
+          metering_secret: {get_param: CeilometerMeteringSecret}
+          snmpd_readonly_user_name:
+            get_param: SnmpdReadonlyUserName
+          snmpd_readonly_user_password:
+            get_param: SnmpdReadonlyUserPassword
+          service-password:
+            get_param: CeilometerPassword
+        db-password: unset
+        glance:
+          backend: file
+          db: mysql://glance:unset@localhost/glance
+          host: 127.0.0.1
+          port:
+            get_param: GlancePort
+          protocol:
+            get_param: GlanceProtocol
+          service-password:
+            get_param: GlancePassword
+          notifier-strategy:
+            get_param: GlanceNotifierStrategy
+          log-file:
+            get_param: GlanceLogFile
+        heat:
+          admin_password:
+            get_param: HeatPassword
+          admin_tenant_name: service
+          admin_user: heat
+          auth_encryption_key: unset___________
+          db: mysql://heat:unset@localhost/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}
+        keystone:
+          db: mysql://keystone:unset@localhost/keystone
+          host: 127.0.0.1
+          ca_certificate: {get_param: KeystoneCACertificate}
+          signing_key: {get_param: KeystoneSigningKey}
+          signing_certificate: {get_param: KeystoneSigningCertificate}
+        mysql:
+          innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
+        neutron:
+          host: 127.0.0.1
+          ovs_db: mysql://neutron:unset@localhost/ovs_neutron?charset=utf8
+          ovs:
+            public_interface:
+              get_param: NeutronPublicInterface
+            public_interface_raw_device:
+              get_param: NeutronPublicInterfaceRawDevice
+            public_interface_route:
+              get_param: NeutronPublicInterfaceDefaultRoute
+            physical_bridge: br-ctlplane
+            physical_network: ctlplane
+            network_vlan_ranges: ctlplane
+            bridge_mappings: ctlplane:br-ctlplane
+            tenant_network_type: vlan
+            enable_tunneling: 'False'
+          service-password:
+            get_param: NeutronPassword
+        rabbit:
+          host: 127.0.0.1
+          username:
+            get_param: RabbitUserName
+          password:
+            get_param: RabbitPassword
+          cookie:
+            get_attr:
+            - RabbitCookie
+            - value
+        ntp:
+          servers:
+            - {server: {get_param: NtpServer}, fudge: "stratum 0"}
+  undercloudPassthroughConfig:
+    type: OS::Heat::StructuredConfig
+    properties:
+      config: {get_input: passthrough_config}
   undercloud:
-    Type: OS::Nova::Server
-    Properties:
+    type: OS::Nova::Server
+    properties:
       image:
-        Ref: undercloudImage
+        get_param: undercloudImage
       flavor:
-        Ref: Flavor
+        get_param: Flavor
       key_name:
-        Ref: KeyName
-    Metadata:
-      os-collect-config:
-        cfn:
-          access_key_id:
-            Ref: notCompute0Key
-          path: undercloudConfig.Metadata
-          secret_access_key:
-            Fn::GetAtt:
-            - notCompute0Key
-            - SecretAccessKey
-          stack_name:
-            Ref: AWS::StackName
+        get_param: KeyName
+      image_update_policy:
+        get_param: ImageUpdatePolicy
+      networks:
+        - network: ctlplane
+      user_data_format: SOFTWARE_CONFIG
+  99_undercloudDeployment:
+    type: OS::Heat::StructuredDeployment
+    properties:
+      config: {get_resource: undercloudConfig}
+      server: {get_resource: undercloud}
+      input_values:
+        bootstack_nodeid:
+          get_attr:
+          - undercloud
+          - show
+          - name
+        controller_host:
+          get_attr:
+          - undercloud
+          - networks
+          - ctlplane
+          - 0
+        heat.watch_server_url:
+          list_join:
+            - ''
+            - - 'http://'
+              - get_attr: [undercloud, networks, ctlplane, 0]
+              - ':8003'
+        heat.metadata_server_url:
+          list_join:
+            - ''
+            - - 'http://'
+              - {get_attr: [undercloud, networks, ctlplane, 0]}
+              - ':8000'
+        heat.waitcondition_server_url:
+          list_join:
+            - ''
+            - - 'http://'
+              - {get_attr: [undercloud, networks, ctlplane, 0]}
+              - ':8000/v1/waitcondition'
+  00_undercloudPassthroughDeployment:
+    type: OS::Heat::StructuredDeployment
+    properties:
+      config: {get_resource: undercloudPassthroughConfig}
+      server: {get_resource: undercloud}
+      signal_transport: NO_SIGNAL
+      input_values:
+        passthrough_config: {get_param: ExtraConfig}