diff options
Diffstat (limited to 'code/environments/production/modules/apt/manifests/setting.pp')
-rw-r--r-- | code/environments/production/modules/apt/manifests/setting.pp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/code/environments/production/modules/apt/manifests/setting.pp b/code/environments/production/modules/apt/manifests/setting.pp new file mode 100644 index 0000000..a7b11c4 --- /dev/null +++ b/code/environments/production/modules/apt/manifests/setting.pp @@ -0,0 +1,57 @@ +# Defining apt settings +define apt::setting ( + Variant[String, Integer, Array] $priority = 50, + Optional[Enum['file', 'present', 'absent']] $ensure = file, + Optional[String] $source = undef, + Optional[String] $content = undef, + Boolean $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') + } + + $title_array = split($title, '-') + $setting_type = $title_array[0] + $base_name = join(delete_at($title_array, 0), '-') + + assert_type(Pattern[/\Aconf\z/, /\Apref\z/, /\Alist\z/], $setting_type) |$a, $b| { + fail("apt::setting resource name/title must start with either 'conf-', 'pref-' or 'list-'") + } + + if $priority !~ Integer { + # need this to allow zero-padded priority. + assert_type(Pattern[/^\d+$/], $priority) |$a, $b| { + fail('apt::setting priority must be an integer or a zero-padded integer') + } + } + + if ($setting_type == 'list') or ($setting_type == 'pref') { + $_priority = '' + } else { + $_priority = $priority + } + + $_path = $::apt::config_files[$setting_type]['path'] + $_ext = $::apt::config_files[$setting_type]['ext'] + + if $notify_update { + $_notify = Class['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, + } +} |