diff --git a/playbooks/roles/mirror/tasks/main.yaml b/playbooks/roles/mirror/tasks/main.yaml
index 561eddd2a9..15b957efd0 100644
--- a/playbooks/roles/mirror/tasks/main.yaml
+++ b/playbooks/roles/mirror/tasks/main.yaml
@@ -54,6 +54,11 @@
state: present
name: ssl
+- name: Apache headers module
+ apache2_module:
+ state: present
+ name: headers
+
- name: Apache webroot
file:
path: '{{ www_base }}'
diff --git a/playbooks/roles/mirror/templates/mirror.vhost.j2 b/playbooks/roles/mirror/templates/mirror.vhost.j2
index e42c003361..88a546f0b5 100644
--- a/playbooks/roles/mirror/templates/mirror.vhost.j2
+++ b/playbooks/roles/mirror/templates/mirror.vhost.j2
@@ -567,8 +567,13 @@ ErrorLogFormat "[%{cu}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% , \
# 5GiB
CacheMaxFileSize 5368709120
CacheStoreExpired On
+ CacheIgnoreQueryString On
+ CacheDefaultExpire 86400
+ CacheIgnoreCacheControl On
+ CacheStorePrivate On
+ CacheEnable disk
ProxyPass "https://galaxy.ansible.com/" ttl=120 keepalive=On retry=0
ProxyPassReverse "https://galaxy.ansible.com/"
SetOutputFilter INFLATE;SUBSTITUTE;DEFLATE
@@ -577,15 +582,19 @@ ErrorLogFormat "[%{cu}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% , \
# of the REQUEST_SCHEME. Note that mod_substitute can't use parameters...
Substitute "s|https://galaxy.ansible.com/|https://{{ apache_server_name }}:$port/|ni"
- Substitute "s|https://ansible-galaxy.s3.amazonaws.com/|https://{{ apache_server_name }}:$port/galaxy-s3/|ni"
Substitute "s|https://galaxy.ansible.com/|http://{{ apache_server_name }}:$port/|ni"
- Substitute "s|https://ansible-galaxy.s3.amazonaws.com/|http://{{ apache_server_name }}:$port/galaxy-s3/|ni"
+ # Substitute doesn't edit headers - ansible-galaxy sets a Location header for the final link
+ # to S3 bucket and content. Let's override it in order to point to our local endpoint
+ Header edit Location "^https://ansible-galaxy.s3.amazonaws.com/" "/galaxy-s3/"
+
+
+ CacheEnable disk
+ ProxyPass "https://ansible-galaxy.s3.amazonaws.com/" ttl=120 keepalive=On retry=0
+ ProxyPassReverse "https://ansible-galaxy.s3.amazonaws.com/"
- ProxyPass "/galaxy-s3/" "https://ansible-galaxy.s3.amazonaws.com/" ttl=120 keepalive=On retry=0
- ProxyPassReverse "/galaxy-s3/" "https://ansible-galaxy.s3.amazonaws.com/"
ErrorLog /var/log/apache2/proxy_$port_error.log
LogLevel warn
diff --git a/testinfra/test_mirror.py b/testinfra/test_mirror.py
index f5489924dc..52780dad70 100644
--- a/testinfra/test_mirror.py
+++ b/testinfra/test_mirror.py
@@ -23,9 +23,9 @@ def test_apache(host):
apache = host.service('apache2')
assert apache.is_running
-def _run_cmd(host, port, scheme='https', url=''):
+def _run_cmd(host, port, scheme='https', url='', curl_opt=''):
hostname = host.backend.get_hostname()
- return f'curl --resolve {hostname}:127.0.0.1 {scheme}://{hostname}:{port}{url}'
+ return f'curl {curl_opt} --resolve {hostname}:127.0.0.1 {scheme}://{hostname}:{port}{url}'
def test_base_mirror(host):
# base mirror
@@ -87,3 +87,8 @@ def test_galaxy_mirror(host):
answer = json.loads(cmd.stdout)
download_uri = answer['download_url']
assert download_uri.startswith('https://{}:4448/download/community-general'.format(hostname))
+ # Download a file and check we get an actual archive
+ download_uri = download_uri.replace('https://{}:4448'.format(hostname), '')
+ host.run(_run_cmd(host, 4448, url=download_uri, curl_opt='-sL --output /tmp/output.tar.gz'))
+ check_file = host.run('file /tmp/output.tar.gz')
+ assert 'gzip compressed data' in check_file.stdout