---
- name: Set global version if not provided
  set_fact:
    awx_version: "{{ lookup('file', playbook_dir + '/../VERSION') }}"
  when: awx_version is not defined

- name: Verify awx-logos directory exists for official install
  stat:
    path: "../../awx-logos"
  delegate_to: localhost
  register: logosdir
  failed_when: logosdir.stat.isdir is not defined or not logosdir.stat.isdir
  when: awx_official|default(false)|bool

- name: Copy logos for inclusion in sdist
  copy:
    src: "../../awx-logos/awx/ui/client/assets"
    dest: "../awx/ui/client/"
  delegate_to: localhost
  when: awx_official|default(false)|bool

- name: Set sdist file name
  set_fact:
    awx_sdist_file: "awx-{{ awx_version }}.tar.gz"

- name: AWX Distribution
  debug:
    msg: "{{ awx_sdist_file }}"

- name: Stat distribution file
  stat:
    path: "../dist/{{ awx_sdist_file }}"
  delegate_to: localhost
  register: sdist

- name: Clean distribution
  shell: make clean
  args:
    chdir: ..
  ignore_errors: yes
  when: not sdist.stat.exists
  delegate_to: localhost

- name: Build sdist builder image
  docker_image:
    buildargs:
      http_proxy: "{{ http_proxy | default('') }}"
      https_proxy: "{{ https_proxy | default('') }}"
      no_proxy: "{{ no_proxy | default('') }}"
    path: "{{ role_path }}/files"
    dockerfile: Dockerfile.sdist
    name: awx_sdist_builder
    tag: "{{ awx_version }}"
    force: true
  delegate_to: localhost
  when: use_container_for_build|default(true)|bool

- name: Build AWX distribution using container
  docker_container:
    env:
      http_proxy: "{{ http_proxy | default('') }}"
      https_proxy: "{{ https_proxy | default('') }}"
      no_proxy: "{{ no_proxy | default('') }}"
    image: "awx_sdist_builder:{{ awx_version }}"
    name: awx_sdist_builder
    state: started
    detach: false
    volumes:
      - ../:/awx:Z
  delegate_to: localhost
  when: use_container_for_build|default(true)|bool

- name: Build AWX distribution locally
  shell: make sdist
  args:
    chdir: ..
  delegate_to: localhost
  when: not use_container_for_build|default(true)|bool

- name: Set docker build base path
  set_fact:
    docker_base_path: "{{ awx_local_base_config_path|default('/tmp') }}/docker-image"

- name: Set awx_web image name
  set_fact:
    web_image: "{{ web_image|default('awx_web') }}"

- name: Set awx_task image name
  set_fact:
    task_image: "{{ task_image|default('awx_task') }}"

- name: Ensure directory exists
  file:
    path: "{{ docker_base_path }}"
    state: directory
  delegate_to: localhost

- name: Stage sdist
  copy:
    src: "../dist/{{ awx_sdist_file }}"
    dest: "{{ docker_base_path }}/{{ awx_sdist_file }}"
  delegate_to: localhost

- name: Template web Dockerfile
  template:
    src: Dockerfile.j2
    dest: "{{ docker_base_path }}/Dockerfile"
  delegate_to: localhost

- name: Template task Dockerfile
  template:
    src: Dockerfile.task.j2
    dest: "{{ docker_base_path }}/Dockerfile.task"
  delegate_to: localhost

- name: Stage launch_awx
  copy:
    src: launch_awx.sh
    dest: "{{ docker_base_path }}/launch_awx.sh"
    mode: '0700'
  delegate_to: localhost

- name: Stage launch_awx_task
  copy:
    src: launch_awx_task.sh
    dest: "{{ docker_base_path }}/launch_awx_task.sh"
    mode: '0700'
  delegate_to: localhost

- name: Stage nginx.conf
  template:
    src: nginx.conf
    dest: "{{ docker_base_path }}/nginx.conf"
  delegate_to: localhost

- name: Stage supervisor.conf
  copy:
    src: supervisor.conf
    dest: "{{ docker_base_path }}/supervisor.conf"
  delegate_to: localhost

- name: Stage supervisor_task.conf
  copy:
    src: supervisor_task.conf
    dest: "{{ docker_base_path }}/supervisor_task.conf"
  delegate_to: localhost

- name: Stage settings.py
  copy:
    src: settings.py
    dest: "{{ docker_base_path }}/settings.py"
  delegate_to: localhost

- name: Stage requirements
  copy:
    src: ../requirements/
    dest: "{{ docker_base_path }}/requirements"
  delegate_to: localhost

- name: Stage config watcher
  copy:
    src: ../tools/scripts/config-watcher
    dest: "{{ docker_base_path }}/config-watcher"
  delegate_to: localhost

- name: Stage Makefile
  copy:
    src: ../Makefile
    dest: "{{ docker_base_path }}/Makefile"
  delegate_to: localhost

- name: Stage ansible repo
  copy:
    src: 'ansible.repo'
    dest: '{{ docker_base_path }}/ansible.repo'
  delegate_to: localhost

- name: Stage ansible repo key
  copy:
    src: 'RPM-GPG-KEY-ansible-release'
    dest: '{{ docker_base_path }}/RPM-GPG-KEY-ansible-release'
  delegate_to: localhost

- name: Build base web image
  docker_image:
    buildargs:
      http_proxy: "{{ http_proxy | default('') }}"
      https_proxy: "{{ https_proxy | default('') }}"
      no_proxy: "{{ no_proxy | default('') }}"
    path: "{{ docker_base_path }}"
    dockerfile: Dockerfile
    name: "{{ web_image }}"
    tag: "{{ awx_version }}"
  delegate_to: localhost

- name: Build base task image
  docker_image:
    buildargs:
      http_proxy: "{{ http_proxy | default('') }}"
      https_proxy: "{{ https_proxy | default('') }}"
      no_proxy: "{{ no_proxy | default('') }}"
    path: "{{ docker_base_path }}"
    dockerfile: Dockerfile.task
    name: "{{ task_image }}"
    tag: "{{ awx_version }}"
    pull: no
  delegate_to: localhost

- name: Tag task and web images as latest
  command: "docker tag {{ item }}:{{ awx_version }} {{ item }}:latest"
  delegate_to: localhost
  with_items:
    - "{{ task_image }}"
    - "{{ web_image }}"

- name: Clean docker base directory
  file:
    path: "{{ docker_base_path }}"
    state: absent
  when: cleanup_docker_base|default(True)|bool
  delegate_to: localhost
