From 4da03adefe09005bcac245a6c4a61eaac14d26f6 Mon Sep 17 00:00:00 2001 From: Alex Schultz Date: Tue, 22 Jun 2021 11:35:56 -0600 Subject: [PATCH] Move ephemeral heat upgrade to the service Rather than using a new service, we can use the existing HeatEphemeral service we added to ensure the undercloud is prepared for the overcloud deployment usage of the ephemeral heat version. Additionally this will properly tear down the previous containered heat services once the data has been extracted from the existing databases. Change-Id: I13270a4866f9b339cb31ebba223121978e52b499 --- .../heat-ephemeral-container-ansible.yaml | 52 +++++++++++++- .../undercloud-upgrade-ephemeral-heat.yaml | 69 ------------------- .../lifecycle/undercloud-upgrade-prepare.yaml | 1 - overcloud-resource-registry-puppet.j2.yaml | 1 - ...grade-ephemeral-heat-c838a9c61fc742a3.yaml | 9 +-- roles/Undercloud.yaml | 1 - roles_data_undercloud.yaml | 1 - scripts/undercloud-upgrade-ephemeral-heat.py | 6 +- 8 files changed, 57 insertions(+), 83 deletions(-) delete mode 100644 deployment/undercloud/undercloud-upgrade-ephemeral-heat.yaml diff --git a/deployment/heat/heat-ephemeral-container-ansible.yaml b/deployment/heat/heat-ephemeral-container-ansible.yaml index a2a5827769..38a4869e69 100644 --- a/deployment/heat/heat-ephemeral-container-ansible.yaml +++ b/deployment/heat/heat-ephemeral-container-ansible.yaml @@ -42,13 +42,19 @@ parameters: description: Mapping of service endpoint -> protocol. Typically set via parameter_defaults in the resource registry. type: json + OvercloudStackRoleDataFileMap: + default: {} + description: | + Mapping of overcloud stack name, and the absolute path to the + roles data file used when deploying/updating the stack. + For example: {'overcloud': '/home/stack/roles_data.yaml'} + type: json outputs: role_data: description: Role data for the Heat Ephemeral value: service_name: heat_ephemeral - upgrade_tasks: [] deploy_steps_tasks: - name: Tag Ephemeral Heat Containers for Overcloud Deploy when: @@ -72,3 +78,47 @@ outputs: vars: container_image: {get_param: ContainerHeatApiImage} container_image_latest: "localhost/tripleo/openstack-heat-api:ephemeral" + upgrade_tasks: + - name: Convert to Ephemeral Heat + when: + - step|int == 1 + block: + - name: Create /var/lib/tripleo-config/scripts dir + file: + path: /var/lib/tripleo-config/scripts + state: directory + recurse: true + - name: Copy undercloud-upgrade-ephemeral-heat.py to /var/lib/tripleo-config/scripts + copy: + dest: /var/lib/tripleo-config/scripts/undercloud-upgrade-ephemeral-heat.py + content: {get_file: ../../scripts/undercloud-upgrade-ephemeral-heat.py} + mode: 0755 + - name: Check if heat engine is still running + shell: systemctl is-active tripleo_heat_engine.service || systemctl is-enabled tripleo_heat_engine.service + failed_when: false + become: true + register: heat_engine_enabled + - name: Store OvercloudStackRoleDataFileMap on file + vars: + role_data_file_map: {get_param: OvercloudStackRoleDataFileMap} + copy: + dest: /var/lib/tripleo-config/overcloud-stack-role-data-file-map.yaml + content: "{{ role_data_file_map | to_nice_yaml }}" + - name: Run undercloud-upgrade-ephemeral-heat.py + shell: /var/lib/tripleo-config/scripts/undercloud-upgrade-ephemeral-heat.py + register: upgrade_ephemeral_result + when: + - heat_engine_enabled.rc is defined + - heat_engine_enabled.rc == 0 + - name: Tear down previous Heat containers + include_role: + name: tripleo_container_rm + vars: + tripleo_container_cli: "{{ container_cli }}" + tripleo_containers_to_rm: + - heat_api + - heat_api_cfn + - heat_engine + when: + - upgrade_ephemeral_result.rc is defined + - upgrade_ephemeral_result.rc == 0 diff --git a/deployment/undercloud/undercloud-upgrade-ephemeral-heat.yaml b/deployment/undercloud/undercloud-upgrade-ephemeral-heat.yaml deleted file mode 100644 index 0032e9ddf3..0000000000 --- a/deployment/undercloud/undercloud-upgrade-ephemeral-heat.yaml +++ /dev/null @@ -1,69 +0,0 @@ -heat_template_version: wallaby - -description: > - Upgrade an undercloud to use ephemeral Heat - -parameters: - ServiceData: - default: {} - description: Dictionary packing service data - type: json - ServiceNetMap: - default: {} - description: Mapping of service_name -> network name. Typically set - via parameter_defaults in the resource registry. This - mapping overrides those in ServiceNetMapDefaults. - type: json - RoleName: - default: '' - description: Role name on which the service is applied - type: string - RoleParameters: - default: {} - description: Parameters specific to the role - type: json - EndpointMap: - default: {} - description: Mapping of service endpoint -> protocol. Typically set - via parameter_defaults in the resource registry. - type: json - OvercloudStackRoleDataFileMap: - default: {} - description: | - Mapping of overcloud stack name, and the absolute path to the - roles data file used when deploying/updating the stack. - For example: {'overcloud': '/home/stack/roles_data.yaml'} - type: json - -outputs: - role_data: - description: Role data for the TripleO Undercloud Upgrade Ephemeral Heat service. - value: - service_name: undercloud_upgrade_ephemeral_heat - upgrade_tasks: - - name: Create /var/lib/tripleo-config/scripts dir - file: - path: /var/lib/tripleo-config/scripts - state: directory - recurse: true - when: - - step|int == 1 - - name: Copy undercloud-upgrade-ephemeral-heat.py to /var/lib/tripleo-config/scripts - copy: - dest: /var/lib/tripleo-config/scripts/undercloud-upgrade-ephemeral-heat.py - content: {get_file: ../../scripts/undercloud-upgrade-ephemeral-heat.py} - mode: 0755 - when: - - step|int == 1 - - name: Store OvercloudStackRoleDataFileMap on file - vars: - role_data_file_map: {get_param: OvercloudStackRoleDataFileMap} - copy: - dest: /var/lib/tripleo-config/overcloud-stack-role-data-file-map.yaml - content: "{{ role_data_file_map | to_nice_yaml }}" - when: - - step|int == 1 - - name: Run undercloud-upgrade-ephemeral-heat.py - shell: /var/lib/tripleo-config/scripts/undercloud-upgrade-ephemeral-heat.py - when: - - step|int == 1 diff --git a/environments/lifecycle/undercloud-upgrade-prepare.yaml b/environments/lifecycle/undercloud-upgrade-prepare.yaml index 3710d77604..59adf6c743 100644 --- a/environments/lifecycle/undercloud-upgrade-prepare.yaml +++ b/environments/lifecycle/undercloud-upgrade-prepare.yaml @@ -2,7 +2,6 @@ resource_registry: OS::TripleO::Services::UndercloudUpgrade: ../../deployment/undercloud/undercloud-upgrade.yaml - OS::TripleO::Services::UndercloudUpgradeEphemeralHeat: ../../deployment/undercloud/undercloud-upgrade-ephemeral-heat.yaml parameter_defaults: UndercloudUpgrade: true diff --git a/overcloud-resource-registry-puppet.j2.yaml b/overcloud-resource-registry-puppet.j2.yaml index 35eb766ea6..adbc86a68b 100644 --- a/overcloud-resource-registry-puppet.j2.yaml +++ b/overcloud-resource-registry-puppet.j2.yaml @@ -238,7 +238,6 @@ resource_registry: OS::TripleO::Services::MasqueradeNetworks: OS::Heat::None OS::TripleO::Services::TripleoValidations: OS::Heat::None OS::TripleO::Services::UndercloudUpgrade: OS::Heat::None - OS::TripleO::Services::UndercloudUpgradeEphemeralHeat: OS::Heat::None OS::TripleO::Services::Collectd: OS::Heat::None OS::TripleO::Services::ManilaApi: OS::Heat::None OS::TripleO::Services::ManilaScheduler: OS::Heat::None diff --git a/releasenotes/notes/undercloud-upgrade-ephemeral-heat-c838a9c61fc742a3.yaml b/releasenotes/notes/undercloud-upgrade-ephemeral-heat-c838a9c61fc742a3.yaml index 15bc1753de..0d60c93f58 100644 --- a/releasenotes/notes/undercloud-upgrade-ephemeral-heat-c838a9c61fc742a3.yaml +++ b/releasenotes/notes/undercloud-upgrade-ephemeral-heat-c838a9c61fc742a3.yaml @@ -1,8 +1,5 @@ --- features: - - A new service, OS::TripleO::Services::UndercloudUpgradeEphemeralHeat is - added to the Undercloud role. The service is mapped to OS::Heat::None by - default, but when environments/lifecycle/undercloud-upgrade-prepare.yaml is - included, the service will be enabled and will migrate any already deployed - stacks in the undercloud's Heat instance to be able to be used with the - ephemeral Heat deployment option from tripleoclient. + - Added Heat container tear down to the HeatEphemeral service to occur during + upgrades. This will convert an undercloud from non-ephemeral heat to + ephemeral heat when the service is enabled. diff --git a/roles/Undercloud.yaml b/roles/Undercloud.yaml index 0178db516a..ef0a9cefa5 100644 --- a/roles/Undercloud.yaml +++ b/roles/Undercloud.yaml @@ -99,6 +99,5 @@ - OS::TripleO::Services::TripleoFirewall - OS::TripleO::Services::Tuned - OS::TripleO::Services::UndercloudUpgrade - - OS::TripleO::Services::UndercloudUpgradeEphemeralHeat - OS::TripleO::Services::TripleoValidations - OS::TripleO::Services::Zaqar diff --git a/roles_data_undercloud.yaml b/roles_data_undercloud.yaml index f26856225b..a3c9ddc477 100644 --- a/roles_data_undercloud.yaml +++ b/roles_data_undercloud.yaml @@ -102,6 +102,5 @@ - OS::TripleO::Services::TripleoFirewall - OS::TripleO::Services::Tuned - OS::TripleO::Services::UndercloudUpgrade - - OS::TripleO::Services::UndercloudUpgradeEphemeralHeat - OS::TripleO::Services::TripleoValidations - OS::TripleO::Services::Zaqar diff --git a/scripts/undercloud-upgrade-ephemeral-heat.py b/scripts/undercloud-upgrade-ephemeral-heat.py index 4d252aeb20..1c877d6456 100755 --- a/scripts/undercloud-upgrade-ephemeral-heat.py +++ b/scripts/undercloud-upgrade-ephemeral-heat.py @@ -329,9 +329,9 @@ def main(): _heatclient = Client('1', endpoint=conn.endpoint_for('orchestration'), token=conn.auth_token) except keystoneauth1.exceptions.catalog.EndpointNotFound: - LOG.warning("No Heat endpoint found, won't migrate any " - "existing stack data.") - return + LOG.error("No Heat endpoint found, won't migrate any " + "existing stack data.") + raise try: stacks = args.stack or [s.name for s in heat.stacks()]