911c4de90f
`apt::ppa` and `apt::setting` don't actually include `apt::update` so anchors are unnecessary. Move `apt` to use contain instead of anchors, since it wasn't anchoring properly anyways. Update the tests to make sure it can have settings and ppas depending on each other without cycles.
63 lines
1.5 KiB
Puppet
63 lines
1.5 KiB
Puppet
define apt::setting (
|
|
$priority = 50,
|
|
$ensure = file,
|
|
$source = undef,
|
|
$content = undef,
|
|
$notify_update = true,
|
|
) {
|
|
|
|
if $content and $source {
|
|
fail('apt::setting cannot have both content and source')
|
|
}
|
|
|
|
if !$content and !$source {
|
|
fail('apt::setting needs either of content or source')
|
|
}
|
|
|
|
validate_re($ensure, ['file', 'present', 'absent'])
|
|
validate_bool($notify_update)
|
|
|
|
$title_array = split($title, '-')
|
|
$setting_type = $title_array[0]
|
|
$base_name = join(delete_at($title_array, 0), '-')
|
|
|
|
validate_re($setting_type, ['\Aconf\z', '\Apref\z', '\Alist\z'], "apt::setting resource name/title must start with either 'conf-', 'pref-' or 'list-'")
|
|
|
|
unless is_integer($priority) {
|
|
# need this to allow zero-padded priority.
|
|
validate_re($priority, '^\d+$', 'apt::setting priority must be an integer or a zero-padded integer')
|
|
}
|
|
|
|
if $source {
|
|
validate_string($source)
|
|
}
|
|
|
|
if $content {
|
|
validate_string($content)
|
|
}
|
|
|
|
if $setting_type == 'list' {
|
|
$_priority = ''
|
|
} else {
|
|
$_priority = $priority
|
|
}
|
|
|
|
$_path = $::apt::config_files[$setting_type]['path']
|
|
$_ext = $::apt::config_files[$setting_type]['ext']
|
|
|
|
if $notify_update {
|
|
$_notify = Exec['apt_update']
|
|
} else {
|
|
$_notify = undef
|
|
}
|
|
|
|
file { "${_path}/${_priority}${base_name}${_ext}":
|
|
ensure => $ensure,
|
|
owner => 'root',
|
|
group => 'root',
|
|
mode => '0644',
|
|
content => $content,
|
|
source => $source,
|
|
notify => $_notify,
|
|
}
|
|
}
|