Skip to content
Open
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
3 changes: 3 additions & 0 deletions manifests/init.pp
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,8 @@
#
# $server_reports:: List of report types to include on the puppetserver
#
# $server_node_terminus:: Node data plugin for catalog compiling
#
# $server_external_nodes:: External nodes classifier executable
#
# $server_trusted_external_command:: The external trusted facts script to use.
Expand Down Expand Up @@ -665,6 +667,7 @@
Optional[Stdlib::Absolutepath] $server_puppetserver_rundir = $puppet::params::server_puppetserver_rundir,
Optional[Stdlib::Absolutepath] $server_puppetserver_logdir = $puppet::params::server_puppetserver_logdir,
Optional[Pattern[/^[\d]\.[\d]+\.[\d]+$/]] $server_puppetserver_version = $puppet::params::server_puppetserver_version,
Enum['plain', 'exec', 'classifier'] $server_node_terminus = $puppet::params::server_node_terminus,
Variant[Undef, String[0], Stdlib::Absolutepath] $server_external_nodes = $puppet::params::server_external_nodes,
Optional[Stdlib::Absolutepath] $server_trusted_external_command = $puppet::params::server_trusted_external_command,
Array[String] $server_cipher_suites = $puppet::params::server_cipher_suites,
Expand Down
1 change: 1 addition & 0 deletions manifests/params.pp
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@
$server_ca = true
$server_ca_crl_sync = false
$server_reports = 'foreman'
$server_node_terminus = 'exec'
$server_external_nodes = "${dir}/node.rb"
$server_trusted_external_command = undef
$server_request_timeout = 60
Expand Down
3 changes: 3 additions & 0 deletions manifests/server.pp
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@
#
# $reports:: List of report types to include on the puppetserver
#
# $node_terminus:: Node data plugin for catalog compiling
#
# $external_nodes:: External nodes classifier executable
#
# $trusted_external_command:: The external trusted facts script to use.
Expand Down Expand Up @@ -373,6 +375,7 @@
Optional[Stdlib::Absolutepath] $puppetserver_logdir = $puppet::server_puppetserver_logdir,
Stdlib::Absolutepath $puppetserver_dir = $puppet::server_puppetserver_dir,
Optional[Pattern[/^[\d]\.[\d]+\.[\d]+$/]] $puppetserver_version = $puppet::server_puppetserver_version,
Enum['plain', 'exec', 'classifier'] $node_terminus = $puppet::server_node_terminus,
Variant[Undef, String[0], Stdlib::Absolutepath] $external_nodes = $puppet::server_external_nodes,
Optional[Stdlib::Absolutepath] $trusted_external_command = $puppet::server_trusted_external_command,
Array[String] $cipher_suites = $puppet::server_cipher_suites,
Expand Down
26 changes: 25 additions & 1 deletion manifests/server/config.pp
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,38 @@
## General configuration
$ca_server = $puppet::ca_server
$ca_port = $puppet::ca_port
$server_node_terminus = $puppet::server::node_terminus
$server_external_nodes = $puppet::server::external_nodes
$server_environment_timeout = $puppet::server::environment_timeout
$trusted_external_command = $puppet::server::trusted_external_command
$primary_envs_dir = $puppet::server::envs_dir[0]

case $server_node_terminus {
'plain': {}
'exec': {
class { 'puppet::server::enc':
node_terminus => $server_node_terminus,
enc_path => $server_external_nodes,
}
}
'console': {
class { 'puppet::server::enc':
node_terminus => $server_node_terminus,
}
}
default: {
fail('Invalid value of $server_node_terminus')
}
}

if $server_external_nodes and $server_external_nodes != '' {
Copy link
Member

Choose a reason for hiding this comment

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

I think we should look at $server_node_terminus and only when it's set to exec this should we include the ENC. So perhaps:

if $server_node_terminus == 'exec' {
  class { 'puppet::server::enc':
    node_terminus => $server_node_terminus,
    enc_path      => $server_external_nodes,
  }
}

Ideally we would change $server_external_nodes to Optional[Stdlib::Absolutepath] then and drop empty string handling. That could be considered a breaking change, but I think it's for the better.

I haven't look at all at the consequences of this so there's a good chance I'm missing something.

Copy link
Author

@d1nuc0m d1nuc0m Nov 25, 2024

Choose a reason for hiding this comment

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

Thanks, as there also is classifier option I think in that case it must be written. Maybe there also are some changes to do in the without foreman tests, as it might be possible to not want the Foreman integration but use an ENC

class { 'puppet::server::enc':
enc_path => $server_external_nodes,
node_terminus => $server_node_terminus,
enc_path => $server_external_nodes,
}
} else {
class { 'puppet::server::enc':
node_terminus => $server_node_terminus,
}
}

Expand Down
16 changes: 12 additions & 4 deletions manifests/server/enc.pp
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
# Set up the ENC config
# @api private
class puppet::server::enc (
Variant[Undef, String[0], Stdlib::Absolutepath] $enc_path = $puppet::server::external_nodes
Variant[Undef, String[0], Stdlib::Absolutepath] $enc_path = $puppet::server::external_nodes,
Enum['plain', 'exec', 'classifier'] $node_terminus = $puppet::server::node_terminus,
) {
puppet::config::server {
'external_nodes': value => $enc_path;
'node_terminus': value => 'exec';
if $enc_path and $enc_path != '' {
puppet::config::server {
'external_nodes': value => $enc_path;
'node_terminus': value => $node_terminus;
}
}
else {
puppet::config::server {
'node_terminus': value => $node_terminus;
}
}
}
27 changes: 25 additions & 2 deletions spec/classes/puppet_server_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -283,12 +283,25 @@
it { should contain_puppet__config__main('hiera_config').with_value('/etc/puppet/hiera/production/hiera.yaml') }
end

describe 'without foreman' do
describe 'without foreman, default external ENC' do
let(:params) do
super().merge(
server_foreman: false,
server_reports: 'store',
server_external_nodes: ''
)
end

it { should_not contain_class('puppetserver_foreman') }
it { should contain_puppet__config__server('node_terminus').with_value('exec') }
it { should contain_puppet__config__server('external_nodes').with_value('/etc/puppetlabs/puppet/node.rb') }
end

describe 'without foreman, plain ENC' do
let(:params) do
super().merge(
server_foreman: false,
server_reports: 'store',
node_terminus: 'plain'
)
end

Expand All @@ -297,6 +310,16 @@
it { should_not contain_puppet__config__server('external_nodes') }
end

describe 'invalid node_terminus' do
let(:params) do
super().merge(
server_node_terminus: 'loremIpsum',
)
end

it { should raise_error(Puppet::Error, %r{Invalid value of $server_node_terminus}) }
end

describe 'with server_default_manifest => true and undef content' do
let(:params) do
super().merge(server_default_manifest: true)
Expand Down