Add a state to manage apt's preferences, with testsmaster
@@ -1 +1,2 @@ | |||
*.swp | |||
.kitchen |
@@ -10,7 +10,15 @@ platforms: | |||
provisioner: | |||
name: salt_solo | |||
salt_version: 2015.8.8 | |||
data_path: test/shared | |||
is_file_root: true | |||
pillars-from-files: | |||
apt.sls: pillar.example | |||
pillars: | |||
top.sls: | |||
base: | |||
'*': | |||
- apt | |||
grains: | |||
os_family: Debian | |||
@@ -22,24 +30,9 @@ suites: | |||
'*': | |||
- apt.repositories | |||
- apt.update | |||
pillars: | |||
top.sls: | |||
base: | |||
'*': | |||
- apt | |||
apt.sls: | |||
apt: | |||
remove_sources_list: true | |||
clean_sources_list_d: true | |||
repositories: | |||
debian-jessie: | |||
distro: jessie | |||
url: http://httpredir.debian.org/debian | |||
type: [source] | |||
comps: [main, contrib, non-free] | |||
dropbox: | |||
distro: jessie | |||
url: http://linux.dropbox.com/debian | |||
arch: [i386, amd64] | |||
keyid: 1C61A2656FB57B7E4DE0F4C1FC918B335044912E | |||
keyserver: pgp.mit.edu | |||
- name: preferences | |||
provisioner: | |||
state_top: | |||
base: | |||
'*': | |||
- apt.preferences |
@@ -30,7 +30,7 @@ Runs ``apt-get update``. | |||
Runs ``apt-get upgrade``. | |||
``apt.repositories`` | |||
--------------- | |||
-------------------- | |||
Allows you to configure and manage repositories from pillar. Check ``pillar.example`` | |||
to see possible values. If used and no repositories are provided, sane default | |||
@@ -39,8 +39,18 @@ values from ``map.jinja`` are used. | |||
Check https://wiki.debian.org/SourcesList for an explanation about the resulting | |||
files structure. | |||
``apt.preferences`` | |||
------------------- | |||
Allows you to configure and manage apt's preferences from pillar. Check | |||
``pillar.example`` to see possible values. If used and no repositories are | |||
provided, sane default values from ``map.jinja`` are used. | |||
Check https://wiki.debian.org/AptPreferences?action=show&redirect=preferences | |||
and ``man 5 apt_preferences`` for an explanation about the resulting files structure. | |||
``apt.ppa`` | |||
------------- | |||
----------- | |||
Installs ``python-software-properties`` | |||
(``$ /usr/bin/apt-add-repository ppa:user/repository``). | |||
@@ -10,6 +10,10 @@ | |||
'sources_list_dir': '/etc/apt/sources.list.d', | |||
'remove_sources_list': false, | |||
'clean_sources_list_d': false, | |||
'preferences_dir': '/etc/apt/preferences.d', | |||
'remove_preferences': false, | |||
'clean_preferences_d': false, | |||
'default_keyserver': 'pool.sks-keyservers.net', | |||
'default_url': 'http://httpredir.debian.org/debian/', | |||
'repositories': { | |||
'sane_default': { |
@@ -0,0 +1,38 @@ | |||
{% from "apt/map.jinja" import apt as apt_map with context %} | |||
{% set apt = pillar.get('apt', {}) %} | |||
{% set remove_preferences = apt.get('remove_preferences', apt_map.remove_preferences) %} | |||
{% set clean_preferences_d = apt.get('clean_preferences_d', apt_map.clean_preferences_d) %} | |||
{% set preferences_dir = apt.get('preferences_dir', apt_map.preferences_dir) %} | |||
{% set preferences = apt.get('preferences', apt_map.preferences) %} | |||
{% set default_url = apt.get('default_url', apt_map.default_url) %} | |||
/etc/apt/preferences: | |||
{% if remove_preferences %} | |||
file.absent | |||
{% else %} | |||
file.managed: | |||
- mode: '0644' | |||
- user: root | |||
- group: root | |||
{% endif %} | |||
{{ preferences_dir }}: | |||
file.directory: | |||
- mode: '0755' | |||
- user: root | |||
- group: root | |||
- clean: {{ clean_preferences_d }} | |||
{% for pref_file, args in preferences.iteritems() %} | |||
{%- set p_package = args.package if args.package is defined else '*' %} | |||
{{ preferences_dir }}/{{ pref_file }}: | |||
file.managed: | |||
- mode: '0644' | |||
- user: root | |||
- group: root | |||
- contents: | |||
- "{{ 'Package: ' ~ p_package }}" | |||
- "{{ 'Pin: ' ~ args.pin }}" | |||
- "{{ 'Pin-Priority: ' ~ args.priority }}" | |||
{% endfor %} |
@@ -2,6 +2,9 @@ apt: | |||
remove_sources_list: true | |||
clean_sources_list_d: true | |||
remove_preferences: true | |||
clean_preferences_d: true | |||
unattended: | |||
allowed_origins: | |||
- origin1 | |||
@@ -35,13 +38,35 @@ apt: | |||
distro: stable-updates | |||
url: http://httpredir.debian.org/debian/ | |||
comps: [main, contrib, non-free] | |||
my-fancy-repo: | |||
distro: whatever/is/needed/here | |||
url: http://my.repo.url | |||
raspbian: | |||
distro: wheezy | |||
url: http://archive.raspbian.org/raspbian | |||
type: [source] | |||
key_url: https://archive.raspbian.org/raspbian.public.key | |||
debian-jessie: | |||
distro: jessie | |||
url: http://httpredir.debian.org/debian | |||
type: [source] | |||
key_url: http://my.repo.url/GPG-KEY-my.repo | |||
perconap-repo: | |||
distro: stable | |||
url: http://repo.percona.com/apt | |||
keyid: CD2EFD2A | |||
keyserver: pool.sks-keyservers.net | |||
comps: [main, contrib, non-free] | |||
dropbox: | |||
distro: jessie | |||
url: http://linux.dropbox.com/debian | |||
arch: [i386, amd64] | |||
keyid: 1C61A2656FB57B7E4DE0F4C1FC918B335044912E | |||
keyserver: pgp.mit.edu | |||
preferences: | |||
00-rspamd: | |||
package: rspamd | |||
pin: origin rspamd.com | |||
priority: 650 | |||
01-all: | |||
pin: release stable | |||
priority: 610 | |||
02-all: | |||
pin: release testing | |||
priority: 600 | |||
03-all: | |||
pin: release unstable | |||
priority: 50 | |||
@@ -0,0 +1,48 @@ | |||
require_relative '../../../kitchen/data/spec_helper' | |||
describe 'apt.preferences' do | |||
describe file('/etc/apt/preferences') do | |||
it { should_not exist } | |||
end | |||
describe file('/etc/apt/preferences.d') do | |||
it { should be_directory } | |||
it { should be_mode 755 } | |||
it { should be_owned_by 'root' } | |||
it { should be_grouped_into 'root' } | |||
end | |||
describe file('/etc/apt/preferences.d/00-rspamd') do | |||
it { should exist } | |||
it { should be_mode 644 } | |||
it { should be_owned_by 'root' } | |||
it { should be_grouped_into 'root' } | |||
its(:content) { should match("Package: rspamd\nPin: origin rspamd.com\nPin-Priority: 650\n") } | |||
end | |||
describe file('/etc/apt/preferences.d/01-all') do | |||
it { should exist } | |||
it { should be_mode 644 } | |||
it { should be_owned_by 'root' } | |||
it { should be_grouped_into 'root' } | |||
its(:content) { should match("Package: *\nPin: release stable\nPin-Priority: 610\n") } | |||
end | |||
describe file('/etc/apt/preferences.d/02-all') do | |||
it { should exist } | |||
it { should be_mode 644 } | |||
it { should be_owned_by 'root' } | |||
it { should be_grouped_into 'root' } | |||
its(:content) { should match("Package: *\nPin: release testing\nPin-Priority: 600\n") } | |||
end | |||
describe file('/etc/apt/preferences.d/03-all') do | |||
it { should exist } | |||
it { should be_mode 644 } | |||
it { should be_owned_by 'root' } | |||
it { should be_grouped_into 'root' } | |||
its(:content) { should match("Package: *\nPin: release unstable\nPin-Priority: 50\n") } | |||
end | |||
end |
@@ -1,4 +1,4 @@ | |||
require 'spec_helper' | |||
require_relative '../../../kitchen/data/spec_helper' | |||
describe 'apt.repositories' do | |||