Merge "Add IP to HAProxy kind=Optional constraint"
[apex-tripleo-heat-templates.git] / puppet / controller-post-puppet.yaml
index 72b3579..49cbe1e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: 2015-04-30
 
 description: >
   OpenStack controller node post deployment for Puppet.
@@ -6,92 +6,39 @@ description: >
 parameters:
   servers:
     type: json
+  NodeConfigIdentifiers:
+     type: json
+     description: Value which changes if the node configuration may need to be re-applied
 
-resources:
 
-  # NOTE(dprince): this example uses a composition class
-  # on the puppet side (loadbalancer.pp). This seemed like the
-  # cleanest way to encapulate the puppet resources definitions
-  # for HAProxy and Keepalived.
-  ControllerLoadbalancerPuppetConfig:
-    type: OS::Heat::SoftwareConfig
-    properties:
-      group: puppet
-      options:
-        enable_hiera: True
-        enable_facter: False
-      inputs:
-      - name: tripleo::loadbalancer::keystone_admin
-        default: true
-      - name: tripleo::loadbalancer::keystone_public
-        default: true
-      - name: tripleo::loadbalancer::neutron
-        default: true
-      - name: tripleo::loadbalancer::cinder
-        default: true
-      - name: tripleo::loadbalancer::glance_api
-        default: true
-      - name: tripleo::loadbalancer::glance_registry
-        default: true
-      - name: tripleo::loadbalancer::nova_ec2
-        default: true
-      - name: tripleo::loadbalancer::nova_osapi
-        default: true
-      - name: tripleo::loadbalancer::nova_metadata
-        default: true
-      - name: tripleo::loadbalancer::nova_novncproxy
-        default: true
-      - name: tripleo::loadbalancer::mysql
-        default: true
-      - name: tripleo::loadbalancer::rabbitmq
-        default: true
-      - name: tripleo::loadbalancer::swift_proxy_server
-        default: true
-      - name: tripleo::loadbalancer::ceilometer
-        default: true
-      - name: tripleo::loadbalancer::heat_api
-        default: true
-      - name: tripleo::loadbalancer::heat_cloudwatch
-        default: true
-      - name: tripleo::loadbalancer::heat_cfn
-        default: true
-      outputs:
-      - name: result
-      config:
-        get_file: manifests/loadbalancer.pp
-
-  ControllerLoadbalancerPuppetDeployment:
-    type: OS::Heat::SoftwareDeployments
-    properties:
-      name: puppet_1
-      servers:  {get_param: servers}
-      config: {get_resource: ControllerLoadbalancerPuppetConfig}
+resources:
 
   ControllerPuppetConfig:
-    type: OS::Heat::SoftwareConfig
-    properties:
-      group: puppet
-      options:
-        enable_hiera: True
-        enable_facter: False
-      inputs:
-      - name: step
-      outputs:
-      - name: result
-      config:
-        get_file: manifests/overcloud_controller.pp
+    type: OS::TripleO::ControllerConfig
 
   # Step through a series of Puppet runs using the same manifest.
-  # NOTE(dprince): Heat breakpoints would make for a really cool way to step
-  # through breakpoints in a controlled manner across the entire cluster
-  ControllerPuppetDeploymentServicesBase:
+  # NOTE: To enable stepping through the deployments via heat hooks,
+  # you must observe the glob naming defined in overcloud-steps.yaml
+  # e.g all Deployment resources should have a *Deployment_StepN suffix
+  ControllerLoadBalancerDeployment_Step1:
     type: OS::Heat::StructuredDeployments
     properties:
-      name: puppet_2
       servers:  {get_param: servers}
       config: {get_resource: ControllerPuppetConfig}
       input_values:
         step: 1
+        update_identifier: {get_param: NodeConfigIdentifiers}
+      actions: ['CREATE'] # no need for two passes on an UPDATE
+
+  ControllerServicesBaseDeployment_Step2:
+    type: OS::Heat::StructuredDeployments
+    depends_on: ControllerLoadBalancerDeployment_Step1
+    properties:
+      servers:  {get_param: servers}
+      config: {get_resource: ControllerPuppetConfig}
+      input_values:
+        step: 2
+        update_identifier: {get_param: NodeConfigIdentifiers}
       actions: ['CREATE'] # no need for two passes on an UPDATE
 
   ControllerRingbuilderPuppetConfig:
@@ -107,18 +54,49 @@ resources:
       config:
         get_file: manifests/ringbuilder.pp
 
-  ControllerRingbuilderPuppetDeployment:
+  ControllerRingbuilderDeployment_Step3:
     type: OS::Heat::StructuredDeployments
+    depends_on: ControllerServicesBaseDeployment_Step2
     properties:
-      name: puppet_3
       servers:  {get_param: servers}
       config: {get_resource: ControllerRingbuilderPuppetConfig}
+      input_values:
+        update_identifier: {get_param: NodeConfigIdentifiers}
 
-  ControllerPuppetDeploymentOvercloudServices:
+  ControllerOvercloudServicesDeployment_Step4:
     type: OS::Heat::StructuredDeployments
+    depends_on: ControllerRingbuilderDeployment_Step3
     properties:
-      name: puppet_4
       servers:  {get_param: servers}
       config: {get_resource: ControllerPuppetConfig}
       input_values:
-        step: 2
+        step: 3
+        update_identifier: {get_param: NodeConfigIdentifiers}
+
+  ControllerOvercloudServicesDeployment_Step5:
+    type: OS::Heat::StructuredDeployments
+    depends_on: ControllerOvercloudServicesDeployment_Step4
+    properties:
+      servers:  {get_param: servers}
+      config: {get_resource: ControllerPuppetConfig}
+      input_values:
+        step: 4
+        update_identifier: {get_param: NodeConfigIdentifiers}
+
+  ControllerOvercloudServicesDeployment_Step6:
+    type: OS::Heat::StructuredDeployments
+    depends_on: ControllerOvercloudServicesDeployment_Step5
+    properties:
+      servers:  {get_param: servers}
+      config: {get_resource: ControllerPuppetConfig}
+      input_values:
+        step: 5
+        update_identifier: {get_param: NodeConfigIdentifiers}
+
+  # Note, this should come last, so use depends_on to ensure
+  # this is created after any other resources.
+  ExtraConfig:
+    depends_on: ControllerOvercloudServicesDeployment_Step5
+    type: OS::TripleO::NodeExtraConfigPost
+    properties:
+        servers: {get_param: servers}