---
- name: Set the Kubernetes Context
  shell: "kubectl config set-context {{ kubernetes_context }}"

- name: Get Namespace Detail
  shell: "kubectl get namespace {{ awx_kubernetes_namespace }}"
  register: namespace_details
  ignore_errors: yes

- name: Get Postgres Service Detail
  shell: "kubectl describe svc awx-postgresql -n {{ awx_kubernetes_namespace }}"
  register: postgres_svc_details
  ignore_errors: yes
  when: "pg_hostname is not defined or pg_hostname == ''"

- name: Create AWX Kubernetes Project
  shell: "kubectl create namespace {{ awx_kubernetes_namespace }}"
  when: namespace_details.rc != 0

# TODO: This is duplicated in the openshift role, probably needs to be moved to the image_build role
- name: Manage AWX Container Images
  block:
    - name: Authenticate with Docker registry
      docker_login:
        registry: "{{ docker_registry }}"
        username: "{{ docker_registry_username }}"
        password: "{{ docker_registry_password }}"
        reauthorize: yes
      when: docker_registry is defined and docker_registry_password is defined
      delegate_to: localhost

    - name: Wait for Openshift
      pause:
        seconds: 30

    - name: Tag and push web image to registry
      docker_image:
        name: "{{ awx_web_image }}"
        repository: "{{ docker_registry }}/{{ docker_registry_repository }}/{{ awx_web_image }}"
        tag: "{{ awx_version }}"
        push: yes
      when: docker_registry is defined
      delegate_to: localhost

    - name: Wait for the registry to settle
      pause:
        seconds: 10

    - name: Tag and push task image to registry
      docker_image:
        name: "{{ awx_task_image }}"
        repository: "{{ docker_registry }}/{{ docker_registry_repository }}/{{ awx_task_image }}"
        tag: "{{ awx_version }}"
        push: yes
      when: docker_registry is defined
      delegate_to: localhost

    - name: Set full web image path
      set_fact:
        awx_web_kubernetes_image: "{{ awx_web_image }}:{{ awx_version }}"
      when: awx_web_kubernetes_image is not defined

    - name: Set full task image path
      set_fact:
        awx_task_kubernetes_image: "{{ awx_task_image }}:{{ awx_version }}"
      when: awx_task_kubernetes_image is not defined
  when: dockerhub_base is not defined

- name: Set DockerHub Image Paths
  set_fact:
    awx_web_kubernetes_image: "{{ dockerhub_base }}/awx_web:{{ dockerhub_version }}"
    awx_task_kubernetes_image: "{{ dockerhub_base }}/awx_task:{{ dockerhub_version }}"
  when: dockerhub_base is defined

- name: Deploy and Activate Postgres
  shell: "helm install --name awx --namespace {{ awx_kubernetes_namespace }} --set postgresUser={{ pg_username }},postgresPassword={{ pg_password }},postgresDatabase={{ pg_database }},persistence.size={{ pg_volume_capacity|default('5')}}Gi stable/postgresql"
  when: (pg_hostname is not defined or pg_hostname == '') and (postgres_svc_details is defined and postgres_svc_details.rc != 0)
  register: kubernetes_pg_activate

- name: Set postgresql hostname to helm package service
  set_fact:
    pg_hostname: awx-postgresql
  when: pg_hostname is not defined or pg_hostname == ''

- name: Wait for Postgres to activate
  pause:
    seconds: 60
  when: kubernetes_pg_activate|changed

- name: Set kubernetes base path
  set_fact:
    kubernetes_base_path: "{{ awx_local_base_config_path|default('/tmp') }}/awx-config"

- name: Ensure directory exists
  file:
    path: "{{ kubernetes_base_path }}"
    state: directory

- name: Template Kubernetes AWX etcd2
  template:
    src: etcd.yml.j2
    dest: "{{ kubernetes_base_path }}/etcd.yml"
    mode: '0600'

- name: Template Kubernetes AWX Config
  template:
    src: configmap.yml.j2
    dest: "{{ kubernetes_base_path }}/configmap.yml"
    mode: '0600'

- name: Template Kubernetes AWX Deployment
  template:
    src: deployment.yml.j2
    dest: "{{ kubernetes_base_path }}/deployment.yml"
    mode: '0600'

- name: Apply etcd deployment
  shell: "kubectl apply -f {{ kubernetes_base_path }}/etcd.yml"
  
- name: Apply Configmap
  shell: "kubectl apply -f {{ kubernetes_base_path }}/configmap.yml"

- name: Apply Deployment
  shell: "kubectl apply -f {{ kubernetes_base_path }}/deployment.yml"
