# Copyright 2018 AT&T Intellectual Property.  All other rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

- hosts: primary
  roles:
    - clear-firewall
    - bindep
    - ensure-docker
    - ensure-python
    - ensure-pip

  tasks:
    - include_vars: vars.yaml

    - name: Debug tag generation inputs
      block:
        - debug:
            var: publish
        - debug:
            var: tags
        - debug:
            var: distro
        - debug:
            var: zuul
        - debug:
            msg: "{{ tags | to_json }}"

    - name: Set ubuntu jammy base image
      set_fact:
        base_image: "{{ base_image_jammy }}"
      when: distro == 'ubuntu_jammy'

    - name: Set ubuntu focal base image
      set_fact:
        base_image: "{{ base_image_focal }}"
      when: distro == 'ubuntu_focal'

    - name: Set ubuntu bionic base image
      set_fact:
        base_image: "{{ base_image_bionic }}"
      when: distro == 'ubuntu_bionic'

    - name: Determine tags
      shell: echo '{{ tags | to_json }}' | python3 {{ zuul.project.src_dir }}/tools/image_tags.py
      environment:
        BRANCH: "{{ zuul.branch | default('') }}"
        CHANGE: "{{ zuul.change | default('') }}"
        COMMIT: "{{ zuul.newrev | default('') }}"
        PATCHSET: "{{ zuul.patchset | default('') }}"
      register: image_tags

    - name: Debug computed tags
      debug:
        var: image_tags

    - name: Remove default mirror config
      shell: rm /etc/pip.conf
      become: True

    - name: Install Docker python module for ansible docker login
      block:
        - pip:
            name: docker
            executable: pip3
      become: True

    - name: Make images - verbosive
      when: not publish
      shell: |
                make images
      args:
        chdir: "{{ zuul.project.src_dir }}"
        executable: /bin/bash
      become: True


    - name: Make images
      when: not publish
      block:
        - make:
            chdir: "{{ zuul.project.src_dir }}"
            target: images
            params:
              BASE_IMAGE: "{{ base_image }}"
              DISTRO: "{{ distro }}"
              IMAGE_TAG: "{{ item }}"
              PROXY: "{{ proxy }}"
              NO_PROXY: "{{ no_proxy }}"
              USE_PROXY: "{{ use_proxy | lower }}"
          with_items: "{{ image_tags.stdout_lines }}"

        - shell: "docker images"
          register: docker_images

        - debug:
            var: docker_images

      become: True

    - name: Publish images
      block:
        - docker_login:
            username: "{{ airship_pegleg_quay_creds.username }}"
            password: "{{ airship_pegleg_quay_creds.password }}"
            registry_url: "{{ docker_registry_login_url }}"
            api_version: "1.43"

        - make:
            chdir: "{{ zuul.project.src_dir }}"
            target: images
            params:
              BASE_IMAGE: "{{ base_image }}"
              DOCKER_REGISTRY: "{{ docker_registry }}"
              IMAGE_PREFIX: "{{ image_prefix }}"
              DISTRO: "{{ distro }}"
              IMAGE_TAG: "{{ item }}"
              COMMIT: "{{ zuul.newrev | default('') }}"
              PUSH_IMAGE: "true"
              PROXY: "{{ proxy }}"
              NO_PROXY: "{{ no_proxy }}"
              USE_PROXY: "{{ use_proxy | lower }}"
          with_items: "{{ image_tags.stdout_lines }}"

        - shell: "docker images"
          register: docker_images

        - debug:
            var: docker_images

      when: publish
      become: True