diff --git a/ansible/templates/role.yml.j2 b/ansible/templates/role.yml.j2 index d12272a2..1b1263b3 100644 --- a/ansible/templates/role.yml.j2 +++ b/ansible/templates/role.yml.j2 @@ -59,6 +59,7 @@ rules: - apps resources: - deployments/scale + - statefulsets/scale verbs: - patch - apiGroups: diff --git a/deploy/awx-operator.yaml b/deploy/awx-operator.yaml index 5e815415..98ddd06a 100644 --- a/deploy/awx-operator.yaml +++ b/deploy/awx-operator.yaml @@ -413,6 +413,7 @@ rules: - apps resources: - deployments/scale + - statefulsets/scale verbs: - patch - apiGroups: diff --git a/deploy/olm-catalog/awx-operator/manifests/awx-operator.clusterserviceversion.yaml b/deploy/olm-catalog/awx-operator/manifests/awx-operator.clusterserviceversion.yaml index 5b896faf..9fdeab37 100644 --- a/deploy/olm-catalog/awx-operator/manifests/awx-operator.clusterserviceversion.yaml +++ b/deploy/olm-catalog/awx-operator/manifests/awx-operator.clusterserviceversion.yaml @@ -460,6 +460,7 @@ spec: - apps resources: - deployments/scale + - statefulsets/scale verbs: - patch - apiGroups: diff --git a/roles/installer/tasks/database_configuration.yml b/roles/installer/tasks/database_configuration.yml index a79f55c4..350e745b 100644 --- a/roles/installer/tasks/database_configuration.yml +++ b/roles/installer/tasks/database_configuration.yml @@ -64,12 +64,42 @@ set_fact: pg_config: '{{ _generated_pg_config_resources["resources"] | default([]) | length | ternary(_generated_pg_config_resources, _pg_config) }}' -- name: Create Database if no database is specified - k8s: - apply: true - definition: "{{ lookup('template', 'tower_postgres.yaml.j2') }}" - when: - - pg_config['resources'][0]['data']['type'] | default('') | b64decode == 'managed' +- block: + - name: Create Database if no database is specified + k8s: + apply: true + definition: "{{ lookup('template', 'tower_postgres.yaml.j2') }}" + register: create_statefulset_result + + rescue: + - name: Scale down Deployment for migration + include_tasks: scale_down_deployment.yml + + - name: Scale down PostgreSQL statefulset for migration + community.kubernetes.k8s_scale: + api_version: apps/v1 + kind: StatefulSet + name: "{{ meta.name }}-postgres" + namespace: "{{ meta.namespace }}" + replicas: 0 + wait: yes + + - name: Remove PostgreSQL statefulset for upgrade + k8s: + state: absent + api_version: apps/v1 + kind: StatefulSet + name: "{{ meta.name }}-postgres" + namespace: "{{ meta.namespace }}" + wait: yes + when: create_statefulset_result.error == 422 + + - name: Recreate PostgreSQL statefulset with updated values + k8s: + apply: true + definition: "{{ lookup('template', 'tower_postgres.yaml.j2') }}" + when: pg_config['resources'][0]['data']['type'] | default('') | b64decode == 'managed' + - name: Store Database Configuration set_fact: diff --git a/roles/installer/tasks/migrate_data.yml b/roles/installer/tasks/migrate_data.yml index 63ec4c75..aeea94ec 100644 --- a/roles/installer/tasks/migrate_data.yml +++ b/roles/installer/tasks/migrate_data.yml @@ -24,23 +24,8 @@ set_fact: postgres_pod_name: "{{ postgres_pod['resources'][0]['metadata']['name'] }}" -- name: Check for presence of Deployment - k8s_info: - api_version: v1 - kind: Deployment - name: "{{ meta.name }}" - namespace: "{{ meta.namespace }}" - register: tower_deployment - - name: Scale down Deployment for migration - k8s_scale: - api_version: v1 - kind: Deployment - name: "{{ meta.name }}" - namespace: "{{ meta.namespace }}" - replicas: 0 - wait: yes - when: tower_deployment['resources'] | length + include_tasks: scale_down_deployment.yml - name: Set pg_dump command set_fact: diff --git a/roles/installer/tasks/resources_configuration.yml b/roles/installer/tasks/resources_configuration.yml index 703191bc..060b48f9 100644 --- a/roles/installer/tasks/resources_configuration.yml +++ b/roles/installer/tasks/resources_configuration.yml @@ -34,7 +34,7 @@ - name: Apply deployment resources k8s: apply: yes - definition: "{{ lookup('template', 'tower_deployment.yaml.j2') | from_yaml }}" + definition: "{{ lookup('template', 'tower_deployment.yaml.j2') }}" wait: yes register: tower_deployment_result diff --git a/roles/installer/tasks/scale_down_deployment.yml b/roles/installer/tasks/scale_down_deployment.yml new file mode 100644 index 00000000..7db71674 --- /dev/null +++ b/roles/installer/tasks/scale_down_deployment.yml @@ -0,0 +1,19 @@ +--- + +- name: Check for presence of Deployment + k8s_info: + api_version: v1 + kind: Deployment + name: "{{ meta.name }}" + namespace: "{{ meta.namespace }}" + register: tower_deployment + +- name: Scale down Deployment for migration + community.kubernetes.k8s_scale: + api_version: v1 + kind: Deployment + name: "{{ meta.name }}" + namespace: "{{ meta.namespace }}" + replicas: 0 + wait: yes + when: tower_deployment['resources'] | length