Skip to content

Commit

Permalink
Implemented package caching on the repo server
Browse files Browse the repository at this point in the history
This change implements package caching on the repo server.
To take advantage of this a deploy will need to do nothing more
than setup an apt-proxy configuration file. This will speed up
package delivery while also providing ha capabilities within the
environment.

Change-Id: I78b2fba6a1f294751bd7098513060015cb41300c
Signed-off-by: Kevin Carter <kevin.carter@rackspace.com>
  • Loading branch information
cloudnull authored and Jesse Pretorius (odyssey4me) committed Jul 22, 2016
1 parent b4e13ba commit 02e58df
Show file tree
Hide file tree
Showing 8 changed files with 126 additions and 0 deletions.
9 changes: 9 additions & 0 deletions defaults/main.yml
Expand Up @@ -38,3 +38,12 @@ repo_recreate_keys: False

# Main web server port
repo_server_port: 8181

# Toggle the implementation of the Package Cache service
repo_pkg_cache_enabled: true

# Set the listening port for the Package Cache service
repo_pkg_cache_port: 3142

# Set the listening address for the PAckage Cache service
repo_pkg_cache_bind: "0.0.0.0"
7 changes: 7 additions & 0 deletions handlers/main.yml
Expand Up @@ -30,6 +30,13 @@
enabled: yes
pattern: "rsync"

- name: reload acng
service:
name: "apt-cacher-ng"
state: restarted
enabled: yes
pattern: "apt-cacher-ng"

- name: reload fcgiwrap
service:
name: "fcgiwrap"
Expand Down
6 changes: 6 additions & 0 deletions releasenotes/notes/pkg-cacher-cfeae8fb990904a4.yaml
@@ -0,0 +1,6 @@
---
features:
- The repo server now has a Package Cache service for distribution packages. To leverage
the cache, deployers will need to configure the package manager on all hosts to use the
cache as a proxy. If a deployer would prefer to disable this service, the variable
``repo_pkg_cache_enabled`` should be set to ``false``.
2 changes: 2 additions & 0 deletions tasks/main.yml
Expand Up @@ -39,6 +39,8 @@
- include: repo_pre_install.yml
- include: repo_install.yml
- include: repo_post_install.yml
- include: repo_cacher.yml
when: repo_pkg_cache_enabled | bool

- include: repo_key_populate.yml

Expand Down
75 changes: 75 additions & 0 deletions tasks/repo_cacher.yml
@@ -0,0 +1,75 @@
---
# Copyright 2016, Rackspace US, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

- name: Install repo caching server packages (yum)
yum:
pkg: "{{ item }}"
state: latest
enablerepo: "epel-testing"
register: install_packages
until: install_packages|success
retries: 5
delay: 5
with_items: "{{ repo_pkg_cache_server_packages }}"
when:
- ansible_pkg_mgr == 'yum'
- repo_pkg_cache_enabled | bool

- name: Install repo caching server packages (apt)
apt:
pkg: "{{ item }}"
state: latest
register: install_packages
until: install_packages|success
retries: 5
delay: 5
with_items: "{{ repo_pkg_cache_server_packages }}"
when:
- ansible_pkg_mgr == 'apt'
- repo_pkg_cache_enabled | bool

- name: Create cache directory
file:
path: "{{ repo_service_home_folder }}/repo/pkg-cache"
state: "directory"
owner: "apt-cacher-ng"
group: "{{ repo_service_group_name }}"
mode: "02775"

- name: Stat the cache path
stat:
path: /var/cache/apt-cacher-ng
register: acs

- name: Remove cacher directory if its a directory
file:
path: "/var/cache/apt-cacher-ng"
state: "absent"
when:
- acs.stat.isdir is defined and acs.stat.isdir

- name: Link cacher to the repo path
file:
src: "{{ repo_service_home_folder }}/repo/pkg-cache"
dest: "/var/cache/apt-cacher-ng"
state: "link"

- name: Drop acng.conf
template:
src: "acng.conf.j2"
dest: "/etc/apt-cacher-ng/acng.conf"
notify:
- reload acng

20 changes: 20 additions & 0 deletions templates/acng.conf.j2
@@ -0,0 +1,20 @@
# {{ ansible_managed }}

CacheDir: {{ repo_service_home_folder }}/repo/pkg-cache
LogDir: /var/log/apt-cacher-ng
Port: {{ repo_pkg_cache_port }}
BindAddress: {{ repo_pkg_cache_bind }}
Remap-debrep: file:deb_mirror*.gz /debian ; file:backends_debian # Debian Archives
Remap-uburep: file:ubuntu_mirrors /ubuntu ; file:backends_ubuntu # Ubuntu Archives
Remap-debvol: file:debvol_mirror*.gz /debian-volatile ; file:backends_debvol # Debian Volatile Archives
Remap-cygwin: file:cygwin_mirrors /cygwin # ; file:backends_cygwin # incomplete, please create this file or specify preferred mirrors here
Remap-sfnet: file:sfnet_mirrors # ; file:backends_sfnet # incomplete, please create this file or specify preferred mirrors here
Remap-alxrep: file:archlx_mirrors /archlinux # ; file:backend_archlx # Arch Linux
Remap-fedora: file:fedora_mirrors # Fedora Linux
Remap-epel: file:epel_mirrors # Fedora EPEL
Remap-slrep: file:sl_mirrors # Scientific Linux
ReportPage: acng-report.html
PidFile: /var/run/apt-cacher-ng
ExTreshold: 4
LocalDirs: acng-doc /usr/share/doc/apt-cacher-ng
PassThroughPattern: .*
3 changes: 3 additions & 0 deletions vars/debian.yml
Expand Up @@ -24,3 +24,6 @@ repo_server_packages:
- lsyncd
- nginx-extras
- rsync

repo_pkg_cache_server_packages:
- apt-cacher-ng
4 changes: 4 additions & 0 deletions vars/redhat.yml
Expand Up @@ -23,3 +23,7 @@ repo_server_packages:
- lsyncd
- nginx
- rsync

repo_pkg_cache_server_packages:
- apt-cacher-ng

0 comments on commit 02e58df

Please sign in to comment.