---
- hosts: primary
  vars:
    ansible_cfg: |
      [defaults]
      # Ensure that facts are referenced via ansible_facts.<fact>.
      inject_facts_as_vars = False

      # Test with fact caching enabled
      gathering = smart
      fact_caching = jsonfile
      fact_caching_connection = /tmp/kayobe-facts

      [ssh_connection]
      pipelining = True
      retries = 3
    ansible_cfg_kolla: |
      [defaults]
      # Ensure that facts are referenced via ansible_facts.<fact>.
      inject_facts_as_vars = False

      # Test with fact caching enabled
      gathering = smart
      fact_caching = jsonfile
      fact_caching_connection = /tmp/kolla-ansible-facts

      [ssh_connection]
      pipelining = True
      retries = 3
  roles:
    - role: kayobe-diagnostics
      kayobe_diagnostics_phase: "pre"
      kayobe_diagnostics_log_dir: "{{ logs_dir }}"

    - role: kayobe-ci-prep
  tasks:
    # NOTE(mgoddard): Copying upper constraints to somewhere accessible by both
    # the zuul and stack users.
    - name: Ensure upper-constraints.txt exists
      copy:
        src: "{{ requirements_src_dir }}/upper-constraints.txt"
        dest: "/tmp"
        mode: 0644
        remote_src: true

    - name: Ensure kayobe is executed in verbose mode
      lineinfile:
        path: "{{ kayobe_src_dir }}/dev/config.sh"
        line: "export KAYOBE_EXTRA_ARGS=-vvv"
        regexp: "^#export KAYOBE_EXTRA_ARGS=$"

    - name: Ensure ansible.cfg exists for Kayobe
      copy:
        content: "{{ ansible_cfg }}"
        dest: "{{ kayobe_config_src_dir }}/etc/kayobe/ansible.cfg"

    - name: Ensure ansible.cfg exists for Kolla Ansible
      copy:
        content: "{{ ansible_cfg_kolla }}"
        dest: "{{ kayobe_config_src_dir }}/etc/kayobe/kolla/ansible.cfg"

    - name: Update kayobe requirements.yml
      include_role:
        name: kayobe-galaxy-requirements
      vars:
        kayobe_galaxy_requirements_src_dir: "{{ kayobe_src_dir }}"

    - name: Update kolla-ansible requirements.yml
      include_role:
        name: kayobe-galaxy-requirements
      vars:
        kayobe_galaxy_requirements_src_dir: "{{ kolla_ansible_src_dir }}"
        kayobe_galaxy_requirements_dest_path: "/tmp/kolla-ansible-requirements.yml"

    - block:
        - name: Ensure previous kayobe directory exists
          file:
            path: "{{ previous_kayobe_src_dir }}"
            state: directory

        - name: Ensure previous kayobe repository is cloned
          command: >-
            git clone {{ kayobe_src_dir }} {{ previous_kayobe_src_dir }} -b stable/{{ previous_release | lower }}

        - name: Ensure previous kayobe-config directory exists
          file:
            path: "{{ previous_kayobe_config_src_dir }}"
            state: directory

        - name: Ensure kayobe-config repository is cloned
          command: >-
            git clone {{ kayobe_config_src_dir }} {{ previous_kayobe_config_src_dir }} -b stable/{{ previous_release | lower }}

        - name: Ensure previous kayobe is executed in verbose mode
          lineinfile:
            path: "{{ previous_kayobe_src_dir }}/dev/config.sh"
            line: "export KAYOBE_EXTRA_ARGS=-vvv"
            regexp: "^#export KAYOBE_EXTRA_ARGS=$"

        - name: Update kayobe requirements.yml
          include_role:
            name: kayobe-galaxy-requirements
          vars:
            kayobe_galaxy_requirements_src_dir: "{{ previous_kayobe_src_dir }}"
            kayobe_galaxy_requirements_branch: "stable/{{ previous_release | lower }}"
          # TODO(mgoddard): Always do this when previous release is Yoga.
          when: previous_release != 'xena'

        - name: Update kolla-ansible requirements.yml
          include_role:
            name: kayobe-galaxy-requirements
          vars:
            kayobe_galaxy_requirements_src_dir: "{{ previous_kolla_ansible_src_dir }}"
            kayobe_galaxy_requirements_branch: "stable/{{ previous_release | lower }}"
            kayobe_galaxy_requirements_dest_path: "/tmp/previous-kolla-ansible-requirements.yml"
          # TODO(mgoddard): Always do this when previous release is Yoga.
          when: previous_release != 'xena'

      when: is_upgrade
