Skip to content

Commit

Permalink
Add service to publish facts to foreman
Browse files Browse the repository at this point in the history
  • Loading branch information
bastelfreak committed Dec 16, 2024
1 parent 1c58844 commit d2c4065
Show file tree
Hide file tree
Showing 6 changed files with 52 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'
20 changes: 20 additions & 0 deletions manifests/init.pp
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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' }
Expand Down Expand Up @@ -126,5 +132,19 @@
group => $puppet_group,
mode => '0750',
}
if $fact_watcher_service {
if $manage_fact_watcher_dependencies {
package { ['ruby-inotify', 'parallel']:
ensure => 'installed',
provider => 'puppet_gem',
before => Systemd::Unit_file['fact_watcher.service'],
}
}
-> systemd::unit_file { 'fact_watcher.service':
enable => true,
active => true,
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
Expand Up @@ -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
Expand Up @@ -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": [
Expand Down
8 changes: 8 additions & 0 deletions spec/classes/init_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 d2c4065

Please sign in to comment.