From 6858c649b46f1768d0269811cf9abd612b63cb8c Mon Sep 17 00:00:00 2001 From: Roberto Valentini Date: Tue, 9 Jul 2024 16:28:34 +0200 Subject: [PATCH] Add shared-network configuration --- manifests/init.pp | 14 ++++++++++++++ spec/acceptance/shared_spec.rb | 31 +++++++++++++++++++++++++++++++ spec/classes/init_spec.rb | 14 ++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 spec/acceptance/shared_spec.rb diff --git a/manifests/init.pp b/manifests/init.pp index 3360f97..3710f68 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -46,6 +46,7 @@ Hash[String, Hash] $hosts = {}, Variant[Array[String], Optional[String]] $includes = undef, String $config_comment = 'dhcpd.conf', + Optional[String] $shared_network = undef, ) inherits dhcp::params { # In case people set interface instead of interfaces work around # that. If they set both, use interfaces and the user is a unwise @@ -157,6 +158,19 @@ order => '01', } + if $shared_network { + concat::fragment { 'dhcp.conf+69_shared': + target => "${dhcp_dir}/dhcpd.conf", + content => "shared-network ${shared_network} {\n", + order => '69', + } + concat::fragment { 'dhcp.conf+71_shared': + target => "${dhcp_dir}/dhcpd.conf", + content => "}\n", + order => '71', + } + } + create_resources('dhcp::subnet', $subnets) create_resources('dhcp::pool', $pools) create_resources('dhcp::host', $hosts) diff --git a/spec/acceptance/shared_spec.rb b/spec/acceptance/shared_spec.rb new file mode 100644 index 0000000..e93f11e --- /dev/null +++ b/spec/acceptance/shared_spec.rb @@ -0,0 +1,31 @@ +require 'spec_helper_acceptance' + +describe 'Simple installation' do + interface = 'eth0' + config_file = fact('os.family') == 'Archlinux' ? '/etc/dhcpd.conf' : '/etc/dhcp/dhcpd.conf' + + it_behaves_like 'an idempotent resource' do + let(:manifest) do + <<-EOS + $interface = $facts['networking']['interfaces']['#{interface}'] + + class { 'dhcp': + interfaces => ['#{interface}'], + shared_network => 'shared', + } + + dhcp::pool { "default subnet": + network => $interface['network'], + mask => $interface['netmask'], + } + EOS + end + end + + it_behaves_like 'a DHCP server' + + describe file(config_file) do + it { is_expected.to be_file } + its(:content) { should match %r{shared-network shared} } + end +end diff --git a/spec/classes/init_spec.rb b/spec/classes/init_spec.rb index dc825c3..c95663a 100644 --- a/spec/classes/init_spec.rb +++ b/spec/classes/init_spec.rb @@ -534,6 +534,20 @@ it { is_expected.to compile.and_raise_error(%r{dnsupdateserver or nameservers parameter is required to enable ddns}) } end end + + describe "with shared_network" do + let(:params) { super().merge(shared_network: "shared") } + + let(:expected_content) do + <<~CONTENT + shared-network shared { + CONTENT + end + + it do + is_expected.to contain_concat__fragment('dhcp.conf+69_shared').with_content(expected_content) + end + end end end end