- name: Set zuul-log-path fact
  include_role:
    name: set-zuul-log-path-fact

# Always upload (true), never upload (false) or only on failure ('failure')
- name: Upload logs
  when: zuul_site_upload_logs | default(true) | bool or
        (zuul_site_upload_logs == 'failure' and not zuul_success | bool)
  block:

    - name: Create log directories
      file:
        path: "{{ zuul_logserver_root }}/{{ zuul_log_path }}"
        state: directory
        recurse: yes
        mode: 0775

    # Use chmod instead of file because ansible 2.5 file with recurse and
    # follow can't really handle symlinks to .
    - name: Ensure logs are readable before uploading
      delegate_to: localhost
      command: "chmod -R u=rwX,g=rX,o=rX {{ zuul.executor.log_root }}/"
      # ANSIBLE0007 chmod used in place of argument mode to file
      tags:
        - skip_ansible_lint

    - name: Upload logs to log server
      synchronize:
        src: "{{ zuul.executor.log_root }}/"
        dest: "{{ zuul_logserver_root }}/{{ zuul_log_path }}/"
        owner: no
        group: no
        rsync_opts:
          - "--exclude=job-output.txt"
          - "--exclude=job-output.json"
      no_log: "{{ not zuul_log_verbose }}"

    # After this point there are no more logs
    - name: Compress console log and json output
      delegate_to: localhost
      archive:
        path: "{{ zuul.executor.log_root }}/{{ zj_log }}"
        mode: 0644
      with_items:
        - job-output.txt
        - job-output.json
      loop_control:
        loop_var: zj_log
      when: zuul_log_compress | bool

    - name: Upload compressed console log and json output
      synchronize:
        src: "{{ zuul.executor.log_root }}/{{ zj_log }}.gz"
        dest: "{{ zuul_logserver_root }}/{{ zuul_log_path }}/{{ zj_log }}.gz"
        verify_host: true
        owner: no
        group: no
      with_items:
        - job-output.txt
        - job-output.json
      loop_control:
        loop_var: zj_log
      when: zuul_log_compress | bool

    - name: Upload console log and json output
      synchronize:
        src: "{{ zuul.executor.log_root }}/{{ zj_log }}"
        dest: "{{ zuul_logserver_root }}/{{ zuul_log_path }}/{{ zj_log }}"
        verify_host: true
        owner: no
        group: no
      with_items:
        - job-output.txt
        - job-output.json
      loop_control:
        loop_var: zj_log
      when: not zuul_log_compress | bool

- name: Return log URL to Zuul
  delegate_to: localhost
  zuul_return:
    data:
      zuul:
        log_url: "{{ zuul_log_url }}/{{ zuul_log_path }}/"
  when: zuul_log_url is defined