mirror of
https://github.com/ansible/awx.git
synced 2024-10-31 23:51:09 +03:00
129 lines
4.7 KiB
YAML
129 lines
4.7 KiB
YAML
---
|
|
- include_tasks: openshift_auth.yml
|
|
when: openshift_host is defined
|
|
|
|
- include_tasks: kubernetes_auth.yml
|
|
when: kubernetes_context is defined
|
|
|
|
- name: Use kubectl or oc
|
|
set_fact:
|
|
kubectl_or_oc: "{{ openshift_oc_bin if openshift_oc_bin is defined else 'kubectl' }}"
|
|
|
|
- name: Remove any present restore directories
|
|
file:
|
|
state: absent
|
|
path: "{{ playbook_dir }}/tower-openshift-restore"
|
|
|
|
- name: Create directory for restore data
|
|
file:
|
|
state: directory
|
|
path: "{{ playbook_dir }}/tower-openshift-restore"
|
|
|
|
- name: Unarchive Tower backup
|
|
unarchive:
|
|
src: "{{ restore_backup_file }}"
|
|
dest: "{{ playbook_dir }}/tower-openshift-restore"
|
|
extra_opts: [--strip-components=1]
|
|
|
|
- set_fact:
|
|
deployment_object: "sts"
|
|
|
|
- name: Record deployment size
|
|
shell: |
|
|
{{ kubectl_or_oc }} -n {{ kubernetes_namespace }} \
|
|
get {{ deployment_object }} {{ kubernetes_deployment_name }} -o jsonpath="{.status.replicas}"
|
|
register: deployment_size
|
|
|
|
- name: Scale deployment down
|
|
shell: |
|
|
{{ kubectl_or_oc }} -n {{ kubernetes_namespace }} \
|
|
scale {{ deployment_object }} {{ kubernetes_deployment_name }} --replicas=0
|
|
|
|
- name: Wait for scale down
|
|
shell: |
|
|
{{ kubectl_or_oc }} -n {{ kubernetes_namespace }} get pods \
|
|
-o jsonpath='{.items[*].metadata.name}' \
|
|
| tr -s '[[:space:]]' '\n' \
|
|
| grep {{ kubernetes_deployment_name }} \
|
|
| grep -v postgres | wc -l
|
|
register: tower_pods
|
|
until: (tower_pods.stdout | trim) == '0'
|
|
retries: 30
|
|
|
|
- name: Setup Management Pod & Restore (External DB)
|
|
block:
|
|
- name: Delete any existing management pod
|
|
shell: |
|
|
{{ kubectl_or_oc }} -n {{ kubernetes_namespace }} \
|
|
delete pod ansible-tower-management --grace-period=0 --ignore-not-found
|
|
|
|
- name: Template management pod
|
|
set_fact:
|
|
management_pod: "{{ lookup('template', 'management-pod.yml.j2') }}"
|
|
|
|
- name: Create management pod
|
|
shell: |
|
|
echo {{ management_pod | quote }} | {{ kubectl_or_oc }} apply -f -
|
|
|
|
- name: Wait for management pod to start
|
|
shell: |
|
|
{{ kubectl_or_oc }} -n {{ kubernetes_namespace }} \
|
|
get pod ansible-tower-management -o jsonpath="{.status.phase}"
|
|
register: result
|
|
until: result.stdout == "Running"
|
|
retries: 60
|
|
delay: 10
|
|
|
|
- name: Perform a PostgreSQL restore (for External Postgres)
|
|
shell: |
|
|
{{ kubectl_or_oc }} -n {{ kubernetes_namespace }} \
|
|
exec -i ansible-tower-management -- bash -c "PGPASSWORD={{ pg_password | quote }} \
|
|
scl enable rh-postgresql10 -- psql \
|
|
--host={{ pg_hostname | default('postgresql') }} \
|
|
--port={{ pg_port | default('5432') }} \
|
|
--username={{ pg_username }} \
|
|
--dbname=template1" < {{ playbook_dir }}/tower-openshift-restore/tower.db
|
|
no_log: true
|
|
|
|
- name: Delete management pod
|
|
shell: |
|
|
{{ kubectl_or_oc }} -n {{ kubernetes_namespace }} \
|
|
delete pod ansible-tower-management --grace-period=0 --ignore-not-found
|
|
when: pg_hostname is defined or pg_hostname != ''
|
|
|
|
- name: Restore (Containerized DB)
|
|
block:
|
|
- name: Temporarily grant createdb role
|
|
shell: |
|
|
POD=$({{ kubectl_or_oc }} -n {{ kubernetes_namespace }} \
|
|
get pods -l=name=postgresql --field-selector status.phase=Running -o jsonpath="{.items[0].metadata.name}")
|
|
{{ kubectl_or_oc }} exec $POD -n {{ kubernetes_namespace }} -- bash -c "\
|
|
psql --dbname=template1 -c 'ALTER USER {{ pg_username }} CREATEDB;'"
|
|
|
|
- name: Perform a PostgreSQL restore
|
|
shell: |
|
|
POD=$({{ kubectl_or_oc }} -n {{ kubernetes_namespace }} \
|
|
get pods -l=name=postgresql --field-selector status.phase=Running -o jsonpath="{.items[0].metadata.name}")
|
|
{{ kubectl_or_oc }} exec -i $POD -n {{ kubernetes_namespace }} -- bash -c "\
|
|
psql --dbname=template1" < {{ playbook_dir }}/tower-openshift-restore/tower.db
|
|
no_log: true
|
|
|
|
- name: Revoke createdb role
|
|
shell: |
|
|
POD=$({{ kubectl_or_oc }} -n {{ kubernetes_namespace }} \
|
|
get pods -l=name=postgresql --field-selector status.phase=Running -o jsonpath="{.items[0].metadata.name}")
|
|
{{ kubectl_or_oc }} exec $POD -n {{ kubernetes_namespace }} -- bash -c "\
|
|
psql --dbname=template1 -c 'ALTER USER {{ pg_username }} NOCREATEDB;'"
|
|
when: pg_hostname is not defined or pg_hostname == ''
|
|
|
|
- name: Remove restore directory
|
|
file:
|
|
state: absent
|
|
path: "{{ playbook_dir }}/tower-openshift-restore"
|
|
|
|
- name: Scale deployment back up
|
|
shell: |
|
|
{{ kubectl_or_oc }} -n {{ kubernetes_namespace }} \
|
|
scale {{ deployment_object }} {{ kubernetes_deployment_name }} --replicas={{ deployment_size.stdout }}
|
|
when: deployment_size.stdout != ''
|