#### Table of Contents
-
1. [Module Description - What the module does and why it is useful](#module-description)
1. [Setup - The basics of getting started with apt](#setup)
* [What apt affects](#what-apt-affects)
1. [Development - Guide for contributing to the module](#development)
<a id="module-description"></a>
+
## Module Description
The apt module lets you use Puppet to manage APT (Advanced Package Tool) sources, keys, and other configuration options.
**Note**: For this module to correctly autodetect which version of Debian/Ubuntu (or derivative) you're running, you need to make sure the 'lsb-release' package is installed. We highly recommend you either make this part of your provisioning layer, if you run many Debian or derivative systems, or ensure that you have Facter 2.2.0 or later installed, which will pull this dependency in for you.
<a id="setup"></a>
+
## Setup
<a id="what-apt-affects"></a>
+
### What apt affects
* Your system's `preferences` file and `preferences.d` directory
**Note:** This module offers `purge` parameters which, if set to `true`, **destroy** any configuration on the node's `sources.list(.d)`, `preferences(.d)` and `apt.conf.d` that you haven't declared through Puppet. The default for these parameters is `false`.
<a id="beginning-with-apt"></a>
+
### Beginning with apt
To use the apt module with default parameters, declare the `apt` class.
**Note:** The main `apt` class is required by all other classes, types, and defined types in this module. You must declare it whenever you use the module.
<a id="usage"></a>
+
## Usage
<a id="add-gpg-keys"></a>
+
### Add GPG keys
**Warning:** Using short key IDs presents a serious security issue, potentially leaving you open to collision attacks. We recommend you always use full fingerprints to identify your GPG keys. This module allows short keys, but issues a security warning if you use them.
```
<a id="prioritize-backports"></a>
+
### Prioritize backports
```puppet
If you raise the priority through the `pin` parameter to 500, normal policy goes into effect and Apt installs or upgrades to the newest version. This means that if a package is available from backports, it and its dependencies are pulled in from backports unless you explicitly set the `ensure` attribute of the `package` resource to `installed`/`present` or a specific version.
<a id="update-the-list-of-packages"></a>
+
### Update the list of packages
-By default, Puppet runs `apt-get update` on the first Puppet run after you include the `apt` class, and anytime `notify => Exec['apt_update']` occurs; i.e., whenever config files get updated or other relevant changes occur. If you set `update['frequency']` to 'always', the update runs on every Puppet run. You can also set `update['frequency']` to 'daily' or 'weekly':
+By default, Puppet runs `apt-get update` on the first Puppet run after you include the `apt` class, and anytime `notify => Exec['apt_update']` occurs; i.e., whenever config files get updated or other relevant changes occur. If you set `update['frequency']` to 'always', the update runs on every Puppet run. You can also set `update['frequency']` to 'daily' or 'weekly':
```puppet
class { 'apt':
},
}
```
+
When `Exec['apt_update']` is triggered, it generates a `notice`-level message. Because the default [logging level for agents](https://puppet.com/docs/puppet/latest/configuration.html#loglevel) is `notice`, this causes the repository update to appear in agent logs. To silence these updates from the default log output, set the [loglevel](https://puppet.com/docs/puppet/latest/metaparameter.html#loglevel) metaparameter for `Exec['apt_update']` above the agent logging level:
```puppet
> **NOTE:** Every `Exec['apt_update']` run will generate a corrective change, even if the apt caches are not updated. For example, setting an update frequency of `always` can result in every Puppet run resulting in a corrective change. This is a known issue. For details, see [MODULES-10763](https://tickets.puppetlabs.com/browse/MODULES-10763).
<a id="pin-a-specific-release"></a>
+
### Pin a specific release
```puppet
To pin multiple packages, pass them to the `packages` parameter as an array or a space-delimited string.
<a id="add-a-personal-package-archive-repository"></a>
+
### Add a Personal Package Archive (PPA) repository
```puppet
```
<a id="configure-apt-from-hiera"></a>
+
### Configure Apt from Hiera
Instead of specifying your sources directly as resources, you can instead just include the `apt` class, which will pick up the values automatically from hiera.
```
<a id="replace-the-default-sourceslist-file"></a>
+
### Replace the default `sources.list` file
The following example replaces the default `/etc/apt/sources.list`. Along with this code, be sure to use the `purge` parameter, or you might get duplicate source warnings when running Apt.
```puppet
-apt::source { "archive.ubuntu.com-${lsbdistcodename}":
+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-${lsbdistcodename}-security":
+apt::source { "archive.ubuntu.com-${facts['os']['distro']['codename']}-security":
location => 'http://archive.ubuntu.com/ubuntu',
key => '630239CC130E1A7FD81A27B140976EAF437D05B5',
repos => 'main universe multiverse restricted',
- release => "${lsbdistcodename}-security"
+ release => "${facts['os']['distro']['codename']}-security"
}
-apt::source { "archive.ubuntu.com-${lsbdistcodename}-updates":
+apt::source { "archive.ubuntu.com-${facts['os']['distro']['codename']}-updates":
location => 'http://archive.ubuntu.com/ubuntu',
key => '630239CC130E1A7FD81A27B140976EAF437D05B5',
repos => 'main universe multiverse restricted',
- release => "${lsbdistcodename}-updates"
+ release => "${facts['os']['distro']['codename']}-updates"
}
-apt::source { "archive.ubuntu.com-${lsbdistcodename}-backports":
+apt::source { "archive.ubuntu.com-${facts['os']['distro']['codename']}-backports":
location => 'http://archive.ubuntu.com/ubuntu',
key => '630239CC130E1A7FD81A27B140976EAF437D05B5',
repos => 'main universe multiverse restricted',
- release => "${lsbdistcodename}-backports"
+ release => "${facts['os']['distro']['codename']}-backports"
}
```
```
<a id="reference"></a>
+
## Reference
### Facts
See [REFERENCE.md](https://github.com/puppetlabs/puppetlabs-apt/blob/main/REFERENCE.md) for all other reference documentation.
-<a id="limitations"></a>
+<a id="limitations"></a>
+
## Limitations
This module is not designed to be split across [run stages](https://docs.puppetlabs.com/puppet/latest/reference/lang_run_stages.html).
## Development
Acceptance tests for this module leverage [puppet_litmus](https://github.com/puppetlabs/puppet_litmus).
-To run the acceptance tests follow the instructions [here](https://github.com/puppetlabs/puppet_litmus/wiki/Tutorial:-use-Litmus-to-execute-acceptance-tests-with-a-sample-module-(MoTD)#install-the-necessary-gems-for-the-module).
+To run the acceptance tests follow the instructions [here](<https://github.com/puppetlabs/puppet_litmus/wiki/Tutorial:-use-Litmus-to-execute-acceptance-tests-with-a-sample-module-(MoTD)#install-the-necessary-gems-for-the-module>).
You can also find a tutorial and walkthrough of using Litmus and the PDK on [YouTube](https://www.youtube.com/watch?v=FYfR7ZEGHoE).
If you run into an issue with this module, or if you would like to request a feature, please [file a ticket](https://tickets.puppetlabs.com/browse/MODULES/).
Data type: `Optional[String]`
Specifies a distribution of the Apt repository containing the backports to manage. Used in populating the `source.list` configuration file.
-Default: on Debian and Ubuntu, '${lsbdistcodename}-backports'. We recommend keeping this default, except on other operating
+Default: on Debian and Ubuntu, `${facts['os']['distro']['codename']}-backports`. We recommend keeping this default, except on other operating
systems.
Default value: ``undef``
Data type: `Optional[String]`
-Optional if lsb-release is installed (unless you're using a different release than indicated by lsb-release, e.g., Linux Mint).
Specifies the operating system of your node. Valid options: a string containing a valid LSB distribution codename.
+Optional if `puppet facts show os.distro.codename` returns your correct distribution release codename.
-Default value: `$facts['lsbdistcodename']`
+Default value: `$facts['os']['distro']['codename']`
##### `dist`
Data type: `Optional[String]`
-Optional if lsb-release is installed (unless you're using a different release than indicated by lsb-release, e.g., Linux Mint).
Specifies the distribution of your node. Valid options: a string containing a valid distribution codename.
+Optional if `puppet facts show os.name` returns your correct distribution name.
-Default value: `$facts['lsbdistid']`
+Default value: `$facts['os']['name']`
##### `package_name`
class { 'apt': }
# Install the puppetlabs apt source
-# Release is automatically obtained from lsbdistcodename fact if available.
+# Release is automatically obtained from facts.
apt::source { 'puppetlabs':
location => 'http://apt.puppetlabs.com',
repos => 'main',
msgstr "パラメータreleaseとoriginは相互に排他的です。"
#. ./manifests/ppa.pp:30 ./manifests/source.pp:79
-msgid "lsbdistcodename fact not available: release parameter required"
-msgstr "lsbdistcodenameのfactが使用できません。releaseパラメータが必要です。"
+msgid "os.distro.codename fact not available: release parameter required"
+msgstr "os.distro.codenameのfactが使用できません。releaseパラメータが必要です。"
#. ./manifests/ppa.pp:34
msgid "apt::ppa is not currently supported on Debian."
msgstr ""
#. ./manifests/ppa.pp:30 ./manifests/source.pp:79
-msgid "lsbdistcodename fact not available: release parameter required"
+msgid "os.distro.codename fact not available: release parameter required"
msgstr ""
#. ./manifests/ppa.pp:34
#
# @param release
# Specifies a distribution of the Apt repository containing the backports to manage. Used in populating the `source.list` configuration file.
-# Default: on Debian and Ubuntu, '${lsbdistcodename}-backports'. We recommend keeping this default, except on other operating
+# Default: on Debian and Ubuntu, `${facts['os']['distro']['codename']}-backports`. We recommend keeping this default, except on other operating
# systems.
#
# @param repos
if $key {
$_key = $key
}
- if (!($facts['lsbdistid'] == 'Debian' or $facts['lsbdistid'] == 'Ubuntu')) {
+ if (!($facts['os']['name'] == 'Debian' or $facts['os']['name'] == 'Ubuntu')) {
unless $location and $release and $repos and $key {
fail(translate('If not on Debian or Ubuntu, you must explicitly pass location, release, repos, and key'))
}
$_location = $::apt::backports['location']
}
unless $release {
- $_release = "${facts['lsbdistcodename']}-backports"
+ $_release = "${facts['os']['distro']['codename']}-backports"
}
unless $repos {
$_repos = $::apt::backports['repos']
Boolean $sources_list_force = $apt::params::sources_list_force,
) inherits apt::params {
- if $facts['osfamily'] != 'Debian' {
+ if $facts['os']['family'] != 'Debian' {
fail(translate('This module only works on Debian or derivatives like Ubuntu'))
}
# @summary Provides defaults for the Apt module parameters.
-#
+#
# @api private
#
class apt::params {
- if $::osfamily != 'Debian' {
+ if $facts['os']['family'] != 'Debian' {
fail(translate('This module only works on Debian or derivatives like Ubuntu'))
}
# Supplies options to be passed to the `add-apt-repository` command. Default: '-y'.
#
# @param release
-# Optional if lsb-release is installed (unless you're using a different release than indicated by lsb-release, e.g., Linux Mint).
# Specifies the operating system of your node. Valid options: a string containing a valid LSB distribution codename.
+# Optional if `puppet facts show os.distro.codename` returns your correct distribution release codename.
#
# @param dist
-# Optional if lsb-release is installed (unless you're using a different release than indicated by lsb-release, e.g., Linux Mint).
# Specifies the distribution of your node. Valid options: a string containing a valid distribution codename.
+# Optional if `puppet facts show os.name` returns your correct distribution name.
#
# @param package_name
# Names the package that provides the `apt-add-repository` command. Default: 'software-properties-common'.
define apt::ppa(
String $ensure = 'present',
Optional[String] $options = $::apt::ppa_options,
- Optional[String] $release = $facts['lsbdistcodename'],
- Optional[String] $dist = $facts['lsbdistid'],
+ Optional[String] $release = $facts['os']['distro']['codename'],
+ Optional[String] $dist = $facts['os']['name'],
Optional[String] $package_name = $::apt::ppa_package,
Boolean $package_manage = false,
) {
unless $release {
- fail(translate('lsbdistcodename fact not available: release parameter required'))
+ fail(translate('os.distro.codename fact not available: release parameter required'))
}
if $dist == 'Debian' {
fail(translate('apt::ppa is not currently supported on Debian.'))
}
- if versioncmp($facts['lsbdistrelease'], '14.10') >= 0 {
+ if versioncmp($facts['os']['release']['full'], '14.10') >= 0 {
$distid = downcase($dist)
$dash_filename = regsubst($name, '^ppa:([^/]+)/(.+)$', "\\1-${distid}-\\2")
$underscore_filename = regsubst($name, '^ppa:([^/]+)/(.+)$', "\\1_${distid}_\\2")
$sources_list_d_filename = "${dash_filename_no_specialchars}-${release}.list"
- if versioncmp($facts['lsbdistrelease'], '15.10') >= 0 {
+ if versioncmp($facts['os']['release']['full'], '15.10') >= 0 {
$trusted_gpg_d_filename = "${underscore_filename_no_specialchars}.gpg"
} else {
$trusted_gpg_d_filename = "${dash_filename_no_specialchars}.gpg"
$_before = Apt::Setting["list-${title}"]
if !$release {
- if $facts['lsbdistcodename'] {
- $_release = $facts['lsbdistcodename']
+ if $facts['os']['distro']['codename'] {
+ $_release = $facts['os']['distro']['codename']
} else {
- fail(translate('lsbdistcodename fact not available: release parameter required'))
+ fail(translate('os.distro.codename fact not available: release parameter required'))
}
} else {
$_release = $release
}
# Newer oses, do not need the package for HTTPS transport.
$_transport_https_releases = [ 'wheezy', 'jessie', 'stretch', 'trusty', 'xenial' ]
- if ($facts['lsbdistcodename'] in $_transport_https_releases) and $_location =~ /(?i:^https:\/\/)/ {
+ if ($facts['os']['distro']['codename'] in $_transport_https_releases) and $_location =~ /(?i:^https:\/\/)/ {
ensure_packages('apt-transport-https')
}
} else {
#### 目次
-
1. [説明 - モジュールの機能とその有益性](#module-description)
1. [セットアップ - apt導入の基本](#setup)
* [aptが影響を与えるもの](#what-apt-affects)
デフォルトの`/etc/apt/sources.list`を置き換える例を以下に示します。以下のコードと合わせて、`purge`パラメータを必ず使用してください。使用しない場合、Apt実行時にソース重複の警告が出ます。
```puppet
-apt::source { "archive.ubuntu.com-${lsbdistcodename}":
+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-${lsbdistcodename}-security":
+apt::source { "archive.ubuntu.com-${facts['os']['distro']['codename']}-security":
location => 'http://archive.ubuntu.com/ubuntu',
key => '630239CC130E1A7FD81A27B140976EAF437D05B5',
repos => 'main universe multiverse restricted',
- release => "${lsbdistcodename}-security"
+ release => "${facts['os']['distro']['codename']}-security"
}
-apt::source { "archive.ubuntu.com-${lsbdistcodename}-updates":
+apt::source { "archive.ubuntu.com-${facts['os']['distro']['codename']}-updates":
location => 'http://archive.ubuntu.com/ubuntu',
key => '630239CC130E1A7FD81A27B140976EAF437D05B5',
repos => 'main universe multiverse restricted',
- release => "${lsbdistcodename}-updates"
+ release => "${facts['os']['distro']['codename']}-updates"
}
-apt::source { "archive.ubuntu.com-${lsbdistcodename}-backports":
+apt::source { "archive.ubuntu.com-${facts['os']['distro']['codename']}-backports":
location => 'http://archive.ubuntu.com/ubuntu',
key => '630239CC130E1A7FD81A27B140976EAF437D05B5',
repos => 'main universe multiverse restricted',
- release => "${lsbdistcodename}-backports"
+ release => "${facts['os']['distro']['codename']}-backports"
}
```
context 'with defaults on deb' do
let(:facts) do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
- lsbdistcodename: 'jessie',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
}
end
context 'with defaults on ubuntu' do
let(:facts) do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } },
- lsbdistid: 'Ubuntu',
- osfamily: 'Debian',
- lsbdistcodename: 'xenial',
- lsbdistrelease: '16.04',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '16',
+ full: '16.04',
+ },
+ distro: {
+ codename: 'xenial',
+ id: 'Ubuntu',
+ },
+ },
}
end
context 'with everything set' do
let(:facts) do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } },
- lsbdistid: 'Ubuntu',
- osfamily: 'Debian',
- lsbdistcodename: 'xenial',
- lsbdistrelease: '16.04',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '16',
+ full: '16.04',
+ },
+ distro: {
+ codename: 'xenial',
+ id: 'Ubuntu',
+ },
+ },
}
end
let(:params) do
context 'when set things with hashes' do
let(:facts) do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } },
- lsbdistid: 'Ubuntu',
- osfamily: 'Debian',
- lsbdistcodename: 'xenial',
- lsbdistrelease: '16.04',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '16',
+ full: '16.04',
+ },
+ distro: {
+ codename: 'xenial',
+ id: 'Ubuntu',
+ },
+ },
}
end
let(:params) do
describe 'mint tests' do
let(:facts) do
{
- os: { family: 'Debian', name: 'Linuxmint', release: { major: '17', full: '17' } },
- lsbdistid: 'linuxmint',
- osfamily: 'Debian',
- lsbdistcodename: 'qiana',
+ os: {
+ family: 'Debian',
+ name: 'Linuxmint',
+ release: {
+ major: '17',
+ full: '17',
+ },
+ distro: {
+ codename: 'qiana',
+ id: 'linuxmint',
+ },
+ },
}
end
describe 'validation' do
let(:facts) do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } },
- lsbdistid: 'Ubuntu',
- osfamily: 'Debian',
- lsbdistcodename: 'xenial',
- lsbdistrelease: '16.04',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '16',
+ full: '16.04',
+ },
+ distro: {
+ codename: 'xenial',
+ id: 'Ubuntu',
+ },
+ },
}
end
describe 'apt' do
let(:facts) do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
- lsbdistcodename: 'jessie',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
}
end
context 'with entries for /etc/apt/auth.conf' do
facts_hash = {
'Ubuntu 14.04' => {
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '14', full: '14.04' } },
- osfamily: 'Debian',
- lsbdistcodename: 'trusty',
- lsbdistid: 'Ubuntu',
- lsbdistrelease: '14.04',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '14',
+ full: '14.04',
+ },
+ distro: {
+ codename: 'trusty',
+ id: 'Ubuntu',
+ },
+ },
},
'Ubuntu 16.04' => {
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } },
- osfamily: 'Debian',
- lsbdistcodename: 'xenial',
- lsbdistid: 'Ubuntu',
- lsbdistrelease: '16.04',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '16',
+ full: '16.04',
+ },
+ distro: {
+ codename: 'xenial',
+ id: 'Ubuntu',
+ },
+ },
},
'Ubuntu 18.04' => {
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '18', full: '18.04' } },
- osfamily: 'Debian',
- lsbdistcodename: 'bionic',
- lsbdistid: 'Ubuntu',
- lsbdistrelease: '18.04',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '18',
+ full: '18.04',
+ },
+ distro: {
+ codename: 'bionic',
+ id: 'Ubuntu',
+ },
+ },
},
'Debian 7.0' => {
- os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
- lsbdistcodename: 'wheezy',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '7',
+ full: '7.0',
+ },
+ distro: {
+ codename: 'wheezy',
+ id: 'Debian',
+ },
+ },
},
'Debian 8.0' => {
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
- lsbdistcodename: 'jessie',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
},
'Debian 9.0' => {
- os: { family: 'Debian', name: 'Debian', release: { major: '9', full: '9.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
- lsbdistcodename: 'stretch',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '9',
+ full: '9.0',
+ },
+ distro: {
+ codename: 'stretch',
+ id: 'Debian',
+ },
+ },
},
'Debian 10.0' => {
- os: { family: 'Debian', name: 'Debian', release: { major: '10', full: '10.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
- lsbdistcodename: 'buster',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '10',
+ full: '10.0',
+ },
+ distro: {
+ codename: 'buster',
+ id: 'Debian',
+ },
+ },
},
}
end
end
- context 'with sources defined on valid osfamily' do
+ context 'with sources defined on valid os.family' do
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } },
- osfamily: 'Debian',
- lsbdistcodename: 'xenial',
- lsbdistid: 'Ubuntu',
- lsbdistrelease: '16.04',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '16',
+ full: '16.04',
+ },
+ distro: {
+ codename: 'xenial',
+ id: 'Ubuntu',
+ },
+ },
}
end
let(:params) do
it { is_expected.to contain_file('/etc/apt/sources.list.d/puppetlabs.list').with_content(%r{^deb http://apt.puppetlabs.com xenial main$}) }
end
- context 'with confs defined on valid osfamily' do
+ context 'with confs defined on valid os.family' do
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } },
- osfamily: 'Debian',
- lsbdistcodename: 'xenial',
- lsbdistid: 'Ubuntu',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '16',
+ full: '16.04',
+ },
+ distro: {
+ codename: 'xenial',
+ id: 'Ubuntu',
+ },
+ },
}
end
let(:params) do
}
end
- context 'with keys defined on valid osfamily' do
+ context 'with keys defined on valid os.family' do
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } },
- osfamily: 'Debian',
- lsbdistcodename: 'xenial',
- lsbdistid: 'Ubuntu',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '16',
+ full: '16.04',
+ },
+ distro: {
+ codename: 'xenial',
+ id: 'Ubuntu',
+ },
+ },
}
end
let(:params) do
}
end
- context 'with ppas defined on valid osfamily' do
+ context 'with ppas defined on valid os.family' do
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } },
- osfamily: 'Debian',
- lsbdistcodename: 'xenial',
- lsbdistid: 'Ubuntu',
- lsbdistrelease: '16.04',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '16',
+ full: '16.04',
+ },
+ distro: {
+ codename: 'xenial',
+ id: 'Ubuntu',
+ },
+ },
}
end
let(:params) do
it { is_expected.to contain_apt__ppa('ppa:nginx/stable') }
end
- context 'with settings defined on valid osfamily' do
+ context 'with settings defined on valid os.family' do
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } },
- osfamily: 'Debian',
- lsbdistcodename: 'xenial',
- lsbdistid: 'Ubuntu',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '16',
+ full: '16.04',
+ },
+ distro: {
+ codename: 'xenial',
+ id: 'Ubuntu',
+ },
+ },
}
end
let(:params) do
it { is_expected.to contain_apt__setting('pref-banana') }
end
- context 'with pins defined on valid osfamily' do
+ context 'with pins defined on valid os.family' do
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '16', full: '16.04' } },
- osfamily: 'Debian',
- lsbdistcodename: 'xenial',
- lsbdistid: 'Ubuntu',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '16',
+ full: '16.04',
+ },
+ distro: {
+ codename: 'xenial',
+ id: 'Ubuntu',
+ },
+ },
}
end
let(:params) do
context "when $::apt_update_last_success indicates #{desc}" do
let(:facts) do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
apt_update_last_success: factval,
- lsbdistcodename: 'jessie',
}
end
let(:pre_condition) do
context 'when $::apt_update_last_success is nil' do
let(:facts) do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
- lsbdistcodename: 'jessie',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
}
end
let(:pre_condition) { "class{ '::apt': update => {'frequency' => 'always' },}" }
context "when $::apt_update_last_success indicates #{desc}" do
let(:facts) do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
apt_update_last_success: factval,
- lsbdistcodename: 'jessie',
}
end
let(:pre_condition) { "class{ '::apt': update => {'frequency' => 'reluctantly' },}" }
context 'when $::apt_update_last_success is nil' do
let(:facts) do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
- lsbdistcodename: 'jessie',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
}
end
let(:pre_condition) { "class{ '::apt': update => {'frequency' => 'reluctantly' },}" }
context "when $::apt_update_last_success indicates #{desc}" do
let(:facts) do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
apt_update_last_success: factval,
- lsbdistcodename: 'jessie',
}
end
let(:pre_condition) { "class{ '::apt': update => {'frequency' => '#{update_frequency}',} }" }
context 'when the $::apt_update_last_success fact has a recent value' do
let(:facts) do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
- lsbdistcodename: 'jessie',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
apt_update_last_success: Time.now.to_i,
}
end
context 'when $::apt_update_last_success is nil' do
let(:facts) do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
- lsbdistcodename: 'jessie',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
apt_update_last_success: nil,
}
end
end
let(:facts) do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
- lsbdistcodename: 'jessie',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
}
end
let :title do
let(:facts) do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
}
end
let(:facts) do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
- lsbdistcodename: 'jessie',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
}
end
let :facts do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- lsbdistcodename: 'jessie',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
}
end
end
let(:facts) do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
- lsbdistcodename: 'jessie',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
}
end
let(:title) { 'my_pin' }
describe 'defaults' do
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '14', full: '41.04' } },
- lsbdistrelease: '14.04',
- lsbdistcodename: 'trusty',
- operatingsystem: 'Ubuntu',
- osfamily: 'Debian',
- lsbdistid: 'Ubuntu',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '14',
+ full: '14.04',
+ },
+ distro: {
+ codename: 'trusty',
+ id: 'Ubuntu',
+ },
+ },
}
end
describe 'Ubuntu 15.10 sources.list filename' do
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '15', full: '15.10' } },
- lsbdistrelease: '15.10',
- lsbdistcodename: 'wily',
- operatingsystem: 'Ubuntu',
- osfamily: 'Debian',
- lsbdistid: 'Ubuntu',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '15',
+ full: '15.10',
+ },
+ distro: {
+ codename: 'wily',
+ id: 'Ubuntu',
+ },
+ },
}
end
end
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '14', full: '14.04' } },
- lsbdistrelease: '14.04',
- lsbdistcodename: 'trusty',
- operatingsystem: 'Ubuntu',
- osfamily: 'Debian',
- lsbdistid: 'Ubuntu',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '14',
+ full: '14.04',
+ },
+ distro: {
+ codename: 'trusty',
+ id: 'Ubuntu',
+ },
+ },
}
end
end
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '14', full: '14.04' } },
- lsbdistrelease: '14.04',
- lsbdistcodename: 'trusty',
- operatingsystem: 'Ubuntu',
- osfamily: 'Debian',
- lsbdistid: 'Ubuntu',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '14',
+ full: '14.04',
+ },
+ distro: {
+ codename: 'trusty',
+ id: 'Ubuntu',
+ },
+ },
}
end
let :params do
end
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '14', full: '14.04' } },
- lsbdistrelease: '14.04',
- lsbdistcodename: 'trusty',
- operatingsystem: 'Ubuntu',
- lsbdistid: 'Ubuntu',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '14',
+ full: '14.04',
+ },
+ distro: {
+ codename: 'trusty',
+ id: 'Ubuntu',
+ },
+ },
}
end
let :params do
end
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '14', full: '14.04' } },
- lsbdistrelease: '14.04',
- lsbdistcodename: 'trusty',
- operatingsystem: 'Ubuntu',
- lsbdistid: 'Ubuntu',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '14',
+ full: '14.04',
+ },
+ distro: {
+ codename: 'trusty',
+ id: 'Ubuntu',
+ },
+ },
}
end
let :params do
end
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '14', full: '14.04' } },
- lsbdistrelease: '14.04',
- lsbdistcodename: 'trusty',
- operatingsystem: 'Ubuntu',
- lsbdistid: 'Ubuntu',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '14',
+ full: '14.04',
+ },
+ distro: {
+ codename: 'trusty',
+ id: 'Ubuntu',
+ },
+ },
}
end
let :params do
end
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '14', full: '14.04' } },
- lsbdistrelease: '14.04',
- lsbdistcodename: 'trusty',
- operatingsystem: 'Ubuntu',
- lsbdistid: 'Ubuntu',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '14',
+ full: '14.04',
+ },
+ distro: {
+ codename: 'trusty',
+ id: 'Ubuntu',
+ },
+ },
}
end
let :params do
end
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '14', full: '14.04' } },
- lsbdistrelease: '14.04',
- lsbdistcodename: 'trusty',
- operatingsystem: 'Ubuntu',
- lsbdistid: 'Ubuntu',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '14',
+ full: '14.04',
+ },
+ distro: {
+ codename: 'trusty',
+ id: 'Ubuntu',
+ },
+ },
}
end
let(:title) { 'ppa:user/foo' }
describe 'no release' do
let :facts do
{
- os: { family: 'Debian', name: 'Ubuntu', release: { major: '14', full: '14.04' } },
- lsbdistrelease: '14.04',
- operatingsystem: 'Ubuntu',
- lsbdistid: 'Ubuntu',
- osfamily: 'Debian',
- lsbdistcodeanme: nil,
+ os: {
+ family: 'Debian',
+ name: 'Ubuntu',
+ release: {
+ major: '14',
+ full: '14.04',
+ },
+ distro: {
+ codename: nil,
+ id: 'Ubuntu',
+ },
+ },
}
end
let(:title) { 'ppa:user/foo' }
it do
- is_expected.to raise_error(Puppet::Error, %r{lsbdistcodename fact not available: release parameter required})
+ is_expected.to raise_error(Puppet::Error, %r{os.distro.codename fact not available: release parameter required})
end
end
describe 'not ubuntu' do
let :facts do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '6', full: '6.0.7' } },
- lsbdistrelease: '6.0.7',
- lsbdistcodename: 'wheezy',
- operatingsystem: 'Debian',
- lsbdistid: 'debian',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '6',
+ full: '6.0.7',
+ },
+ distro: {
+ codename: 'wheezy',
+ id: 'Debian',
+ },
+ },
}
end
let(:title) { 'ppa:user/foo' }
let(:pre_condition) { 'class { "apt": }' }
let :facts do
{
- os: { distro: { codename: 'jessie' }, family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistrelease: '8.0',
- lsbdistcodename: 'jessie',
- operatingsystem: 'Debian',
- osfamily: 'Debian',
- lsbdistid: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
}
end
let(:title) { 'conf-teddybear' }
end
let(:facts) do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- osfamily: 'Debian',
- lsbdistcodename: 'jessie',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
}
end
let(:title) { 'conf-teddybear' }
let :facts do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- lsbdistcodename: 'jessie',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
}
end
context 'with no release' do
let :facts do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ id: 'Debian',
+ },
+ },
}
end
it do
- is_expected.to raise_error(Puppet::Error, %r{lsbdistcodename fact not available: release parameter required})
+ is_expected.to raise_error(Puppet::Error, %r{os.distro.codename fact not available: release parameter required})
end
end
end
let :facts do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- lsbdistcodename: 'jessie',
- operatingsystem: 'Debian',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
}
end
context 'with a https location and custom release, install apt-transport-https' do
let :facts do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- lsbdistid: 'Debian',
- lsbdistcodename: 'jessie',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ codename: 'jessie',
+ id: 'Debian',
+ },
+ },
puppetversion: Puppet.version,
}
end
context 'with a https location, do not install apt-transport-https on oses not in list eg buster' do
let :facts do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '10', full: '10.0' } },
- lsbdistid: 'Debian',
- lsbdistcodename: 'buster',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '10',
+ full: '10.0',
+ },
+ distro: {
+ codename: 'buster',
+ id: 'Debian',
+ },
+ },
}
end
let :params do
context 'with architecture equals x86_64' do
let :facts do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '7', full: '7.0' } },
- lsbdistid: 'Debian',
- lsbdistcodename: 'wheezy',
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '7',
+ full: '7.0',
+ },
+ distro: {
+ codename: 'wheezy',
+ id: 'Debian',
+ },
+ },
}
end
let :params do
context 'with no release' do
let :facts do
{
- os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
- osfamily: 'Debian',
+ os: {
+ family: 'Debian',
+ name: 'Debian',
+ release: {
+ major: '8',
+ full: '8.0',
+ },
+ distro: {
+ id: 'Debian',
+ },
+ },
}
end
let(:params) { { location: 'hello.there' } }
it do
- is_expected.to raise_error(Puppet::Error, %r{lsbdistcodename fact not available: release parameter required})
+ is_expected.to raise_error(Puppet::Error, %r{os.distro.codename fact not available: release parameter required})
end
end