- name: Check AFS mounted
  stat:
    path: "/afs/openstack.org/mirror"
  register: afs_mirror
- name: Sanity check AFS
  assert:
    that:
      - afs_mirror.stat.exists

- name: Install apache2
  apt:
    name:
      - apache2
      - apache2-utils
    state: present

- name: Rewrite module
  apache2_module:
    state: present
    name: rewrite

- name: Substitute module
  apache2_module:
    state: present
    name: substitute

- name: Cache module
  apache2_module:
    state: present
    name: cache

- name: Cache disk module
  apache2_module:
    state: present
    name: cache_disk

- name: Proxy module
  apache2_module:
    state: present
    name: proxy

- name: HTTP Proxy module
  apache2_module:
    state: present
    name: proxy_http

- name: Apache macro module
  apache2_module:
    state: present
    name: macro

- name: Apache 2 ssl module
  apache2_module:
    state: present
    name: ssl

- name: Apache headers module
  apache2_module:
    state: present
    name: headers

- name: Apache webroot
  file:
    path: '{{ www_base }}'
    state: directory
    owner: root
    group: root

- name: Apache www root
  file:
    path: '{{ www_root }}'
    state: directory
    owner: root
    group: root

- name: AFS content symlinks
  file:
    src: '{{ mirror_root }}/{{ item }}'
    dest: '{{ www_root }}/{{ item }}'
    state: link
    owner: root
    group: root
    follow: false
  with_items:
    - apt-puppetlabs
    - centos
    - centos-stream
    - ceph-deb-nautilus
    - ceph-deb-octopus
    - ceph-deb-quincy
    - ceph-deb-reef
    - deb-docker
    - debian
    - debian-security
    - debian-openstack
    - epel
    - fedora
    - logs
    - openeuler
    - opensuse
    - ubuntu
    - ubuntu-ports
    - ubuntu-cloud-archive
    - wheel
    - yum-puppetlabs

- name: Install robots.txt
  copy:
    src: robots.txt
    dest: '{{ www_root }}'
    owner: root
    group: root
    mode: 0444

- name: Install wheel_header.html
  copy:
    src: wheel_header.html
    dest: '{{ www_base }}'
    owner: root
    group: root
    mode: 0444

- name: Apache proxy cache
  file:
    path: /var/cache/apache2/proxy
    owner: www-data
    group: www-data
    mode: 0755
    state: directory

- name: Set mirror servername and alias
  set_fact:
    apache_server_name: '{{ inventory_hostname }}'
    # Strip the numeric host value (like mirror01.region.provider.o.o
    # becomes mirror.region...)  for the serveralias
    apache_server_alias: '{{ inventory_hostname | regex_replace("^mirror\d\d\.", "mirror.") }}'

- name: Copy apache tuning
  copy:
    src: apache-connection-tuning
    dest: /etc/apache2/conf-enabled/connection-tuning.conf
    owner: root
    group: root
    mode: 0644
  notify: restart apache2

- name: Create mirror virtual host
  template:
    src: mirror.vhost.j2
    dest: /etc/apache2/sites-available/mirror.conf
  notify:
    - reload apache2

- name: Make sure default site disabled
  command: a2dissite 000-default.conf
  args:
    removes: /etc/apache2/sites-enabled/000-default.conf

- name: Enable mirror virtual host
  command: a2ensite mirror
  args:
    creates: /etc/apache2/sites-enabled/mirror.conf
  notify:
    - restart apache2

# Clean apache cache once an hour, keep size down to 70GiB.
- name: Proxy cleanup cron job
  cron:
    name: Apache cache cleanup
    state: present
    job: /usr/bin/flock -n /var/run/htcacheclean.lock /usr/bin/htcacheclean -n -p /var/cache/apache2/proxy -t -l {{ mirror_apache_cache_limit }} > /dev/null
    minute: '0'
    hour: '*'