Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add journal-remote settings #483

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions REFERENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

* `systemd::coredump`: This class manages the systemd-coredump configuration.
* `systemd::install`: Install any systemd sub packages
* `systemd::journal_remote`: This class manages and configures journal-remote.
* `systemd::journald`: This class manages and configures journald.
* `systemd::logind`: This class manages systemd's login manager configuration.
* `systemd::machine_info`: This class manages systemd's machine-info file (hostnamectl)
Expand Down Expand Up @@ -56,6 +57,7 @@

* [`Systemd::CoredumpSettings`](#Systemd--CoredumpSettings): Configurations for coredump.conf
* [`Systemd::Dropin`](#Systemd--Dropin): custom datatype that validates filenames/paths for valid systemd dropin files
* [`Systemd::JournalRemoteSettings`](#Systemd--JournalRemoteSettings): Matches Systemd journal remote config Struct
* [`Systemd::JournaldSettings`](#Systemd--JournaldSettings): Matches Systemd journald config Struct
* [`Systemd::JournaldSettings::Ensure`](#Systemd--JournaldSettings--Ensure): defines allowed ensure states for systemd-journald settings
* [`Systemd::LogindSettings`](#Systemd--LogindSettings): Matches Systemd Login Manager Struct
Expand Down Expand Up @@ -126,6 +128,8 @@ The following parameters are available in the `systemd` class:
* [`set_local_rtc`](#-systemd--set_local_rtc)
* [`manage_journald`](#-systemd--manage_journald)
* [`journald_settings`](#-systemd--journald_settings)
* [`manage_journal_remote`](#-systemd--manage_journal_remote)
* [`journal_remote_settings`](#-systemd--journal_remote_settings)
* [`manage_udevd`](#-systemd--manage_udevd)
* [`udev_log`](#-systemd--udev_log)
* [`udev_children_max`](#-systemd--udev_children_max)
Expand Down Expand Up @@ -460,6 +464,22 @@ Config Hash that is used to configure settings in journald.conf

Default value: `{}`

##### <a name="-systemd--manage_journal_remote"></a>`manage_journal_remote`

Data type: `Boolean`

Manage the systemd journal remote server used to upload journals

Default value: `false`

##### <a name="-systemd--journal_remote_settings"></a>`journal_remote_settings`

Data type: `Systemd::JournalRemoteSettings`

Config Hash that is used to configure settings in journal-remote.conf

Default value: `{}`

##### <a name="-systemd--manage_udevd"></a>`manage_udevd`

Data type: `Boolean`
Expand Down Expand Up @@ -2562,6 +2582,26 @@ custom datatype that validates filenames/paths for valid systemd dropin files

Alias of `Pattern['^[^/]+\.conf$']`

### <a name="Systemd--JournalRemoteSettings"></a>`Systemd::JournalRemoteSettings`

Matches Systemd journal remote config Struct

Alias of

```puppet
Struct[{
Optional['Seal'] => Variant[Enum['yes','no'],Systemd::JournaldSettings::Ensure],
Optional['SplitMode'] => Variant[Enum['host','none'],Systemd::JournaldSettings::Ensure],
Optional['ServerKeyFile'] => Variant[Stdlib::Unixpath,Systemd::JournaldSettings::Ensure],
Optional['ServerCertificateFile'] => Variant[Stdlib::Unixpath,Systemd::JournaldSettings::Ensure],
Optional['TrustedCertificateFile'] => Variant[Stdlib::Unixpath,Systemd::JournaldSettings::Ensure],
Optional['MaxUse'] => Variant[Systemd::Unit::Amount,Systemd::JournaldSettings::Ensure],
Optional['KeepFree'] => Variant[Systemd::Unit::Amount,Systemd::JournaldSettings::Ensure],
Optional['MaxFileSize'] => Variant[Systemd::Unit::Amount,Systemd::JournaldSettings::Ensure],
Optional['MaxFiles'] => Variant[Integer,Systemd::JournaldSettings::Ensure],
}]
```

### <a name="Systemd--JournaldSettings"></a>`Systemd::JournaldSettings`

Matches Systemd journald config Struct
Expand Down
1 change: 1 addition & 0 deletions data/Debian-family.yaml
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
---
systemd::nspawn_package: 'systemd-container'
systemd::journal_remote::package_name: 'systemd-journal-remote'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be good to add an acceptance test to keep confirming all the package names are correct.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

right, bu was not able to create a succesfull test. I assume, I cannot start systemd-journal-remote service in the environment. I'm giving up now ;(
(see #482 for the commit trying ;))

1 change: 1 addition & 0 deletions data/RedHat-family.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
systemd::networkd_package: systemd-networkd
systemd::nspawn_package: 'systemd-container'
systemd::resolved_package: 'systemd-resolved'
systemd::journal_remote::package_name: 'systemd-journal-remote'
12 changes: 12 additions & 0 deletions manifests/init.pp
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,12 @@
# @param journald_settings
# Config Hash that is used to configure settings in journald.conf
#
# @param manage_journal_remote
# Manage the systemd journal remote server used to upload journals
#
# @param journal_remote_settings
# Config Hash that is used to configure settings in journal-remote.conf
#
# @param manage_udevd
# Manage the systemd udev daemon
#
Expand Down Expand Up @@ -253,6 +259,8 @@
Boolean $purge_dropin_dirs = true,
Boolean $manage_journald = true,
Systemd::JournaldSettings $journald_settings = {},
Boolean $manage_journal_remote = false,
Systemd::JournalRemoteSettings $journal_remote_settings = {},
Systemd::MachineInfoSettings $machine_info_settings = {},
Boolean $manage_udevd = false,
Optional[Variant[Integer,String]] $udev_log = undef,
Expand Down Expand Up @@ -355,6 +363,10 @@
contain systemd::journald
}

if $manage_journal_remote {
contain systemd::journal_remote
}

if $manage_logind {
contain systemd::logind
}
Expand Down
37 changes: 37 additions & 0 deletions manifests/journal_remote.pp
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# @api private
# @summary This class manages and configures journal-remote.
# @see https://www.freedesktop.org/software/systemd/man/journal-remote.conf.html
#
# @param package_name
# name of the package to install for the functionality
#
class systemd::journal_remote (
Optional[String[1]] $package_name = undef,
) {
assert_private()

if $package_name {
stdlib::ensure_packages($package_name)
}

service { 'systemd-journal-remote':
ensure => running,
}
$systemd::journal_remote_settings.each |$option, $value| {
ini_setting { "journal-remote_${option}":
path => '/etc/systemd/journal-remote.conf',
section => 'Remote',
setting => $option,
notify => Service['systemd-journal-remote'],
}
if $value =~ Systemd::JournaldSettings::Ensure {
Ini_setting["journal-remote_${option}"] {
* => $value,
}
} else {
Ini_setting["journal-remote_${option}"] {
value => $value,
}
}
}
}
52 changes: 52 additions & 0 deletions spec/classes/init_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -587,6 +587,58 @@
it { is_expected.not_to contain_service('systemd-journald') }
end

context 'when journal-remote is enabled' do
let(:params) do
{
manage_journal_remote: true,
journal_remote_settings: {
'SplitMode' => 'host',
'ServerKeyFile' => '/tmp/key.pem',
'ServerCertificateFile' => '/tmp/cert.pem',
'TrustedCertificateFile' => {
'ensure' => 'absent',
},
},
}
end

it { is_expected.to compile.with_all_deps }
it { is_expected.to contain_service('systemd-journal-remote') }

it { is_expected.to have_ini_setting_resource_count(4) }

it {
expect(subject).to contain_ini_setting('journal-remote_SplitMode').with(
path: '/etc/systemd/journal-remote.conf',
section: 'Remote',
setting: 'SplitMode',
notify: 'Service[systemd-journal-remote]',
value: 'host'
)
}

it {
expect(subject).to contain_ini_setting('journal-remote_TrustedCertificateFile').with(
path: '/etc/systemd/journal-remote.conf',
section: 'Remote',
setting: 'TrustedCertificateFile',
notify: 'Service[systemd-journal-remote]',
ensure: 'absent'
)
}
end

context 'when journal-remote is not enabled' do
let(:params) do
{
manage_journal_remote: false,
}
end

it { is_expected.to compile.with_all_deps }
it { is_expected.not_to contain_service('systemd-journal-remote') }
end

context 'when disabling udevd management' do
let(:params) do
{
Expand Down
16 changes: 16 additions & 0 deletions types/journalremotesettings.pp
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Matches Systemd journal remote config Struct
type Systemd::JournalRemoteSettings = Struct[
# lint:ignore:140chars
{
Optional['Seal'] => Variant[Enum['yes','no'],Systemd::JournaldSettings::Ensure],
Optional['SplitMode'] => Variant[Enum['host','none'],Systemd::JournaldSettings::Ensure],
Optional['ServerKeyFile'] => Variant[Stdlib::Unixpath,Systemd::JournaldSettings::Ensure],
Optional['ServerCertificateFile'] => Variant[Stdlib::Unixpath,Systemd::JournaldSettings::Ensure],
Optional['TrustedCertificateFile'] => Variant[Stdlib::Unixpath,Systemd::JournaldSettings::Ensure],
Optional['MaxUse'] => Variant[Systemd::Unit::Amount,Systemd::JournaldSettings::Ensure],
Optional['KeepFree'] => Variant[Systemd::Unit::Amount,Systemd::JournaldSettings::Ensure],
Optional['MaxFileSize'] => Variant[Systemd::Unit::Amount,Systemd::JournaldSettings::Ensure],
Optional['MaxFiles'] => Variant[Integer,Systemd::JournaldSettings::Ensure],
}
# lint:endignore
]
Loading