Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add service to publish facts to foreman
Browse files Browse the repository at this point in the history
bastelfreak committed Dec 18, 2024

Verified

This commit was signed with the committer’s verified signature. The key has expired.
bastelfreak Tim Meusel
1 parent 1c58844 commit 4dd0b99
Showing 6 changed files with 55 additions and 3 deletions.
1 change: 1 addition & 0 deletions .fixtures.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
fixtures:
repositories:
stdlib: 'https://github.com/puppetlabs/puppetlabs-stdlib'
systemd: 'https://github.com/voxpupuli/puppet-systemd'
23 changes: 23 additions & 0 deletions manifests/init.pp
Original file line number Diff line number Diff line change
@@ -40,6 +40,10 @@
# The directory used to install the report processor to
# @param use_client_tls_certs
# Enable client TLS authentication to foreman
# @param fact_watcher_service
# Sets up a simple systemd unit that watches for new fact files and publishes them to foreman. Not required when foreman is the ENC
# @param manage_fact_watcher_dependencies
# Install the missing dependencies for fact_watchter
class puppetserver_foreman (
Stdlib::HTTPUrl $foreman_url = $puppetserver_foreman::params::foreman_url,
Boolean $enc = true,
@@ -58,6 +62,8 @@
Variant[Enum[''], Stdlib::Absolutepath] $ssl_cert = $puppetserver_foreman::params::client_ssl_cert,
Variant[Enum[''], Stdlib::Absolutepath] $ssl_key = $puppetserver_foreman::params::client_ssl_key,
Boolean $use_client_tls_certs = true,
Boolean $fact_watcher_service = $puppetserver_foreman::params::fact_watcher_service,
Boolean $manage_fact_watcher_dependencies = true,
) inherits puppetserver_foreman::params {
case $facts['os']['family'] {
'Debian': { $json_package = 'ruby-json' }
@@ -126,5 +132,22 @@
group => $puppet_group,
mode => '0750',
}
if $manage_fact_watcher_dependencies {
$ensure = if $fact_watcher_service {
'installed'
} else {
'absent'
}
package { 'ruby-inotify':
ensure => 'installed',
provider => 'puppet_gem',
before => Systemd::Unit_file['fact_watcher.service'],
}
}
systemd::unit_file { 'fact_watcher.service':
enable => $fact_watcher_service,
active => $fact_watcher_service,
content => epp('puppetserver_foreman/fact_watcher.service.epp', { 'user' => $puppet_user }),
}
}
}
9 changes: 6 additions & 3 deletions manifests/params.pp
Original file line number Diff line number Diff line change
@@ -55,8 +55,11 @@

# PE uses a different user/group compared to open source puppet
# the is_pe fact exists in PE and in stdlib. It can be true/false/undef (undef means open source)
$puppet_user = $facts['is_pe'] ? {
true => 'pe-puppet',
default => 'puppet'
if $facts['is_pe'] {
$puppet_user = 'pe-puppet'
$fact_watcher_service = true
} else {
$puppet_user = 'puppet'
$fact_watcher_service = false
}
}
4 changes: 4 additions & 0 deletions metadata.json
Original file line number Diff line number Diff line change
@@ -18,6 +18,10 @@
{
"name": "puppetlabs/stdlib",
"version_requirement": ">= 9.0.0 < 10.0.0"
},
{
"name": "puppet/systemd",
"version_requirement": ">= 7.1.0 < 8.0.0"
}
],
"requirements": [
8 changes: 8 additions & 0 deletions spec/classes/init_spec.rb
Original file line number Diff line number Diff line change
@@ -81,6 +81,8 @@
.with_owner('puppet')
.with_group('puppet')
.with_content(%r{foreman\.yaml})

should_not contain_systemd__unit_file('facts.service')
end

it 'should set up directories for the ENC' do
@@ -168,6 +170,12 @@

it { should contain_class('puppetserver_foreman').with_foreman_url('https://hiera-foreman.example.com') }
end
describe 'setup service to pubish facts' do
let :params do
{fact_watcher_service: true}
end
it { is_expected.to contain_systemd__unit_file('fact_watcher.service') }
end
end
end
end
13 changes: 13 additions & 0 deletions templates/fact_watcher.service.epp
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<%- | String[1] $user | -%>
# THIS FILE IS MANAGED BY PUPPET
[Unit]
Description=publish facts to foreman

[Service]
Type=simple
Environment=PATH=/opt/puppetlabs/puppet/bin:<%= $facts['path'] %>
User=<%= $user %>
ExecStart=/etc/puppetlabs/puppet/node.rb --watch-facts --push-facts-parallel

[Install]
WantedBy=multi-user.target

0 comments on commit 4dd0b99

Please sign in to comment.