Add back Heat conditions in upgrade workflow
authorGiulio Fidente <gfidente@redhat.com>
Tue, 4 Apr 2017 15:49:46 +0000 (17:49 +0200)
committerCarlos Camacho <ccamacho@redhat.com>
Wed, 3 May 2017 18:25:11 +0000 (20:25 +0200)
By adding back the conditions we avoid the deployment of unneded
software configs on nodes where we don't have any upgrade task to
run, speeding up the upgrade process.

Related-Bug: #1679486
Related-Bug: #1678101
Change-Id: I5c8b0c4abfc0607f42fd3f2da9f5ef2702b1bbe1

puppet/major_upgrade_steps.j2.yaml

index 2809277..d07da56 100644 (file)
@@ -32,6 +32,20 @@ parameters:
     type: string
     hidden: true
 
+conditions:
+  # Conditions to disable any steps where the task list is empty
+  {%- for role in roles %}
+  {{role.name}}UpgradeBatchConfigEnabled:
+    not:
+      equals:
+        - {get_param: [role_data, {{role.name}}, upgrade_batch_tasks]}
+        - []
+  {{role.name}}UpgradeConfigEnabled:
+    not:
+      equals:
+        - {get_param: [role_data, {{role.name}}, upgrade_tasks]}
+        - []
+  {%- endfor %}
 
 resources:
 
@@ -89,22 +103,23 @@ resources:
   {%- for role in roles %}
   {{role.name}}UpgradeBatchConfig_Step{{step}}:
     type: OS::TripleO::UpgradeConfig
-  {%- if step > 0 %}
-    {%- if role in enabled_roles %}
+    condition: {{role.name}}UpgradeBatchConfigEnabled
+    {%- if step > 0 %}
     depends_on:
-      - {{role.name}}UpgradeBatch_Step{{step -1}}
-    {%- endif %}
-  {%- else %}
+      {%- for role_inside in enabled_roles %}
+      - {{role_inside.name}}UpgradeBatch_Step{{step -1}}
+      {%- endfor %}
+    {% else %}
     {% for role in roles if role.disable_upgrade_deployment|default(false) %}
       {% if deliver_script.update({'deliver': True}) %} {% endif %}
     {% endfor %}
     {% if deliver_script.deliver %}
     depends_on:
-    {% endif %}
       {% for dep in roles if dep.disable_upgrade_deployment|default(false) %}
       - {{dep.name}}DeliverUpgradeScriptDeployment
       {% endfor %}
-  {% endif %}
+    {% endif %}
+    {% endif %}
     properties:
       UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_batch_tasks]}
       step: {{step}}
@@ -114,19 +129,29 @@ resources:
   {%- for role in enabled_roles %}
   {{role.name}}UpgradeBatch_Step{{step}}:
     type: OS::Heat::SoftwareDeploymentGroup
+    condition: {{role.name}}UpgradeBatchConfigEnabled
     {%- if step > 0 %}
     depends_on:
       {%- for role_inside in enabled_roles %}
       - {{role_inside.name}}UpgradeBatch_Step{{step -1}}
       {%- endfor %}
-    {%- endif %}
+    {% else %}
+    {% for role in roles if role.disable_upgrade_deployment|default(false) %}
+      {% if deliver_script.update({'deliver': True}) %} {% endif %}
+    {% endfor %}
+    {% if deliver_script.deliver %}
+    depends_on:
+      {% for dep in roles if dep.disable_upgrade_deployment|default(false) %}
+      - {{dep.name}}DeliverUpgradeScriptDeployment
+      {% endfor %}
+    {% endif %}
+    {% endif %}
     update_policy:
       batch_create:
         max_batch_size: {{role.upgrade_batch_size|default(1)}}
       rolling_update:
         max_batch_size: {{role.upgrade_batch_size|default(1)}}
     properties:
-      name: {{role.name}}UpgradeBatch_Step{{step}}
       servers: {get_param: [servers, {{role.name}}]}
       config: {get_resource: {{role.name}}UpgradeBatchConfig_Step{{step}}}
       input_values:
@@ -167,16 +192,19 @@ resources:
   {%- for role in roles %}
   {{role.name}}UpgradeConfig_Step{{step}}:
     type: OS::TripleO::UpgradeConfig
-  # The UpgradeConfig resources could actually be created without
-  # serialization, but the event output is easier to follow if we
-  # do, and there should be minimal performance hit (creating the
-  # config is cheap compared to the time to apply the deployment).
-  {%- if step > 0 %}
-    {%- if role in enabled_roles %}
+    condition: {{role.name}}UpgradeConfigEnabled
+    # The UpgradeConfig resources could actually be created without
+    # serialization, but the event output is easier to follow if we
+    # do, and there should be minimal performance hit (creating the
+    # config is cheap compared to the time to apply the deployment).
     depends_on:
-      - {{role.name}}Upgrade_Step{{step -1}}
-    {%- endif %}
-  {%- endif %}
+      {%- for role_inside in enabled_roles %}
+      {%- if step > 0 %}
+      - {{role_inside.name}}Upgrade_Step{{step -1}}
+      {%- else %}
+      - {{role_inside.name}}UpgradeBatch_Step{{batch_upgrade_steps_max -1}}
+      {%- endif %}
+      {%- endfor %}
     properties:
       UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_tasks]}
       step: {{step}}
@@ -186,22 +214,16 @@ resources:
   {%- for role in enabled_roles %}
   {{role.name}}Upgrade_Step{{step}}:
     type: OS::Heat::SoftwareDeploymentGroup
-    {%- if step > 0 %}
-    # Make sure we wait that all roles have finished their own
-    # previous step before going to the next, so we can guarantee
-    # state for each steps.
+    condition: {{role.name}}UpgradeConfigEnabled
     depends_on:
       {%- for role_inside in enabled_roles %}
+      {%- if step > 0 %}
       - {{role_inside.name}}Upgrade_Step{{step -1}}
-      {%- endfor %}
-    {%- else %}
-    depends_on:
-      {%- for role_inside in enabled_roles %}
+      {%- else %}
       - {{role_inside.name}}UpgradeBatch_Step{{batch_upgrade_steps_max -1}}
+      {%- endif %}
       {%- endfor %}
-    {%- endif %}
     properties:
-      name: {{role.name}}Upgrade_Step{{step}}
       servers: {get_param: [servers, {{role.name}}]}
       config: {get_resource: {{role.name}}UpgradeConfig_Step{{step}}}
       input_values: