Adds post_upgrade_tasks for any service post-upgrade ansible tasks
authormarios <marios@redhat.com>
Tue, 15 Aug 2017 13:41:04 +0000 (16:41 +0300)
committermarios <marios@redhat.com>
Wed, 20 Sep 2017 11:26:05 +0000 (14:26 +0300)
This adds a new config/deployment per role that will come after any
post deploy steps. It drives the same ansible config as the
upgrade_tasks but instead collects the post_upgrade_tasks for any
service in the given role.

The workflow is upgrade_tasks, then post deploy steps (either
puppet/ or docker/ depending on the env) and then the
post_upgrade_tasks added here.

This is added to the pacemaker/cinder-volume.yaml service for now
see the bug below for more info

Change-Id: Iced34fecf02ebddc91df9302de54d2f4c2cab680
Closes-Bug: 1706951
(cherry picked from commit 2e182bffeeb099cb5e0b1747086fb0e0f57b7b5d)

common/major_upgrade_steps.j2.yaml
common/services.yaml
puppet/services/pacemaker/cinder-volume.yaml
releasenotes/notes/adds-post_upgrade_tasks-eba0656012c861a1.yaml [new file with mode: 0644]
tools/yaml-validate.py

index 5eb93d3..36b342f 100644 (file)
@@ -187,6 +187,43 @@ resources:
       role_data: {get_param: role_data}
       ctlplane_service_ips: {get_param: ctlplane_service_ips}
 
+{%- for step in range(0, upgrade_steps_max) %}
+  {%- for role in roles %}
+  {{role.name}}PostUpgradeConfig_Config{{step}}:
+    type: OS::TripleO::UpgradeConfig
+    depends_on:
+      {%- for role_inside in enabled_roles %}
+      {%- if step > 0 %}
+      - {{role_inside.name}}PostUpgradeConfig_Deployment{{step -1}}
+      {%- else %}
+      - AllNodesPostUpgradeSteps
+      {%- endif %}
+      {%- endfor %}
+    properties:
+      UpgradeStepConfig: {get_param: [role_data, {{role.name}}, post_upgrade_tasks]}
+      step: {{step}}
+  {%- endfor %}
+
+  {%- for role in enabled_roles %}
+  {{role.name}}PostUpgradeConfig_Deployment{{step}}:
+    type: OS::Heat::SoftwareDeploymentGroup
+    depends_on:
+      {%- for role_inside in enabled_roles %}
+      {%- if step > 0 %}
+      - {{role_inside.name}}PostUpgradeConfig_Deployment{{step -1}}
+      {%- else %}
+      - AllNodesPostUpgradeSteps
+      {%- endif %}
+      {%- endfor %}
+    properties:
+      servers: {get_param: [servers, {{role.name}}]}
+      config: {get_resource: {{role.name}}PostUpgradeConfig_Config{{step}}}
+      input_values:
+        role: {{role.name}}
+        update_identifier: {get_param: UpdateIdentifier}
+  {%- endfor %}
+{%- endfor %}
+
 outputs:
   # Output the config for each role, just use Step1 as the config should be
   # the same for all steps (only the tag provided differs)
index a8186e4..b55a5c4 100644 (file)
@@ -193,6 +193,16 @@ resources:
           expression: coalesce($.data, []).where($ != null).select($.get('upgrade_tasks')).where($ != null).flatten().distinct()
           data: {get_attr: [ServiceChain, role_data]}
 
+  PostUpgradeTasks:
+    type: OS::Heat::Value
+    properties:
+      type: comma_delimited_list
+      value:
+        yaql:
+          # Note we use distinct() here to filter any identical tasks, e.g yum update for all services
+          expression: coalesce($.data, []).where($ != null).select($.get('post_upgrade_tasks')).where($ != null).flatten().distinct()
+          data: {get_attr: [ServiceChain, role_data]}
+
   UpdateTasks:
     type: OS::Heat::Value
     properties:
@@ -263,6 +273,7 @@ outputs:
       service_workflow_tasks: {get_attr: [ServiceWorkflowTasks, value]}
       step_config: {get_attr: [PuppetStepConfig, value]}
       upgrade_tasks: {get_attr: [UpgradeTasks, value]}
+      post_upgrade_tasks: {get_attr: [PostUpgradeTasks, value]}
       update_tasks: {get_attr: [UpdateTasks, value]}
       upgrade_batch_tasks: {get_attr: [UpgradeBatchTasks, value]}
       service_metadata_settings: {get_attr: [ServiceServerMetadataHook, metadata]}
index f467587..cbbf2ea 100644 (file)
@@ -66,17 +66,9 @@ outputs:
             resource: openstack-cinder-volume
             state: disable
             wait_for_resource: true
-        - name: get bootstrap nodeid
-          tags: step5
-          command: hiera bootstrap_nodeid
-          register: bootstrap_node
-        - block:
-          - name: Sync cinder DB
-            tags: step5
-            command: cinder-manage db sync
-          - name: Start cinder_volume service (pacemaker)
-            tags: step5
-            pacemaker_resource:
-              resource: openstack-cinder-volume
-              state: enable
-          when: bootstrap_node.stdout == ansible_hostname
+      post_upgrade_tasks:
+        - name: Start cinder_volume service (pacemaker)
+          tags: step1
+          pacemaker_resource:
+            resource: openstack-cinder-volume
+            state: enable
diff --git a/releasenotes/notes/adds-post_upgrade_tasks-eba0656012c861a1.yaml b/releasenotes/notes/adds-post_upgrade_tasks-eba0656012c861a1.yaml
new file mode 100644 (file)
index 0000000..bdce134
--- /dev/null
@@ -0,0 +1,12 @@
+---
+upgrade:
+  - |
+    This adds post_upgrade_tasks, ansible tasks that can be added to any
+    service manifest (currently, pacemaker/cinder-volume for bug 1706951).
+
+    These are similar to the existing upgrade_tasks in their format, however
+    they will be executed *after* the docker/puppet config. So the order is
+    upgrade_tasks, deployment steps (docker/puppet), then post_upgrade_tasks.
+
+    Also like the upgrade_tasks these are serialised and you can use 'tags'
+    with 'step0' to 'step6' (more can be added if needed).
index 682cb8d..e47c1fe 100755 (executable)
@@ -35,8 +35,9 @@ OPTIONAL_SECTIONS = ['service_workflow_tasks']
 REQUIRED_DOCKER_SECTIONS = ['service_name', 'docker_config', 'puppet_config',
                             'config_settings', 'step_config']
 OPTIONAL_DOCKER_SECTIONS = ['docker_puppet_tasks', 'upgrade_tasks',
-                            'service_config_settings', 'host_prep_tasks',
-                            'metadata_settings', 'kolla_config']
+                            'post_upgrade_tasks', 'service_config_settings',
+                            'host_prep_tasks', 'metadata_settings',
+                            'kolla_config']
 REQUIRED_DOCKER_PUPPET_CONFIG_SECTIONS = ['config_volume', 'step_config',
                                           'config_image']
 OPTIONAL_DOCKER_PUPPET_CONFIG_SECTIONS = [ 'puppet_tags', 'volumes' ]