diff --git a/docs/openstack/edpm_adoption.md b/docs/openstack/edpm_adoption.md index 435ef328f..0256c539b 100644 --- a/docs/openstack/edpm_adoption.md +++ b/docs/openstack/edpm_adoption.md @@ -6,7 +6,12 @@ ## Variables -(There are no shell variables necessary currently.) +Define the shell variables used in the Fast-forward upgrade steps below. +The values are just illustrative, use values that are correct for your environment: + +```bash +PODIFIED_DB_ROOT_PASSWORD=$(oc get -o json secret/osp-secret | jq -r .data.DbRootPassword | base64 -d) +``` ## Pre-checks @@ -308,3 +313,124 @@ EOF ``` oc wait --for condition=Ready osdpns/openstack --timeout=30m ``` + +## Nova compute services fast-forward upgrade from Wallaby to Antelope + +Nova services rolling upgrade cannot be done during adoption, +there is in a lock-step with Nova control plane services, because those +are managed independently by EDPM ansible, and Kubernetes operators. +Nova service operator and OpenStack Dataplane operator ensure upgrading +is done independently of each other, by configuring +`[upgrade_levels]compute=auto` for Nova services. Nova control plane +services apply the change right after CR is patched. Nova compute EDPM +services will catch up the same config change with ansible deployment +later on. + +> **NOTE**: Additional orchestration happening around the FFU workarounds +> configuration for Nova compute EDPM service is a subject of future changes. + +* Wait for cell1 Nova compute EDPM services version updated (it may take some time): + + ```bash + oc exec -it mariadb-openstack-cell1 -- mysql --user=root --password=${PODIFIED_DB_ROOT_PASSWORD} \ + -e "select a.version from nova_cell1.services a join nova_cell1.services b where a.version!=b.version and a.binary='nova-compute';" + ``` + The above query should return an empty result as a completion criterion. + +* Remove pre-FFU workarounds for Nova control plane services: + + ```yaml + oc patch openstackcontrolplane openstack -n openstack --type=merge --patch ' + spec: + nova: + template: + cellTemplates: + cell0: + conductorServiceTemplate: + customServiceConfig: | + [workarounds] + disable_compute_service_check_for_ffu=false + cell1: + metadataServiceTemplate: + customServiceConfig: | + [workarounds] + disable_compute_service_check_for_ffu=false + conductorServiceTemplate: + customServiceConfig: | + [workarounds] + disable_compute_service_check_for_ffu=false + apiServiceTemplate: + customServiceConfig: | + [workarounds] + disable_compute_service_check_for_ffu=false + metadataServiceTemplate: + customServiceConfig: | + [workarounds] + disable_compute_service_check_for_ffu=false + schedulerServiceTemplate: + customServiceConfig: | + [workarounds] + disable_compute_service_check_for_ffu=false + ' + ``` + +* Wait for Nova control plane services' CRs to become ready: + + ```bash + oc wait --for condition=Ready --timeout=300s Nova/nova + ``` + +* Remove pre-FFU workarounds for Nova compute EDPM services: + + ```yaml + oc apply -f - <Antelope FFU + ansible.builtin.include_tasks: + file: nova_ffu.yaml diff --git a/tests/roles/dataplane_adoption/tasks/nova_ffu.yaml b/tests/roles/dataplane_adoption/tasks/nova_ffu.yaml new file mode 100644 index 000000000..0ac16c19b --- /dev/null +++ b/tests/roles/dataplane_adoption/tasks/nova_ffu.yaml @@ -0,0 +1,121 @@ +- name: set podified MariaDB copy shell vars + no_log: "{{ use_no_log }}" + ansible.builtin.set_fact: + mariadb_copy_shell_vars: | + PODIFIED_DB_ROOT_PASSWORD="{{ podified_db_root_password }}" + +- name: wait for cell1 Nova compute EDPM services version updated + ansible.builtin.shell: | + {{ shell_header }} + {{ oc_header }} + {{ mariadb_copy_shell_vars }} + oc rsh mariadb-openstack-cell1 mysql --user=root --password=${PODIFIED_DB_ROOT_PASSWORD} \ + -e "select a.version from nova_cell1.services a join nova_cell1.services b where a.version!=b.version and a.binary='nova-compute';" + register: records_check_results + until: records_check_results.rc == 0 and records_check_results.stdout_lines | length == 0 + retries: 20 + delay: 6 + +- name: remove pre-FFU workarounds for Nova control plane services + ansible.builtin.shell: | + {{ shell_header }} + {{ oc_header }} + oc patch openstackcontrolplane openstack -n openstack --type=merge --patch ' + spec: + nova: + template: + cellTemplates: + cell0: + conductorServiceTemplate: + customServiceConfig: | + [workarounds] + disable_compute_service_check_for_ffu=false + cell1: + metadataServiceTemplate: + customServiceConfig: | + [workarounds] + disable_compute_service_check_for_ffu=false + conductorServiceTemplate: + customServiceConfig: | + [workarounds] + disable_compute_service_check_for_ffu=false + apiServiceTemplate: + customServiceConfig: | + [workarounds] + disable_compute_service_check_for_ffu=false + metadataServiceTemplate: + customServiceConfig: | + [workarounds] + disable_compute_service_check_for_ffu=false + schedulerServiceTemplate: + customServiceConfig: | + [workarounds] + disable_compute_service_check_for_ffu=false + ' + +- name: Wait for Nova control plane services' CRs to become ready + ansible.builtin.include_role: + name: nova_adoption + tasks_from: wait.yaml + +- name: remove pre-FFU workarounds for Nova compute EDPM services + ansible.builtin.shell: | + {{ shell_header }} + {{ oc_header }} + oc apply -f - <antelope FFU + ansible.builtin.shell: | + {{ shell_header }} + {{ oc_header }} + oc rsh nova-cell0-conductor-0 nova-manage db online_data_migrations + oc rsh nova-cell1-conductor-0 nova-manage db online_data_migrations + register: nova_exec_result + until: nova_exec_result is success + retries: 10 + delay: 6