summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/deploy-steps.j261
-rw-r--r--common/major_upgrade_steps.j2.yaml41
-rw-r--r--common/post-upgrade.j2.yaml2
-rw-r--r--common/services.yaml17
4 files changed, 92 insertions, 29 deletions
diff --git a/common/deploy-steps.j2 b/common/deploy-steps.j2
index 1119fb60..a1bd8826 100644
--- a/common/deploy-steps.j2
+++ b/common/deploy-steps.j2
@@ -1,7 +1,15 @@
# certain initialization steps (run in a container) will occur
# on the role marked as primary controller or the first role listed
-{%- set primary_role = [roles[0]] -%}
-{%- for role in roles -%}
+{%- if enabled_roles is not defined -%}
+ # On upgrade certain roles can be disabled for operator driven upgrades
+ # See major_upgrade_steps.j2.yaml and post-upgrade.j2.yaml
+ {%- set enabled_roles = roles -%}
+ {%- set is_upgrade = false -%}
+{%- else %}
+ {%- set is_upgrade = true -%}
+{%- endif -%}
+{%- set primary_role = [enabled_roles[0]] -%}
+{%- for role in enabled_roles -%}
{%- if 'primary' in role.tags and 'controller' in role.tags -%}
{%- set _ = primary_role.pop() -%}
{%- set _ = primary_role.append(role) -%}
@@ -55,10 +63,10 @@ conditions:
{% for step in range(1, deploy_steps_max) %}
WorkflowTasks_Step{{step}}_Enabled:
or:
- {%- for role in roles %}
+ {%- for role in enabled_roles %}
- not:
equals:
- - get_param: [role_data, {{role.name}}, service_workflow_tasks, step{{step}}]
+ - get_param: [role_data, {{role.name}}, workflow_tasks, step{{step}}]
- ''
- False
{%- endfor %}
@@ -90,30 +98,30 @@ resources:
_TASKS: {get_file: deploy-steps-tasks.yaml}
{%- for step in range(1, deploy_steps_max) %}
-# BEGIN service_workflow_tasks handling
+# BEGIN workflow_tasks handling
WorkflowTasks_Step{{step}}:
type: OS::Mistral::Workflow
condition: WorkflowTasks_Step{{step}}_Enabled
depends_on:
{%- if step == 1 %}
- {%- for dep in roles %}
+ {%- for dep in enabled_roles %}
- {{dep.name}}PreConfig
- {{dep.name}}ArtifactsDeploy
{%- endfor %}
{%- else %}
- {%- for dep in roles %}
+ {%- for dep in enabled_roles %}
- {{dep.name}}Deployment_Step{{step -1}}
{%- endfor %}
{%- endif %}
properties:
- name: {list_join: [".", ["tripleo", {get_param: stack_name}, "workflowtasks", "step{{step}}"]]}
+ name: {list_join: [".", ["tripleo", {get_param: stack_name}, "workflow_tasks", "step{{step}}"]]}
type: direct
tasks:
yaql:
expression: $.data.where($ != '').select($.get('step{{step}}')).where($ != null).flatten()
data:
- {%- for role in roles %}
- - get_param: [role_data, {{role.name}}, service_workflow_tasks]
+ {%- for role in enabled_roles %}
+ - get_param: [role_data, {{role.name}}, workflow_tasks]
{%- endfor %}
WorkflowTasks_Step{{step}}_Execution:
@@ -143,13 +151,14 @@ resources:
{%- endfor %}
evaluate_env: false
always_update: true
-# END service_workflow_tasks handling
+# END workflow_tasks handling
{% endfor %}
+# Artifacts config and HostPrepConfig is done on all roles, not only
+# enabled_roles, because on upgrade we need to write the json files
+# for the operator driven upgrade scripts (the ansible steps consume them)
{% for role in roles %}
- # Post deployment steps for all roles
- # A single config is re-applied with an incrementing step number
- # {{role.name}} Role steps
+ # Prepare host tasks for {{role.name}}
{{role.name}}ArtifactsConfig:
type: ../puppet/deploy-artifacts.yaml
@@ -183,7 +192,11 @@ resources:
tasks:
# Join host_prep_tasks with the other per-host configuration
list_concat:
+{%- if is_upgrade|default(false) and role.disable_upgrade_deployment|default(false) %}
+ - []
+{%- else %}
- {get_param: [role_data, {{role.name}}, host_prep_tasks]}
+{%- endif %}
-
{%- raw %}
# Write the manifest for baremetal puppet configuration
@@ -235,9 +248,10 @@ resources:
properties:
servers: {get_param: [servers, {{role.name}}]}
config: {get_resource: {{role.name}}HostPrepConfig}
+{% endfor %}
- # BEGIN CONFIG STEPS
-
+ # BEGIN CONFIG STEPS, only on enabled_roles
+{%- for role in enabled_roles %}
{{role.name}}PreConfig:
type: OS::TripleO::Tasks::{{role.name}}PreConfig
depends_on: {{role.name}}HostPrepDeployment
@@ -246,6 +260,8 @@ resources:
input_values:
update_identifier: {get_param: DeployIdentifier}
+ # Deployment steps for {{role.name}}
+ # A single config is re-applied with an incrementing step number
{% for step in range(1, deploy_steps_max) %}
{{role.name}}Deployment_Step{{step}}:
type: OS::TripleO::DeploymentSteps
@@ -257,12 +273,12 @@ resources:
# if https://bugs.launchpad.net/heat/+bug/1700569
# is fixed.
{%- if step == 1 %}
- {%- for dep in roles %}
+ {%- for dep in enabled_roles %}
- {{dep.name}}PreConfig
- {{dep.name}}ArtifactsDeploy
{%- endfor %}
{%- else %}
- {%- for dep in roles %}
+ {%- for dep in enabled_roles %}
- {{dep.name}}Deployment_Step{{step -1}}
{%- endfor %}
{%- endif %}
@@ -285,7 +301,7 @@ resources:
# after all the previous deployment steps.
{{role.name}}ExtraConfigPost:
depends_on:
- {%- for dep in roles %}
+ {%- for dep in enabled_roles %}
- {{dep.name}}Deployment_Step5
{%- endfor %}
type: OS::TripleO::NodeExtraConfigPost
@@ -298,7 +314,7 @@ resources:
{{role.name}}PostConfig:
type: OS::TripleO::Tasks::{{role.name}}PostConfig
depends_on:
- {%- for dep in roles %}
+ {%- for dep in enabled_roles %}
- {{dep.name}}ExtraConfigPost
{%- endfor %}
properties:
@@ -354,8 +370,3 @@ outputs:
with_sequence: start=0 end={{upgrade_steps_max-1}}
loop_control:
loop_var: step
- - include: deploy_steps_tasks.yaml
- with_sequence: start=0 end={{deploy_steps_max-1}}
- loop_control:
- loop_var: step
-
diff --git a/common/major_upgrade_steps.j2.yaml b/common/major_upgrade_steps.j2.yaml
index 7fc91153..36b342f9 100644
--- a/common/major_upgrade_steps.j2.yaml
+++ b/common/major_upgrade_steps.j2.yaml
@@ -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)
@@ -196,3 +233,7 @@ outputs:
{% for role in roles %}
{{role.name.lower()}}: {get_attr: [{{role.name}}UpgradeConfig_Step1, upgrade_config]}
{% endfor %}
+ RoleConfig:
+ description: Mapping of config data for all roles
+ value: {get_attr: [AllNodesPostUpgradeSteps, RoleConfig]}
+
diff --git a/common/post-upgrade.j2.yaml b/common/post-upgrade.j2.yaml
index 7cd6abdf..af47c6ea 100644
--- a/common/post-upgrade.j2.yaml
+++ b/common/post-upgrade.j2.yaml
@@ -1,4 +1,4 @@
# Note the include here is the same as post.j2.yaml but the data used at
# # the time of rendering is different if any roles disable upgrades
-{% set roles = roles|rejectattr('disable_upgrade_deployment')|list -%}
+{% set enabled_roles = roles|rejectattr('disable_upgrade_deployment')|list -%}
{% include 'deploy-steps.j2' %}
diff --git a/common/services.yaml b/common/services.yaml
index a8186e43..a0015c7e 100644
--- a/common/services.yaml
+++ b/common/services.yaml
@@ -174,13 +174,13 @@ resources:
expression: coalesce($.data.role_data, []).where($ != null).select($.get('service_config_settings')).where($ != null).reduce($1.mergeWith($2), {})
data: {role_data: {get_attr: [ServiceChain, role_data]}}
- ServiceWorkflowTasks:
+ WorkflowTasks:
type: OS::Heat::Value
properties:
type: json
value:
yaql:
- expression: coalesce($.data.role_data, []).where($ != null).select($.get('service_workflow_tasks')).where($ != null).reduce($1.mergeWith($2), {})
+ expression: coalesce($.data.role_data, []).where($ != null).select($.get('workflow_tasks')).where($ != null).reduce($1.mergeWith($2), {})
data: {role_data: {get_attr: [ServiceChain, role_data]}}
UpgradeTasks:
@@ -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:
@@ -260,9 +270,10 @@ outputs:
config_settings: {map_merge: {get_attr: [ServiceChain, role_data, config_settings]}}
global_config_settings: {get_attr: [GlobalConfigSettings, value]}
service_config_settings: {get_attr: [ServiceConfigSettings, value]}
- service_workflow_tasks: {get_attr: [ServiceWorkflowTasks, value]}
+ workflow_tasks: {get_attr: [WorkflowTasks, 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]}