From 26c55d15cd476f9705c3ce303dc7c08e7448c32c Mon Sep 17 00:00:00 2001 From: Lukas Bezdicka Date: Sat, 24 Feb 2018 22:40:28 +0100 Subject: [PATCH] FFU: Introduce post FFU steps and use them for qeens switch In last step of FFU we need to swich repos before running upgrade. We do so by introducing post FFU steps and running the switch in them. We also update heat agents and os-collect-config on nodes. Change-Id: I649afc6fa384ae21edc5bc917f8bb586350e5d47 --- common/deploy-steps.j2 | 33 +++++++++++++++++++++++---- common/services.yaml | 10 ++++++++ puppet/services/tripleo-packages.yaml | 25 ++++++++++++++++++-- tools/yaml-validate.py | 11 +++++++++ 4 files changed, 72 insertions(+), 7 deletions(-) diff --git a/common/deploy-steps.j2 b/common/deploy-steps.j2 index a6daf740c4..f0edd29af6 100644 --- a/common/deploy-steps.j2 +++ b/common/deploy-steps.j2 @@ -76,8 +76,8 @@ parameters: default: [] FastForwardUpgradeReleases: type: comma_delimited_list - default: ['ocata', 'pike'] - description: List of releases to fast forward through during upgrade. + default: ['ocata', 'pike', 'queens'] + description: List of releases to fast forward through during upgrade. Last release in list is used for post steps. conditions: {% for step in range(1, deploy_steps_max) %} @@ -565,10 +565,20 @@ outputs: - hosts: overcloud become: true tasks: + - set_fact: + releases: {get_param: [FastForwardUpgradeReleases]} +{% raw %} + - set_fact: + ffu_releases: "{{ releases | difference( releases | last )}}" - include_tasks: fast_forward_upgrade_release_tasks.yaml loop_control: loop_var: release - with_items: {get_param: [FastForwardUpgradeReleases]} + with_items: '{{ ffu_releases }}' + - set_fact: + release: "{{ releases | last }}" + ffu_packages_apply: True +{% endraw %} + - include_tasks: fast_forward_upgrade_post_role_tasks.yaml fast_forward_upgrade_release_tasks: | - include_tasks: fast_forward_upgrade_prep_tasks.yaml - include_tasks: fast_forward_upgrade_bootstrap_tasks.yaml @@ -593,9 +603,11 @@ outputs: tags: common command: hiera -c /etc/puppet/hiera.yaml bootstrap_nodeid register: bootstrap_node - - name: set is_bootstrap_node fact + - name: set is_bootstrap_node ffu_packages_bootstrap_only facts tags: common - set_fact: is_bootstrap_node={{bootstrap_node.stdout|lower == ansible_hostname|lower}} + set_fact: + is_bootstrap_node={{bootstrap_node.stdout|lower == ansible_hostname|lower}} + ffu_packages_apply={{bootstrap_node.stdout|lower == ansible_hostname|lower}} {% endraw %} - name: Create /var/lib/docker-puppet file: path=/var/lib/docker-puppet state=directory setype=svirt_sandbox_file_t selevel=s0 recurse=true @@ -605,6 +617,17 @@ outputs: with_sequence: start=0 end={{fast_forward_upgrade_prep_steps_max}} loop_control: loop_var: step + fast_forward_upgrade_post_role_tasks: | +{%- for role in roles %} + - include_tasks: {{role.name}}/fast_forward_post_upgrade_tasks.yaml + when: role_name == '{{role.name}}' +{%- endfor %} + - name: Openstack Heat Agents package update + yum: name=openstack-heat-agents state=latest + - name: Update os-collect-config + yum: name=os-collect-config state=latest + - name: Start os-collect-config back up + service: name=os-collect-config state=started enabled=yes fast_forward_upgrade_prep_role_tasks: | {%- for role in roles %} - include_tasks: {{role.name}}/fast_forward_upgrade_tasks.yaml diff --git a/common/services.yaml b/common/services.yaml index c197b05ff2..97e22ee5ac 100644 --- a/common/services.yaml +++ b/common/services.yaml @@ -253,6 +253,15 @@ resources: expression: coalesce($.data, []).where($ != null).select($.get('fast_forward_upgrade_tasks')).where($ != null).flatten().distinct() data: {get_attr: [ServiceChain, role_data]} + FastForwardPostUpgradeTasks: + type: OS::Heat::Value + properties: + type: comma_delimited_list + value: + yaql: + expression: coalesce($.data, []).where($ != null).select($.get('fast_forward_post_upgrade_tasks')).where($ != null).flatten().distinct() + data: {get_attr: [ServiceChain, role_data]} + UpgradeTasks: type: OS::Heat::Value properties: @@ -356,6 +365,7 @@ outputs: external_deploy_tasks: {get_attr: [ExternalDeployTasks, value]} external_post_deploy_tasks: {get_attr: [ExternalPostDeployTasks, value]} fast_forward_upgrade_tasks: {get_attr: [FastForwardUpgradeTasks, value]} + fast_forward_post_upgrade_tasks: {get_attr: [FastForwardPostUpgradeTasks, value]} upgrade_tasks: {get_attr: [UpgradeTasks, value]} post_upgrade_tasks: {get_attr: [PostUpgradeTasks, value]} update_tasks: {get_attr: [UpdateTasks, value]} diff --git a/puppet/services/tripleo-packages.yaml b/puppet/services/tripleo-packages.yaml index bbe2e6fb78..60d1f4ba4d 100644 --- a/puppet/services/tripleo-packages.yaml +++ b/puppet/services/tripleo-packages.yaml @@ -38,7 +38,7 @@ parameters: default: 'tripleo-repos' type: string FastForwardRepoArgs: - default: {'tripleo_repos': {'ocata': '-b ocata current', 'pike': '-b pike current'}} + default: {'tripleo_repos': {'ocata': '-b ocata current', 'pike': '-b pike current', 'queens': '-b queens current'}} type: json outputs: @@ -117,5 +117,26 @@ outputs: command: "tripleo-repos {{ fast_forward_repo_args.tripleo_repos[release] }}" when: - step|int == 3 - - is_bootstrap_node|bool + - ffu_packages_apply|bool + - fast_forward_repo_type == 'tripleo-repos' + fast_forward_post_upgrade_tasks: + - name: Register repo type and args + set_fact: + fast_forward_repo_type: {get_param: FastForwardRepoType} + fast_forward_repo_args: {get_param: FastForwardRepoArgs} + - debug: + msg: "fast_forward_repo_type: {{ fast_forward_repo_type }} fast_forward_repo_args: {{ fast_forward_repo_args }}" + - block: + - name: clone tripleo-repos + git: + repo: https://github.com/openstack/tripleo-repos.git + dest: /home/stack/tripleo-repos/ + - name: install tripleo-repos + command: python setup.py install + args: + chdir: /home/stack/tripleo-repos/ + - name: Enable tripleo-repos + command: "tripleo-repos {{ fast_forward_repo_args.tripleo_repos[release] }}" + when: + - ffu_packages_apply|bool - fast_forward_repo_type == 'tripleo-repos' diff --git a/tools/yaml-validate.py b/tools/yaml-validate.py index e2a5f211b8..d7d0d87af2 100755 --- a/tools/yaml-validate.py +++ b/tools/yaml-validate.py @@ -45,6 +45,7 @@ REQUIRED_DOCKER_SECTIONS = ['service_name', 'docker_config', 'puppet_config', 'config_settings'] OPTIONAL_DOCKER_SECTIONS = ['docker_puppet_tasks', 'upgrade_tasks', 'fast_forward_upgrade_tasks', + 'fast_forward_post_upgrade_tasks', 'post_upgrade_tasks', 'update_tasks', 'post_update_tasks', 'service_config_settings', 'host_prep_tasks', 'metadata_settings', @@ -524,6 +525,11 @@ def validate_docker_service(filename, tpl): print('ERROR: fast_forward_upgrade_tasks validation failed') return 1 + if 'fast_forward_post_upgrade_tasks' in role_data and role_data['fast_forward_post_upgrade_tasks']: + if validate_upgrade_tasks(role_data['fast_forward_post_upgrade_tasks']): + print('ERROR: fast_forward_post_upgrade_tasks validation failed') + return 1 + if 'parameters' in tpl: for param in required_params: if param not in tpl['parameters']: @@ -581,6 +587,11 @@ def validate_service(filename, tpl): print('ERROR: fast_forward_upgrade_tasks validation failed') return 1 + if 'fast_forward_post_upgrade_tasks' in role_data and role_data['fast_forward_post_upgrade_tasks']: + if validate_upgrade_tasks(role_data['fast_forward_post_upgrade_tasks']): + print('ERROR: fast_forward_post_upgrade_tasks validation failed') + return 1 + if 'parameters' in tpl: for param in required_params: if param not in tpl['parameters']: