diff --git a/roles/tower/defaults/main.yml b/roles/tower/defaults/main.yml index 48e6fd80..92964b52 100644 --- a/roles/tower/defaults/main.yml +++ b/roles/tower/defaults/main.yml @@ -16,6 +16,8 @@ tower_web_image: registry.access.redhat.com/ansible-tower-35/ansible-tower:3.5.3 tower_create_preload_data: true +tower_task_replicas: "1" + tower_memcached_image: memcached:alpine tower_rabbitmq_image: rabbitmq:3 diff --git a/roles/tower/tasks/initialize.yml b/roles/tower/tasks/initialize.yml new file mode 100644 index 00000000..d4ff0983 --- /dev/null +++ b/roles/tower/tasks/initialize.yml @@ -0,0 +1,29 @@ +--- +- name: Check if there are any Tower super users defined. + shell: >- + kubectl exec -n {{ meta.namespace }} {{ tower_pod_name }} -- bash -c + "echo 'from django.contrib.auth.models import User; + nsu = User.objects.filter(is_superuser=True).count(); + exit(0 if nsu > 0 else 1)' + | awx-manage shell" + ignore_errors: true + changed_when: false + register: users_result + changed_when: users_result.rc > 0 + +- name: Create Tower super user via Django if it doesn't exist. + shell: >- + kubectl exec -n {{ meta.namespace }} {{ tower_pod_name }} -- bash -c + "echo \"from django.contrib.auth.models import User; + User.objects.create_superuser('{{ tower_admin_user }}', '{{ tower_admin_email }}', '{{ tower_admin_password }}')\" + | awx-manage shell" + when: users_result.rc > 0 + no_log: true + +- name: Create preload data if necessary. + shell: >- + kubectl exec -n {{ meta.namespace }} {{ tower_pod_name }} -- bash -c + "awx-manage create_preload_data" + register: cdo + changed_when: "'added' in cdo.stdout" + when: tower_create_preload_data | bool diff --git a/roles/tower/tasks/main.yml b/roles/tower/tasks/main.yml index c6d5a2df..afe90e6f 100644 --- a/roles/tower/tasks/main.yml +++ b/roles/tower/tasks/main.yml @@ -11,7 +11,7 @@ - tower.yaml.j2 - tower_task.yaml.j2 -- name: Get the Tower web pod information. +- name: Get the Tower pod information. # TODO: Change to k8s_info after Ansible 2.9.0 is available in Operator image. k8s_facts: kind: Pod @@ -19,6 +19,9 @@ label_selectors: - app=tower register: tower_pods + until: "tower_pods['resources'][0]['status']['phase'] == 'Running'" + delay: 5 + retries: 60 - name: Set the tower pod name as a variable. set_fact: @@ -45,32 +48,21 @@ shell: >- kubectl exec -n {{ meta.namespace }} {{ tower_pod_name }} -- bash -c "awx-manage migrate --noinput" + register: migrate_result when: (k8s_defs_result is changed) or (database_check is defined and database_check.rc != 0) -- name: Check if there are any Tower super users defined. - shell: >- - kubectl exec -n {{ meta.namespace }} {{ tower_pod_name }} -- bash -c - "echo 'from django.contrib.auth.models import User; - nsu = User.objects.filter(is_superuser=True).count(); - exit(0 if nsu > 0 else 1)' - | awx-manage shell" - ignore_errors: true - changed_when: false - register: users_result - changed_when: users_result.rc > 0 +- include_tasks: initialize.yml -- name: Create Tower super user via Django if it doesn't exist. - shell: >- - kubectl exec -n {{ meta.namespace }} {{ tower_pod_name }} -- bash -c - "echo \"from django.contrib.auth.models import User; - User.objects.create_superuser('{{ tower_admin_user }}', '{{ tower_admin_email }}', '{{ tower_admin_password }}')\" - | awx-manage shell" - when: users_result.rc > 0 +- name: Scale the tower_task deployment to 0 replicas after migration. + k8s: + definition: "{{ lookup('template', 'tower_task.yaml.j2') | from_yaml_all | list }}" + vars: + tower_task_replicas: "0" + when: migrate_result and migrate_result.changed -- name: Create Tower super user via Django if it doesn't exist. - shell: >- - kubectl exec -n {{ meta.namespace }} {{ tower_pod_name }} -- bash -c - "awx-manage create_preload_data" - register: cdo - changed_when: "'added' in cdo.stdout" - when: tower_create_preload_data | bool +- name: Scale the tower_task deployment back to 1 replica after migration. + k8s: + definition: "{{ lookup('template', 'tower_task.yaml.j2') | from_yaml_all | list }}" + vars: + tower_task_replicas: "1" + when: migrate_result and migrate_result.changed diff --git a/roles/tower/templates/tower.yaml.j2 b/roles/tower/templates/tower.yaml.j2 index f468fd16..334c9623 100644 --- a/roles/tower/templates/tower.yaml.j2 +++ b/roles/tower/templates/tower.yaml.j2 @@ -9,7 +9,7 @@ data: secret_key: '{{ tower_secret_key | b64encode }}' admin_password: '{{ tower_admin_password | b64encode }}' -# Tower Web Deployment. +# Tower Deployment. --- apiVersion: apps/v1 kind: Deployment @@ -76,7 +76,7 @@ spec: - key: nginx_conf path: nginx.conf -# Tower Web Service. +# Tower Service. --- apiVersion: v1 kind: Service @@ -93,7 +93,7 @@ spec: selector: app: tower -# Tower Web Ingress. +# Tower Ingress. --- apiVersion: extensions/v1beta1 kind: Ingress diff --git a/roles/tower/templates/tower_task.yaml.j2 b/roles/tower/templates/tower_task.yaml.j2 index 6e3c3852..a384e48c 100644 --- a/roles/tower/templates/tower_task.yaml.j2 +++ b/roles/tower/templates/tower_task.yaml.j2 @@ -8,7 +8,7 @@ metadata: labels: app: tower-task spec: - replicas: 1 + replicas: {{ tower_task_replicas | int }} selector: matchLabels: app: tower-task