- hosts: localhost
  tasks:
    - name: Add bridge.o.o to inventory
      add_host:
        name: bridge.openstack.org
        ansible_python_interpreter: python3
        ansible_user: zuul
        # Without setting ansible_host directly, mirror-workspace-git-repos
        # gets sad because if delegate_to localhost and with add_host that
        # ends up with ansible_host being localhost.
        ansible_host: bridge.openstack.org
        ansible_port: 22

- hosts: localhost
  tasks:
    - name: Add bridge.o.o hostkey to known hosts
      known_hosts:
        name: bridge.openstack.org
        key: "bridge.openstack.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxRzDkWvvVQtsLTAqAwedRWA84/42KKVdFS0QP8lZFsMpgTXUhjipJ7VcFun5gM87tnt0J71rlN+ospBh0/1wfp2jASEskUyGhXAa5xHjnJN7veUyW+AggEosK/OTunvZgf54p1sQg45Sq/uCjc0Ua0fRMOq2o5z/mgpl6rSjLOlWi9wKA/6axnUbs9w4iD5esyBQ+VcISSJOTqhAo/3UG0NwCU+6Ggwwhg0nl5iCMpQfq4A207IbJ72MkJzlQgW3edsRb5POzdZcGxkTYvVdP3kgHP4Bof3MFFZjBUMz6SuRQyNV5poysMtbtlO0SvgAJNhXr6Vn0GA9XhqFP6+HT"

- hosts: bridge.openstack.org
  tasks:
    - name: Should we run from master
      set_fact:
        infra_prod_run_from_master: "{{ zuul.pipeline|default('') in ['periodic', 'opendev-prod-hourly'] }}"

    - name: Update from master
      when: infra_prod_run_from_master|bool
      git:
        repo: https://opendev.org/opendev/system-config
        dest: /home/zuul/src/opendev.org/opendev/system-config
        force: yes

    - name: Run the production playbook and capture logs
      block:

      - name: Log a playbook start header
        become: yes
        shell: 'echo "Running {{ ansible_date_time.iso8601 }}: ansible-playbook -v -f {{ infra_prod_ansible_forks }} /home/zuul/src/opendev.org/opendev/system-config/playbooks/{{ playbook_name }}" > /var/log/ansible/{{ playbook_name }}.log'

      - name: Run specified playbook on bridge.o.o and redirect output
        become: yes
        shell: 'ansible-playbook -v -f {{ infra_prod_ansible_forks }} /home/zuul/src/opendev.org/opendev/system-config/playbooks/{{ playbook_name }} >> /var/log/ansible/{{ playbook_name }}.log'

      always:

        # Not using normal zuul job roles as bridge.openstack.org is not a
        # test node with all the normal bits in place.
        - name: Collect log output
          synchronize:
            dest: "{{ zuul.executor.log_root }}/{{ playbook_name }}.log"
            mode: pull
            src: "/var/log/ansible/{{ playbook_name }}.log"
            verify_host: true
          when: infra_prod_playbook_collect_log

        - name: Return playbook log artifact to Zuul
          when: infra_prod_playbook_collect_log
          zuul_return:
            data:
              zuul:
                artifacts:
                  - name: "Playbook Log"
                    url: "{{ playbook_name }}.log"
                    metadata:
                      type: text

        # If we aren't publishing logs through zuul then keep a set on
        # bridge directly.
        - name: Rename playbook log on bridge
          when: not infra_prod_playbook_collect_log
          become: yes
          copy:
            remote_src: yes
            src: "/var/log/ansible/{{ playbook_name }}.log"
            dest: "/var/log/ansible/{{ playbook_name }}.log.{{ ansible_date_time.iso8601 }}"

        - name: Cleanup old playbook logs on bridge
          when: not infra_prod_playbook_collect_log
          become: yes
          shell: |
            find /var/log/ansible -name '{{ playbook_name }}.log.*' -type f -mtime 30 -delete