Clark Boylan f27298869c Use caching reverse proxy for rdo repos
We can't sanely mirror the rdo packages beacuse they are constantly
updating. Instead put a caching reverse proxy in front of the repos in
each region on our existing mirror servers. This should allow us to get
region local data that is "hot" and hopefully improve reliability to the
rdo repos.

Change-Id: I6ab810f7b6788459da1cee00baf6b053f31843cf
2017-03-29 13:42:29 -07:00

265 lines
5.4 KiB
Puppet

# == Class: openstack_project::mirror
#
class openstack_project::mirror (
$vhost_name = $::fqdn,
) {
$mirror_root = '/afs/openstack.org/mirror'
$pypi_root = "${mirror_root}/pypi"
$wheel_root = "${mirror_root}/wheel"
$npm_root = "${mirror_root}/npm"
$ceph_deb_hammer_root = "${mirror_root}/ceph-deb-hammer"
$ceph_deb_jewel_root = "${mirror_root}/ceph-deb-jewel"
$gem_root = "${mirror_root}/gem"
$www_base = '/var/www'
$www_root = "${www_base}/mirror"
#####################################################
# Build Apache Webroot
file { "${www_base}":
ensure => directory,
owner => root,
group => root,
}
file { "${www_root}":
ensure => directory,
owner => root,
group => root,
require => [
File["${www_base}"],
]
}
# Create the symlink to pypi.
file { "${www_root}/pypi":
ensure => link,
target => "${pypi_root}/web",
owner => root,
group => root,
require => [
File["${www_root}"],
]
}
# Create the symlink to wheel.
file { "${www_root}/wheel":
ensure => link,
target => "${wheel_root}",
owner => root,
group => root,
require => [
File["${www_root}"],
]
}
# Create the symlink to centos
file { "${www_root}/centos":
ensure => link,
target => "${mirror_root}/centos",
owner => root,
group => root,
require => [
File["${www_root}"],
]
}
# Create the symlink to debian
file { "${www_root}/debian":
ensure => link,
target => "${mirror_root}/debian",
owner => root,
group => root,
require => [
File["${www_root}"],
]
}
# Create the symlink to Debian OpenStack Packaging Team reprepro.
file { "${www_root}/debian-openstack":
ensure => link,
target => "${mirror_root}/debian-openstack",
owner => root,
group => root,
require => [
File["${www_root}"],
]
}
# Create the symlink to epel
file { "${www_root}/epel":
ensure => link,
target => "${mirror_root}/epel",
owner => root,
group => root,
require => [
File["${www_root}"],
]
}
# Create the symlink to fedora
file { "${www_root}/fedora":
ensure => link,
target => "${mirror_root}/fedora",
owner => root,
group => root,
require => [
File["${www_root}"],
]
}
# Create the symlink to apt.
file { "${www_root}/ubuntu":
ensure => link,
target => "${mirror_root}/ubuntu",
owner => root,
group => root,
require => [
File["${www_root}"],
]
}
file { "${www_root}/npm":
ensure => link,
target => "${npm_root}",
owner => root,
group => root,
require => [
File["${www_root}"],
]
}
# Create the symlink to ceph-deb-hammer.
file { "${www_root}/ceph-deb-hammer":
ensure => link,
target => "${ceph_deb_hammer_root}",
owner => root,
group => root,
require => [
File["${www_root}"],
]
}
# Create the symlink to ceph-deb-jewel.
file { "${www_root}/ceph-deb-jewel":
ensure => link,
target => "${ceph_deb_jewel_root}",
owner => root,
group => root,
require => [
File["${www_root}"],
]
}
# Create the symlink to Ubuntu Cloud Archive.
file { "${www_root}/ubuntu-cloud-archive":
ensure => link,
target => "${mirror_root}/ubuntu-cloud-archive",
owner => root,
group => root,
require => [
File["${www_root}"],
]
}
# Create the symlink to Ubuntu MariaDB.
file { "${www_root}/ubuntu-mariadb":
ensure => link,
target => "${mirror_root}/ubuntu-mariadb",
owner => root,
group => root,
require => [
File["${www_root}"],
]
}
# TODO(pabelanger): We can remove this after puppet runs a few times.
file { "${www_root}/mariadb":
ensure => absent,
}
file { "${www_root}/gem":
ensure => link,
target => "${gem_root}",
owner => root,
group => root,
require => [
File["${www_root}"],
]
}
file { "${www_root}/robots.txt":
ensure => present,
owner => 'root',
group => 'root',
mode => '0444',
source => 'puppet:///modules/openstack_project/disallow_robots.txt',
require => File["${www_root}"],
}
#####################################################
# Build VHost
include ::httpd
file { '/opt/apache_cache':
ensure => directory,
owner => 'www-data',
group => 'www-data',
mode => '0755',
require => Class['httpd']
}
if ! defined(Httpd::Mod['rewrite']) {
httpd::mod { 'rewrite':
ensure => present,
}
}
if ! defined(Httpd::Mod['substitute']) {
httpd::mod { 'substitute':
ensure => present,
}
}
if ! defined(Httpd::Mod['cache']) {
httpd::mod { 'cache':
ensure => present,
}
}
if ! defined(Httpd::Mod['cache_disk']) {
httpd::mod { 'cache_disk':
ensure => present,
}
}
if ! defined(Httpd::Mod['proxy']) {
httpd::mod { 'proxy':
ensure => present,
}
}
::httpd::vhost { $vhost_name:
port => 80,
priority => '50',
docroot => "${www_root}",
template => 'openstack_project/mirror.vhost.erb',
require => [
File["${www_root}"],
]
}
class { '::httpd::logrotate':
options => [
'daily',
'missingok',
'rotate 7',
'compress',
'delaycompress',
'notifempty',
'create 640 root adm',
],
}
}