diff --git a/.github/workflows/labeller.yml b/.github/workflows/labeller.yml
index ee149bf525..0d4870d70b 100644
--- a/.github/workflows/labeller.yml
+++ b/.github/workflows/labeller.yml
@@ -6,7 +6,7 @@ on:
- opened
- labeled
- unlabeled
- pull_request_target:
+ pull_request:
types:
- opened
- labeled
diff --git a/.github/workflows/mend.yml b/.github/workflows/mend.yml
index 8b5b401847..b4100a5af0 100644
--- a/.github/workflows/mend.yml
+++ b/.github/workflows/mend.yml
@@ -1,10 +1,9 @@
name: "mend"
on:
- pull_request_target:
- types:
- - opened
- - synchronize
+ pull_request:
+ branches:
+ - "main"
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 0b7b8a05dd..4b3b80fc80 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -2,7 +2,7 @@ name: "Publish module"
on:
workflow_dispatch:
-
+
jobs:
release:
uses: "puppetlabs/cat-github-actions/.github/workflows/module_release.yml@main"
diff --git a/.rubocop.yml b/.rubocop.yml
index 7a66e08331..439ea84ee8 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -5,7 +5,7 @@ require:
AllCops:
NewCops: enable
DisplayCopNames: true
- TargetRubyVersion: '2.7'
+ TargetRubyVersion: '2.6'
Include:
- "**/*.rb"
Exclude:
@@ -529,6 +529,8 @@ Lint/DuplicateBranch:
Enabled: false
Lint/DuplicateMagicComment:
Enabled: false
+Lint/DuplicateMatchPattern:
+ Enabled: false
Lint/DuplicateRegexpCharacterClassElement:
Enabled: false
Lint/EmptyBlock:
@@ -645,6 +647,8 @@ Style/ComparableClamp:
Enabled: false
Style/ConcatArrayLiterals:
Enabled: false
+Style/DataInheritance:
+ Enabled: false
Style/DirEmpty:
Enabled: false
Style/DocumentDynamicEvalDefinition:
@@ -713,6 +717,8 @@ Style/RedundantHeredocDelimiterQuotes:
Enabled: false
Style/RedundantInitialize:
Enabled: false
+Style/RedundantLineContinuation:
+ Enabled: false
Style/RedundantSelfAssignmentBranch:
Enabled: false
Style/RedundantStringEscape:
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index 2f1e4f73a5..6da8d472f8 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -1,6 +1,6 @@
{
"recommendations": [
"puppet.puppet-vscode",
- "rebornix.Ruby"
+ "Shopify.ruby-lsp"
]
}
diff --git a/Gemfile b/Gemfile
index 49f29d3ebe..ca783ebb83 100644
--- a/Gemfile
+++ b/Gemfile
@@ -20,31 +20,30 @@ group :development do
gem "json", '= 2.6.1', require: false if Gem::Requirement.create(['>= 3.1.0', '< 3.1.3']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
gem "json", '= 2.6.3', require: false if Gem::Requirement.create(['>= 3.2.0', '< 4.0.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
gem "racc", '~> 1.4.0', require: false if Gem::Requirement.create(['>= 2.7.0', '< 3.0.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
+ gem "deep_merge", '~> 1.0', require: false
gem "voxpupuli-puppet-lint-plugins", '~> 5.0', require: false
- gem "facterdb", '~> 1.18', require: false
- gem "metadata-json-lint", '~> 3.0', require: false
- gem "puppetlabs_spec_helper", '~> 7.0', require: false
- gem "rspec-puppet-facts", '~> 2.0', require: false
- gem "codecov", '~> 0.2', require: false
+ gem "facterdb", '~> 1.26', require: false
+ gem "metadata-json-lint", '~> 4.0', require: false
+ gem "rspec-puppet-facts", '~> 3.0', require: false
gem "dependency_checker", '~> 1.0.0', require: false
gem "parallel_tests", '= 3.12.1', require: false
gem "pry", '~> 0.10', require: false
- gem "simplecov-console", '~> 0.5', require: false
+ gem "simplecov-console", '~> 0.9', require: false
gem "puppet-debugger", '~> 1.0', require: false
- gem "rubocop", '= 1.48.1', require: false
+ gem "rubocop", '~> 1.50.0', require: false
gem "rubocop-performance", '= 1.16.0', require: false
gem "rubocop-rspec", '= 2.19.0', require: false
- gem "puppet-strings", '~> 4.0', require: false
gem "rb-readline", '= 0.5.5', require: false, platforms: [:mswin, :mingw, :x64_mingw]
end
-group :system_tests do
- gem "puppet_litmus", '~> 1.0', require: false, platforms: [:ruby, :x64_mingw]
- gem "serverspec", '~> 2.41', require: false
-end
-group :release_prep do
+group :development, :release_prep do
gem "puppet-strings", '~> 4.0', require: false
gem "puppetlabs_spec_helper", '~> 7.0', require: false
end
+group :system_tests do
+ gem "puppet_litmus", '~> 1.0', require: false, platforms: [:ruby, :x64_mingw]
+ gem "CFPropertyList", '< 3.0.7', require: false, platforms: [:mswin, :mingw, :x64_mingw]
+ gem "serverspec", '~> 2.41', require: false
+end
puppet_version = ENV['PUPPET_GEM_VERSION']
facter_version = ENV['FACTER_GEM_VERSION']
diff --git a/README.md b/README.md
index 1e93e35918..d9983b50e8 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@
* [Add GPG keys](#add-gpg-keys)
* [Prioritize backports](#prioritize-backports)
* [Update the list of packages](#update-the-list-of-packages)
- * [Pin a specific release](#pin-a-specific-release)
+ * [Pin a specific release](#pin-a-specific-release)
* [Add a Personal Package Archive repository](#add-a-personal-package-archive-repository)
* [Configure Apt from Hiera](#configure-apt-from-hiera)
* [Replace the default sources.list file](#replace-the-default-sourceslist-file)
diff --git a/REFERENCE.md b/REFERENCE.md
index 4c97d0d543..b3597d71a5 100644
--- a/REFERENCE.md
+++ b/REFERENCE.md
@@ -13,7 +13,6 @@
#### Private Classes
-* `apt::params`: Provides defaults for the Apt module parameters.
* `apt::update`: Updates the list of available packages using apt-get update.
### Defined types
@@ -99,7 +98,7 @@ Data type: `String`
Specifies the provider that should be used by apt::update.
-Default value: `$apt::params::provider`
+Default value: `'/usr/bin/apt-get'`
##### `keyserver`
@@ -108,7 +107,7 @@ Data type: `String`
Specifies a keyserver to provide the GPG key. Valid options: a string containing a domain name or a full URL (http://, https://, or
hkp://).
-Default value: `$apt::params::keyserver`
+Default value: `'keyserver.ubuntu.com'`
##### `key_options`
@@ -116,7 +115,7 @@ Data type: `Optional[String]`
Specifies the default options for apt::key resources.
-Default value: `$apt::params::key_options`
+Default value: `undef`
##### `ppa_options`
@@ -124,7 +123,7 @@ Data type: `Optional[Array[String]]`
Supplies options to be passed to the `add-apt-repository` command.
-Default value: `$apt::params::ppa_options`
+Default value: `undef`
##### `ppa_package`
@@ -132,7 +131,7 @@ Data type: `Optional[String]`
Names the package that provides the `apt-add-repository` command.
-Default value: `$apt::params::ppa_package`
+Default value: `undef`
##### `backports`
@@ -146,15 +145,15 @@ Options:
* **:repos** `String`: See apt::backports for documentation.
* **:key** `String`: See apt::backports for documentation.
-Default value: `$apt::params::backports`
+Default value: `undef`
##### `confs`
Data type: `Hash`
-Creates new `apt::conf` resources. Valid options: a hash to be passed to the create_resources function linked above.
+Hash of `apt::conf` resources.
-Default value: `$apt::params::confs`
+Default value: `{}`
##### `update`
@@ -178,7 +177,7 @@ Default: 'reluctantly'.
* **:timeout** `Integer`: Specifies how long to wait for the update to complete before canceling it. Valid options: an integer, in seconds. Default: undef.
* **:tries** `Integer`: Specifies how many times to retry the update after receiving a DNS or HTTP error. Default: undef.
-Default value: `$apt::params::update`
+Default value: `{}`
##### `update_defaults`
@@ -186,7 +185,16 @@ Data type: `Hash`
The default update settings that are combined and merged with the passed `update` value
-Default value: `$apt::params::update_defaults`
+Default value:
+
+```puppet
+{
+ 'frequency' => 'reluctantly',
+ 'loglevel' => undef,
+ 'timeout' => undef,
+ 'tries' => undef,
+ }
+```
##### `purge`
@@ -201,7 +209,7 @@ Options:
* **:preferences** `Boolean`: Specifies whether to purge any unmanaged entries from preferences. Default false.
* **:preferences.d.** `Boolean`: Specifies whether to purge any unmanaged entries from preferences.d. Default false.
-Default value: `$apt::params::purge`
+Default value: `{}`
##### `purge_defaults`
@@ -209,7 +217,17 @@ Data type: `Hash`
The default purge settings that are combined and merged with the passed `purge` value
-Default value: `$apt::params::purge_defaults`
+Default value:
+
+```puppet
+{
+ 'sources.list' => false,
+ 'sources.list.d' => false,
+ 'preferences' => false,
+ 'preferences.d' => false,
+ 'apt.conf.d' => false,
+ }
+```
##### `proxy`
@@ -217,7 +235,7 @@ Data type: `Apt::Proxy`
Configures Apt to connect to a proxy server. Valid options: a hash matching the locally defined type apt::proxy.
-Default value: `$apt::params::proxy`
+Default value: `{}`
##### `proxy_defaults`
@@ -225,23 +243,34 @@ Data type: `Hash`
The default proxy settings that are combined and merged with the passed `proxy` value
-Default value: `$apt::params::proxy_defaults`
+Default value:
+
+```puppet
+{
+ 'ensure' => undef,
+ 'host' => undef,
+ 'port' => 8080,
+ 'https' => false,
+ 'https_acng' => false,
+ 'direct' => false,
+ }
+```
##### `sources`
Data type: `Hash`
-Creates new `apt::source` resources. Valid options: a hash to be passed to the create_resources function linked above.
+Hash of `apt::source` resources.
-Default value: `$apt::params::sources`
+Default value: `{}`
##### `keys`
Data type: `Hash`
-Creates new `apt::key` resources. Valid options: a hash to be passed to the create_resources function linked above.
+Hash of `apt::key` resources.
-Default value: `$apt::params::keys`
+Default value: `{}`
##### `keyrings`
@@ -255,25 +284,25 @@ Default value: `{}`
Data type: `Hash`
-Creates new `apt::ppa` resources. Valid options: a hash to be passed to the create_resources function linked above.
+Hash of `apt::ppa` resources.
-Default value: `$apt::params::ppas`
+Default value: `{}`
##### `pins`
Data type: `Hash`
-Creates new `apt::pin` resources. Valid options: a hash to be passed to the create_resources function linked above.
+Hash of `apt::pin` resources.
-Default value: `$apt::params::pins`
+Default value: `{}`
##### `settings`
Data type: `Hash`
-Creates new `apt::setting` resources. Valid options: a hash to be passed to the create_resources function linked above.
+Hash of `apt::setting` resources.
-Default value: `$apt::params::settings`
+Default value: `{}`
##### `manage_auth_conf`
@@ -282,7 +311,7 @@ Data type: `Boolean`
Specifies whether to manage the /etc/apt/auth.conf file. When true, the file will be overwritten with the entries specified in
the auth_conf_entries parameter. When false, the file will be ignored (note that this does not set the file to absent.
-Default value: `$apt::params::manage_auth_conf`
+Default value: `true`
##### `auth_conf_entries`
@@ -293,15 +322,15 @@ format (similar to what curl uses) and contains the login configuration for APT
https://manpages.debian.org/testing/apt/apt_auth.conf.5.en.html for details. If specified each hash must contain the keys machine, login and
password and no others. Specifying manage_auth_conf and not specifying this parameter will set /etc/apt/auth.conf to absent.
-Default value: `$apt::params::auth_conf_entries`
+Default value: `[]`
##### `auth_conf_owner`
Data type: `String`
-The owner of the file /etc/apt/auth.conf. Default: '_apt' or 'root' on old releases.
+The owner of the file /etc/apt/auth.conf.
-Default value: `$apt::params::auth_conf_owner`
+Default value: `'_apt'`
##### `root`
@@ -309,7 +338,7 @@ Data type: `String`
Specifies root directory of Apt executable.
-Default value: `$apt::params::root`
+Default value: `'/etc/apt'`
##### `sources_list`
@@ -317,7 +346,7 @@ Data type: `String`
Specifies the path of the sources_list file to use.
-Default value: `$apt::params::sources_list`
+Default value: `"${root}/sources.list"`
##### `sources_list_d`
@@ -325,7 +354,7 @@ Data type: `String`
Specifies the path of the sources_list.d file to use.
-Default value: `$apt::params::sources_list_d`
+Default value: `"${root}/sources.list.d"`
##### `conf_d`
@@ -333,7 +362,7 @@ Data type: `String`
Specifies the path of the conf.d file to use.
-Default value: `$apt::params::conf_d`
+Default value: `"${root}/apt.conf.d"`
##### `preferences`
@@ -341,7 +370,7 @@ Data type: `String`
Specifies the path of the preferences file to use.
-Default value: `$apt::params::preferences`
+Default value: `"${root}/preferences"`
##### `preferences_d`
@@ -349,7 +378,7 @@ Data type: `String`
Specifies the path of the preferences.d file to use.
-Default value: `$apt::params::preferences_d`
+Default value: `"${root}/preferences.d"`
##### `config_files`
@@ -357,23 +386,47 @@ Data type: `Hash`
A hash made up of the various configuration files used by Apt.
-Default value: `$apt::params::config_files`
+Default value:
+
+```puppet
+{
+ 'conf' => {
+ 'path' => $conf_d,
+ 'ext' => '',
+ },
+ 'pref' => {
+ 'path' => $preferences_d,
+ 'ext' => '.pref',
+ },
+ 'list' => {
+ 'path' => $sources_list_d,
+ 'ext' => '.list',
+ },
+ }
+```
##### `sources_list_force`
Data type: `Boolean`
-Specifies whether to perform force purge or delete. Default false.
+Specifies whether to perform force purge or delete.
-Default value: `$apt::params::sources_list_force`
+Default value: `false`
##### `include_defaults`
Data type: `Hash`
+The package types to include by default.
+Default value:
-Default value: `$apt::params::include_defaults`
+```puppet
+{
+ 'deb' => true,
+ 'src' => false,
+ }
+```
##### `apt_conf_d`
@@ -381,7 +434,7 @@ Data type: `String`
The path to the file `apt.conf.d`
-Default value: `$apt::params::apt_conf_d`
+Default value: `"${root}/apt.conf.d"`
##### `source_key_defaults`
@@ -1074,7 +1127,7 @@ Default value: `$name`
Data type: `String`
-Specifies whether the Apt source file should exist. Valid options: 'present' and 'absent'.
+Specifies whether the Apt source file should exist.
Default value: `present`
@@ -1102,8 +1155,8 @@ Configures include options. Valid options: a hash of available keys.
Options:
-* **:deb** `Boolean`: Specifies whether to request the distribution's compiled binaries. Default true.
-* **:src** `Boolean`: Specifies whether to request the distribution's uncompiled source code. Default false.
+* **:deb** `Boolean`: Specifies whether to request the distribution's compiled binaries.
+* **:src** `Boolean`: Specifies whether to request the distribution's uncompiled source code.
Default value: `{}`
@@ -1177,7 +1230,7 @@ Default value: `true`
Data type: `Boolean`
-Specifies whether to check if the package release date is valid. Defaults to `True`.
+Specifies whether to check if the package release date is valid.
Default value: `true`
diff --git a/data/os/Debian.yaml b/data/os/Debian.yaml
new file mode 100644
index 0000000000..e7cc38af75
--- /dev/null
+++ b/data/os/Debian.yaml
@@ -0,0 +1,3 @@
+apt::backports:
+ location: http://deb.debian.org/debian
+ repos: main contrib non-free
diff --git a/data/os/Ubuntu.yaml b/data/os/Ubuntu.yaml
new file mode 100644
index 0000000000..20bf4318ba
--- /dev/null
+++ b/data/os/Ubuntu.yaml
@@ -0,0 +1,7 @@
+apt::backports:
+ location: http://archive.ubuntu.com/ubuntu
+ repos: main universe multiverse restricted
+
+apt::ppa_options:
+ - -y
+apt::ppa_package: software-properties-common
diff --git a/manifests/init.pp b/manifests/init.pp
index 78882733df..5ad48433f5 100644
--- a/manifests/init.pp
+++ b/manifests/init.pp
@@ -31,7 +31,7 @@
# See apt::backports for documentation.
#
# @param confs
-# Creates new `apt::conf` resources. Valid options: a hash to be passed to the create_resources function linked above.
+# Hash of `apt::conf` resources.
#
# @param update
# Configures various update settings. Valid options: a hash made up from the following keys:
@@ -40,7 +40,7 @@
# Specifies how often to run `apt-get update`. If the exec resource `apt_update` is notified,
# `apt-get update` runs regardless of this value.
# Valid options:
-# 'always' (at every Puppet run);
+# 'always' (at every Puppet run);
# 'hourly' (if the value of `apt_update_last_success` is less than current epoch time minus 3600);
# 'daily' (if the value of `apt_update_last_success` is less than current epoch time minus 86400);
# 'weekly' (if the value of `apt_update_last_success` is less than current epoch time minus 604800);
@@ -85,22 +85,22 @@
# The default proxy settings that are combined and merged with the passed `proxy` value
#
# @param sources
-# Creates new `apt::source` resources. Valid options: a hash to be passed to the create_resources function linked above.
+# Hash of `apt::source` resources.
#
# @param keys
-# Creates new `apt::key` resources. Valid options: a hash to be passed to the create_resources function linked above.
+# Hash of `apt::key` resources.
#
# @param keyrings
# Hash of `apt::keyring` resources.
#
# @param ppas
-# Creates new `apt::ppa` resources. Valid options: a hash to be passed to the create_resources function linked above.
+# Hash of `apt::ppa` resources.
#
# @param pins
-# Creates new `apt::pin` resources. Valid options: a hash to be passed to the create_resources function linked above.
+# Hash of `apt::pin` resources.
#
# @param settings
-# Creates new `apt::setting` resources. Valid options: a hash to be passed to the create_resources function linked above.
+# Hash of `apt::setting` resources.
#
# @param manage_auth_conf
# Specifies whether to manage the /etc/apt/auth.conf file. When true, the file will be overwritten with the entries specified in
@@ -113,7 +113,7 @@
# password and no others. Specifying manage_auth_conf and not specifying this parameter will set /etc/apt/auth.conf to absent.
#
# @param auth_conf_owner
-# The owner of the file /etc/apt/auth.conf. Default: '_apt' or 'root' on old releases.
+# The owner of the file /etc/apt/auth.conf.
#
# @param root
# Specifies root directory of Apt executable.
@@ -137,9 +137,10 @@
# A hash made up of the various configuration files used by Apt.
#
# @param sources_list_force
-# Specifies whether to perform force purge or delete. Default false.
+# Specifies whether to perform force purge or delete.
#
# @param include_defaults
+# The package types to include by default.
#
# @param apt_conf_d
# The path to the file `apt.conf.d`
@@ -148,47 +149,79 @@
# The fault `source_key` settings
#
class apt (
- Hash $update_defaults = $apt::params::update_defaults,
- Hash $purge_defaults = $apt::params::purge_defaults,
- Hash $proxy_defaults = $apt::params::proxy_defaults,
- Hash $include_defaults = $apt::params::include_defaults,
- String $provider = $apt::params::provider,
- String $keyserver = $apt::params::keyserver,
- Optional[String] $key_options = $apt::params::key_options,
- Optional[Array[String]] $ppa_options = $apt::params::ppa_options,
- Optional[String] $ppa_package = $apt::params::ppa_package,
- Optional[Hash] $backports = $apt::params::backports,
- Hash $confs = $apt::params::confs,
- Hash $update = $apt::params::update,
- Hash $purge = $apt::params::purge,
- Apt::Proxy $proxy = $apt::params::proxy,
- Hash $sources = $apt::params::sources,
- Hash $keys = $apt::params::keys,
- Hash $keyrings = {},
- Hash $ppas = $apt::params::ppas,
- Hash $pins = $apt::params::pins,
- Hash $settings = $apt::params::settings,
- Boolean $manage_auth_conf = $apt::params::manage_auth_conf,
- Array[Apt::Auth_conf_entry] $auth_conf_entries = $apt::params::auth_conf_entries,
- String $auth_conf_owner = $apt::params::auth_conf_owner,
- String $root = $apt::params::root,
- String $sources_list = $apt::params::sources_list,
- String $sources_list_d = $apt::params::sources_list_d,
- String $conf_d = $apt::params::conf_d,
- String $preferences = $apt::params::preferences,
- String $preferences_d = $apt::params::preferences_d,
- String $apt_conf_d = $apt::params::apt_conf_d,
- Hash $config_files = $apt::params::config_files,
- Boolean $sources_list_force = $apt::params::sources_list_force,
-
+ Hash $update_defaults = {
+ 'frequency' => 'reluctantly',
+ 'loglevel' => undef,
+ 'timeout' => undef,
+ 'tries' => undef,
+ },
+ Hash $purge_defaults = {
+ 'sources.list' => false,
+ 'sources.list.d' => false,
+ 'preferences' => false,
+ 'preferences.d' => false,
+ 'apt.conf.d' => false,
+ },
+ Hash $proxy_defaults = {
+ 'ensure' => undef,
+ 'host' => undef,
+ 'port' => 8080,
+ 'https' => false,
+ 'https_acng' => false,
+ 'direct' => false,
+ },
+ Hash $include_defaults = {
+ 'deb' => true,
+ 'src' => false,
+ },
+ String $provider = '/usr/bin/apt-get',
+ String $keyserver = 'keyserver.ubuntu.com',
+ Optional[String] $key_options = undef,
+ Optional[Array[String]] $ppa_options = undef,
+ Optional[String] $ppa_package = undef,
+ Optional[Hash] $backports = undef,
+ Hash $confs = {},
+ Hash $update = {},
+ Hash $purge = {},
+ Apt::Proxy $proxy = {},
+ Hash $sources = {},
+ Hash $keys = {},
+ Hash $keyrings = {},
+ Hash $ppas = {},
+ Hash $pins = {},
+ Hash $settings = {},
+ Boolean $manage_auth_conf = true,
+ Array[Apt::Auth_conf_entry] $auth_conf_entries = [],
+ String $auth_conf_owner = '_apt',
+ String $root = '/etc/apt',
+ String $sources_list = "${root}/sources.list",
+ String $sources_list_d = "${root}/sources.list.d",
+ String $conf_d = "${root}/apt.conf.d",
+ String $preferences = "${root}/preferences",
+ String $preferences_d = "${root}/preferences.d",
+ String $apt_conf_d = "${root}/apt.conf.d",
+ Hash $config_files = {
+ 'conf' => {
+ 'path' => $conf_d,
+ 'ext' => '',
+ },
+ 'pref' => {
+ 'path' => $preferences_d,
+ 'ext' => '.pref',
+ },
+ 'list' => {
+ 'path' => $sources_list_d,
+ 'ext' => '.list',
+ },
+ },
+ Boolean $sources_list_force = false,
Hash $source_key_defaults = {
'server' => $keyserver,
'options' => undef,
'content' => undef,
'source' => undef,
- }
-
-) inherits apt::params {
+ },
+) {
if $facts['os']['family'] != 'Debian' {
fail('This module only works on Debian or derivatives like Ubuntu')
}
@@ -342,30 +375,40 @@
notify => Class['apt::update'],
}
- if $confs {
- create_resources('apt::conf', $confs)
+ $confs.each |$key, $value| {
+ apt::conf { $key:
+ * => $value,
+ }
}
- # manage sources if present
- if $sources {
- create_resources('apt::source', $sources)
+
+ $sources.each |$key, $value| {
+ apt::source { $key:
+ * => $value,
+ }
}
- # manage keys if present
- if $keys {
- create_resources('apt::key', $keys)
+
+ $keys.each |$key, $value| {
+ apt::key { $key:
+ * => $value,
+ }
}
- # manage keyrings if present
+
$keyrings.each |$key, $data| {
apt::keyring { $key:
* => $data,
}
}
- # manage ppas if present
- if $ppas {
- create_resources('apt::ppa', $ppas)
+
+ $ppas.each |$key, $value| {
+ apt::ppa { $key:
+ * => $value,
+ }
}
- # manage settings if present
- if $settings {
- create_resources('apt::setting', $settings)
+
+ $settings.each |$key, $value| {
+ apt::setting { $key:
+ * => $value,
+ }
}
if $manage_auth_conf {
@@ -374,7 +417,11 @@
default => 'present',
}
- $auth_conf_tmp = stdlib::deferrable_epp('apt/auth_conf.epp', { 'auth_conf_entries' => $auth_conf_entries })
+ $auth_conf_tmp = stdlib::deferrable_epp('apt/auth_conf.epp',
+ {
+ 'auth_conf_entries' => $auth_conf_entries,
+ },
+ )
file { '/etc/apt/auth.conf':
ensure => $auth_conf_ensure,
@@ -386,9 +433,10 @@
}
}
- # manage pins if present
- if $pins {
- create_resources('apt::pin', $pins)
+ $pins.each |$key, $value| {
+ apt::pin { $key:
+ * => $value,
+ }
}
case $facts['os']['name'] {
diff --git a/manifests/params.pp b/manifests/params.pp
deleted file mode 100644
index c2fe0b48b1..0000000000
--- a/manifests/params.pp
+++ /dev/null
@@ -1,107 +0,0 @@
-# @summary Provides defaults for the Apt module parameters.
-#
-# @api private
-#
-class apt::params {
- if $facts['os']['family'] != 'Debian' {
- fail('This module only works on Debian or derivatives like Ubuntu')
- }
-
- $root = '/etc/apt'
- $provider = '/usr/bin/apt-get'
- $sources_list = "${root}/sources.list"
- $sources_list_force = false
- $sources_list_d = "${root}/sources.list.d"
- $trusted_gpg_d = "${root}/trusted.gpg.d"
- $conf_d = "${root}/apt.conf.d"
- $preferences = "${root}/preferences"
- $preferences_d = "${root}/preferences.d"
- $apt_conf_d = "${root}/apt.conf.d"
- $keyserver = 'keyserver.ubuntu.com'
- $key_options = undef
- $confs = {}
- $update = {}
- $purge = {}
- $proxy = {}
- $sources = {}
- $keys = {}
- $ppas = {}
- $pins = {}
- $settings = {}
- $manage_auth_conf = true
- $auth_conf_entries = []
-
- $config_files = {
- 'conf' => {
- 'path' => $conf_d,
- 'ext' => '',
- },
- 'pref' => {
- 'path' => $preferences_d,
- 'ext' => '.pref',
- },
- 'list' => {
- 'path' => $sources_list_d,
- 'ext' => '.list',
- },
- }
-
- $update_defaults = {
- 'frequency' => 'reluctantly',
- 'loglevel' => undef,
- 'timeout' => undef,
- 'tries' => undef,
- }
-
- $proxy_defaults = {
- 'ensure' => undef,
- 'host' => undef,
- 'port' => 8080,
- 'https' => false,
- 'https_acng' => false,
- 'direct' => false,
- }
-
- $purge_defaults = {
- 'sources.list' => false,
- 'sources.list.d' => false,
- 'preferences' => false,
- 'preferences.d' => false,
- 'apt.conf.d' => false,
- }
-
- $include_defaults = {
- 'deb' => true,
- 'src' => false,
- }
-
- case $facts['os']['name'] {
- 'Debian': {
- $backports = {
- 'location' => 'http://deb.debian.org/debian',
- 'repos' => 'main contrib non-free',
- }
- $ppa_options = undef
- $ppa_package = undef
- $auth_conf_owner = '_apt'
- }
- 'Ubuntu': {
- $backports = {
- 'location' => 'http://archive.ubuntu.com/ubuntu',
- 'repos' => 'main universe multiverse restricted',
- }
- $ppa_options = ['-y']
- $ppa_package = 'software-properties-common'
- $auth_conf_owner = '_apt'
- }
- undef: {
- fail('Unable to determine value for fact os[\"name\"]')
- }
- default: {
- $ppa_options = undef
- $ppa_package = undef
- $backports = undef
- $auth_conf_owner = 'root'
- }
- }
-}
diff --git a/manifests/source.pp b/manifests/source.pp
index 5c64dd1ed2..776c5f7a43 100644
--- a/manifests/source.pp
+++ b/manifests/source.pp
@@ -28,7 +28,7 @@
# Supplies a comment for adding to the Apt source file.
#
# @param ensure
-# Specifies whether the Apt source file should exist. Valid options: 'present' and 'absent'.
+# Specifies whether the Apt source file should exist.
#
# @param release
# Specifies a distribution of the Apt repository.
@@ -40,10 +40,10 @@
# Configures include options. Valid options: a hash of available keys.
#
# @option include [Boolean] :deb
-# Specifies whether to request the distribution's compiled binaries. Default true.
+# Specifies whether to request the distribution's compiled binaries.
#
# @option include [Boolean] :src
-# Specifies whether to request the distribution's uncompiled source code. Default false.
+# Specifies whether to request the distribution's uncompiled source code.
#
# @param key
# Creates an `apt::keyring` in `/etc/apt/keyrings` (or anywhere on disk given `filename`) Valid options:
@@ -77,7 +77,7 @@
# Specifies whether to trigger an `apt-get update` run.
#
# @param check_valid_until
-# Specifies whether to check if the package release date is valid. Defaults to `True`.
+# Specifies whether to check if the package release date is valid.
#
define apt::source (
Optional[String] $location = undef,
@@ -209,10 +209,12 @@
$_architecture = undef
}
- $sourcelist = epp('apt/source.list.epp', {
+ $sourcelist = epp('apt/source.list.epp',
+ {
'comment' => $comment,
'includes' => $includes,
- 'options' => delete_undef_values({
+ 'options' => delete_undef_values(
+ {
'arch' => $_architecture,
'trusted' => $allow_unsigned ? { true => 'yes', false => undef },
'allow-insecure' => $allow_insecure ? { true => 'yes', false => undef },
@@ -222,7 +224,7 @@
),
'location' => $_location,
'components' => $_components,
- }
+ },
)
apt::setting { "list-${name}":
@@ -246,6 +248,9 @@
} else {
fail('Received invalid value for pin parameter')
}
- create_resources('apt::pin', { "${name}" => $_pin })
+
+ apt::pin { $name:
+ * => $_pin,
+ }
}
}
diff --git a/metadata.json b/metadata.json
index 0f509b1126..12280e25ff 100644
--- a/metadata.json
+++ b/metadata.json
@@ -17,8 +17,8 @@
{
"operatingsystem": "Debian",
"operatingsystemrelease": [
- "10",
- "11"
+ "11",
+ "12"
]
},
{
@@ -37,6 +37,6 @@
}
],
"template-url": "https://github.com/puppetlabs/pdk-templates.git#main",
- "template-ref": "heads/main-0-g79a2f93",
- "pdk-version": "3.0.0"
+ "template-ref": "heads/main-0-gdd25cb0",
+ "pdk-version": "3.2.0"
}
diff --git a/readmes/README_ja_JP.md b/readmes/README_ja_JP.md
deleted file mode 100644
index be8ac75f52..0000000000
--- a/readmes/README_ja_JP.md
+++ /dev/null
@@ -1,292 +0,0 @@
-# apt
-
-#### 目次
-
-1. [説明 - モジュールの機能とその有益性](#module-description)
-1. [セットアップ - apt導入の基本](#setup)
- * [aptが影響を与えるもの](#what-apt-affects)
- * [aptの使用を開始する](#beginning-with-apt)
-1. [使用 - 設定オプションと追加機能](#usage)
- * [GPGキーの追加](#add-gpg-keys)
- * [バックポートの優先度を上げる](#prioritize-backports)
- * [パッケージリストの更新](#update-the-list-of-packages)
- * [特定のリリースのピン止め](#pin-a-specific-release)
- * [PPA (Personal Package Archive)レポジトリの追加](#add-a-personal-package-archive-repository)
- * [HieraからのAptの構成](#configure-apt-from-hiera)
- * [デフォルトのsources.listファイルの置き換え](#replace-the-default-sourceslist-file)
-1. [参考 - モジュールの機能と動作について](#reference)
-1. [制約 - OS互換性など](#limitations)
-1. [開発 - モジュール貢献についてのガイド](#development)
-
-## モジュールの概要
-
-aptモジュールを導入すると、Puppetを使用してAPT (Advanced Package Tool)のソース、キー、その他の構成オプションを管理できます。
-
-APTとは、Debian、Ubuntu、およびその他いくつかのオペレーティングシステムで利用可能なパッケージマネージャです。aptモジュールは、APTのパッケージ管理を自動化するのに役立つ一連のクラス、定義型、およびfactsを提供します。
-
-**注**:Puppet 7 より前は、このモジュールがどのバージョンのを正しく自動検出するか
-実行している Debian / Ubuntu(または派生物)、 `lsb-release`パッケージが
-インストールされています。 Puppet 7 では、 `lsb-release`パッケージは必要ありません。
-
-## セットアップ
-
-### aptが影響を与えるもの
-
-* システムの`preferences`ファイルと`preferences.d`ディレクトリ
-* システムの `sources.list`ファイルと`sources.list.d`ディレクトリ
-* システムレポジトリ
-* 認証キー
-
-**注意:** このモジュールには`purge`パラメータがあります。このパラメータを`true`に設定すると、 ノードの `sources.list(.d)`および`preferences(.d)`の構成のうち、Puppetを通して宣言されていないものがすべて**破棄**されます。このパラメータのデフォルトは`false`です。
-
-### aptの使用を開始する
-
-デフォルトのパラメータでaptモジュールを使用するには、`apt`クラスを宣言します。
-
-```puppet
-include apt
-```
-
-**注意:** メインの`apt`クラスは、このモジュールに含まれるその他すべてのクラス、型、定義型によって要求されます。このモジュールを使用する際は、このクラスを必ず宣言する必要があります。
-
-## 使用
-
-### GPGキーの追加
-
-**警告:** 短いキーIDを使用すると、衝突攻撃が有効になる可能性があり、セキュリティに深刻な問題が生じます。常に、完全なフィンガープリントを使用してGPGキーを識別することを推奨します。このモジュールでは短いキーの使用が許可されていますが、それを使用した場合、セキュリティ警告が発行されます。
-
-`apt::key`の定義型を宣言するには、次のように記述します。
-
-```puppet
-apt::key { 'puppetlabs':
- id => '6F6B15509CF8E59E6E469F327F438280EF8D349F',
- server => 'pgp.mit.edu',
- options => 'http-proxy="http://proxyuser:proxypass@example.org:3128"',
-}
-```
-
-### バックポートの優先度を上げる
-
-```puppet
-class { 'apt::backports':
- pin => 500,
-}
-```
-
-デフォルトでは、`apt::backports`クラスはバックポート用のピンファイルをドロップし、優先度200にピン止めします。これは、通常のデフォルト値である500よりも低いため、`ensure => latest`に設定されているパッケージは、明示的な許可がない限り、バックポートからアップグレードされることはありません。
-
-`pin`パラメータを使用して優先度を500に上げると、通常のポリシーが有効になり、Aptは最新のバージョンをインストールするか、最新のバージョンにアップグレードします。これはつまり、`package`リソースの`ensure`属性を明示的に`installed`/`present`もしくは特定のバージョンに設定していない限り、あるパッケージがバックポートから利用できる場合は、そのパッケージと依存関係がバックポートから取得されるということです。
-
-### パッケージリストの更新
-
-デフォルトでは、`apt`クラスをインクルードした後の最初のPuppet実行時と、`notify => Exec['apt_update']`が発生するたびに(別の言い方をすれば、構成ファイルが更新されるか、関連するその他の変更が行われるたびに)、Puppetは`apt-get update`を実行します。`update['frequency']`を'always'に設定すると、Puppet実行時に毎回更新が行われます。`update['frequency']`は'daily'や'weekly'に設定することも可能です。
-
-```puppet
-class { 'apt':
- update => {
- frequency => 'daily',
- },
-}
-```
-`Exec['apt_update']`がトリガされると、`Notice`メッセージが生成されます。デフォルトの[agentロギングレベル](https://docs.puppet.com/puppet/latest/configuration.html#loglevel)は`notice`であるため、このレポジトリの更新は、ログおよびagentレポートに記録されます。[Foreman](https://www.theforeman.org)など、一部のツールでは、このような更新通知が重要な変更としてレポートされます。これらの更新がレポートに記録されないようにするには、`Exec['apt_update']`の[loglevel](https://docs.puppet.com/puppet/latest/metaparameter.html#loglevel)メタパラメータをagentロギングレベルよりも高い値に設定します。
-
-```puppet
-class { 'apt':
- update => {
- frequency => 'daily',
- loglevel => 'debug',
- },
-}
-```
-
-### 特定のリリースのピン止め
-
-```puppet
-apt::pin { 'karmic': priority => 700 }
-apt::pin { 'karmic-updates': priority => 700 }
-apt::pin { 'karmic-security': priority => 700 }
-```
-
-ディストリビューションのプロパティを使用して、より複雑なピンを指定することもできます。
-
-```puppet
-apt::pin { 'stable':
- priority => -10,
- originator => 'Debian',
- release_version => '3.0',
- component => 'main',
- label => 'Debian'
-}
-```
-
-複数のパッケージをピン止めするには、配列またはスペース区切りの文字列としてその情報を`packages`パラメータに渡します。
-
-### PPA (Personal Package Archive)レポジトリの追加
-
-```puppet
-apt::ppa { 'ppa:drizzle-developers/ppa': }
-```
-
-### `/etc/apt/sources.list.d/`へのAptソースの追加
-
-```puppet
-apt::source { 'debian_unstable':
- comment => 'This is the iWeb Debian unstable mirror',
- location => 'http://debian.mirror.iweb.ca/debian/',
- release => 'unstable',
- repos => 'main contrib non-free',
- pin => '-10',
- key => {
- 'id' => 'A1BD8E9D78F7FE5C3E65D8AF8B48AD6246925553',
- 'server' => 'subkeys.pgp.net',
- },
- include => {
- 'src' => true,
- 'deb' => true,
- },
-}
-```
-
-Puppet Aptレポジトリをソースとして使用するには、次のように記述します。
-
-```puppet
-apt::source { 'puppetlabs':
- location => 'http://apt.puppetlabs.com',
- repos => 'main',
- key => {
- 'id' => '6F6B15509CF8E59E6E469F327F438280EF8D349F',
- 'server' => 'pgp.mit.edu',
- },
-}
-```
-
-### HieraからのAptの構成
-
-ソースをリソースとして直接指定するかわりに、単純に`apt`クラスをインクルードして、値をHieraから自動的に取得するように構成できます。
-
-```yaml
-apt::sources:
- 'debian_unstable':
- comment: 'This is the iWeb Debian unstable mirror'
- location: 'http://debian.mirror.iweb.ca/debian/'
- release: 'unstable'
- repos: 'main contrib non-free'
- pin: '-10'
- key:
- id: 'A1BD8E9D78F7FE5C3E65D8AF8B48AD6246925553'
- server: 'subkeys.pgp.net'
- include:
- src: true
- deb: true
-
- 'puppetlabs':
- location: 'http://apt.puppetlabs.com'
- repos: 'main'
- key:
- id: '6F6B15509CF8E59E6E469F327F438280EF8D349F'
- server: 'pgp.mit.edu'
-```
-
-### デフォルトの`sources.list`ファイルの置き換え
-
-デフォルトの`/etc/apt/sources.list`を置き換える例を以下に示します。以下のコードと合わせて、`purge`パラメータを必ず使用してください。使用しない場合、Apt実行時にソース重複の警告が出ます。
-
-```puppet
-apt::source { "archive.ubuntu.com-${facts['os']['distro']['codename']}":
- location => 'http://archive.ubuntu.com/ubuntu',
- key => '630239CC130E1A7FD81A27B140976EAF437D05B5',
- repos => 'main universe multiverse restricted',
-}
-
-apt::source { "archive.ubuntu.com-${facts['os']['distro']['codename']}-security":
- location => 'http://archive.ubuntu.com/ubuntu',
- key => '630239CC130E1A7FD81A27B140976EAF437D05B5',
- repos => 'main universe multiverse restricted',
- release => "${facts['os']['distro']['codename']}-security"
-}
-
-apt::source { "archive.ubuntu.com-${facts['os']['distro']['codename']}-updates":
- location => 'http://archive.ubuntu.com/ubuntu',
- key => '630239CC130E1A7FD81A27B140976EAF437D05B5',
- repos => 'main universe multiverse restricted',
- release => "${facts['os']['distro']['codename']}-updates"
-}
-
-apt::source { "archive.ubuntu.com-${facts['os']['distro']['codename']}-backports":
- location => 'http://archive.ubuntu.com/ubuntu',
- key => '630239CC130E1A7FD81A27B140976EAF437D05B5',
- repos => 'main universe multiverse restricted',
- release => "${facts['os']['distro']['codename']}-backports"
-}
-```
-
-### APTソースやプロキシのログイン設定を`/etc/apt/auth.conf`で管理する
-
-APTバージョン1.5以降、認証が必要なAPTソースやプロキシについて、ユーザ名やパスワードなどのログイン設定を`/etc/apt/auth.conf`ファイルに定義できるようになりました。この方法は、`source.list`内にログイン情報を直接記述するよりも推奨されます。直接記述した場合、通常、あらゆるユーザから読み取り可能になるためです。
-
-`/etc/apt/auth.confファイルのフォーマットは、(ftpやcurlによって使用される) netrcに従い、ファイルパーミッションが制限されています。詳しくは、[こちら](https://manpages.debian.org/testing/apt/apt_auth.conf.5.en.html)を参照してください。
-
-オプションの`apt::auth_conf_entries`パラメータを使用して、ログイン設定を含むハッシュの配列を指定します。このハッシュに含めることができるのは、`machine`、`login`、および`password`キーのみです。
-
-```puppet
-class { 'apt':
- auth_conf_entries => [
- {
- 'machine' => 'apt-proxy.example.net',
- 'login' => 'proxylogin',
- 'password' => 'proxypassword',
- },
- {
- 'machine' => 'apt.example.com/ubuntu',
- 'login' => 'reader',
- 'password' => 'supersecret',
- },
- ],
-}
-```
-
-## リファレンス
-
-### Facts
-
-* `apt_updates`: `upgrade`で入手可能な更新がある、インストール済みパッケージの数。
-
-* `apt_dist_updates`: `dist-upgrade`で入手可能な更新がある、インストール済みパッケージの数。
-
-* `apt_security_updates`: `upgrade`で入手可能なセキュリティ更新がある、インストール済みパッケージの数。
-
-* `apt_security_dist_updates`: `dist-upgrade`で入手可能なセキュリティ更新がある、インストール済みパッケージの数。
-
-* `apt_package_updates`: `upgrade`で入手可能な更新がある、すべてのインストール済みパッケージの名前。Facter 2.0以降では、このデータのフォーマットは配列で、それ以前のバージョンでは、コンマ区切りの文字列です。
-
-* `apt_package_dist_updates`: `dist-upgrade`で入手可能な更新がある、すべてのインストール済みパッケージの名前。Facter 2.0以降では、このデータのフォーマットは配列で、それ以前のバージョンでは、コンマ区切りの文字列です。
-
-* `apt_update_last_success`: 直近で成功した`apt-get update`実行のエポックタイムによる日付(/var/lib/apt/periodic/update-success-stampのmtimeに基づく)。
-
-* `apt_reboot_required`: 更新がインストールされた後に再起動が必要かどうかを決定します。
-
-### 詳細情報
-
-その他すべてのリファレンスマニュアルについては、[REFERENCE.md](https://github.com/puppetlabs/puppetlabs-apt/blob/main/REFERENCE.md)を参照してください。
-
-## 制約
-
-このモジュールは、[実行ステージ](https://docs.puppetlabs.com/puppet/latest/reference/lang_run_stages.html)に分割するようには設計されていません。
-
-サポート対象のオペレーティングシステムの全リストについては、[metadata.json](https://github.com/puppetlabs/puppetlabs-apt/blob/main/metadata.json)を参照してください。
-
-### 新しいソースまたはPPAの追加
-
-新しいソースまたはPPAを追加し、同一のPuppet実行において、その新しいソースまたはPPAからパッケージをインストールするには、`package`リソースが`Apt::Source`または`Apt::Ppa`に従属し、かつ`Class['apt::update']に従属する必要があります。[コレクタ](https://docs.puppetlabs.com/puppet/latest/reference/lang_collectors.html)を追加することによって、すべてのパッケージが`apt::update`の後に来るように制御することもできますが、その場合、循環依存が発生したり、[仮想リソース](https://docs.puppetlabs.com/puppet/latest/reference/lang_collectors.html#behavior)と関係したりすることがあります。以下のコマンドを実行する前に、すべてのパッケージのプロバイダがaptに設定されていることを確認してください。
-
-```puppet
-Class['apt::update'] -> Package <| provider == 'apt' |>
-```
-
-## 開発
-
-Puppet ForgeのPuppet Labsモジュールはオープンプロジェクトで、良い状態に保つためには、コミュニティの貢献が必要不可欠です。Puppetが役に立つはずでありながら、私たちがアクセスできないプラットフォームやハードウェア、ソフトウェア、デプロイ構成は無数にあります。私たちの目標は、できる限り簡単に変更に貢献し、みなさまの環境で私たちのモジュールが機能できるようにすることにあります。最高の状態を維持できるようにするために、コントリビュータが従う必要のあるいくつかのガイドラインが存在します。
-
-詳細については、[モジュール貢献ガイド](https://docs.puppetlabs.com/forge/contributing.html)を参照してください。
-
-すでにご協力いただいている方のリストについては、[コントリビュータのリスト](https://github.com/puppetlabs/puppetlabs-apt/graphs/contributors)をご覧ください。
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 6820cebee7..ae7c1f6818 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -25,7 +25,8 @@
next unless File.exist?(f) && File.readable?(f) && File.size?(f)
begin
- default_facts.merge!(YAML.safe_load(File.read(f), permitted_classes: [], permitted_symbols: [], aliases: true))
+ require 'deep_merge'
+ default_facts.deep_merge!(YAML.safe_load(File.read(f), permitted_classes: [], permitted_symbols: [], aliases: true))
rescue StandardError => e
RSpec.configuration.reporter.message "WARNING: Unable to load #{f}: #{e}"
end
@@ -33,7 +34,7 @@
# read default_facts and merge them over what is provided by facterdb
default_facts.each do |fact, value|
- add_custom_fact fact, value
+ add_custom_fact fact, value, merge_facts: true
end
RSpec.configure do |c|