diff --git a/manifests/network.pp b/manifests/network.pp index dc5ba06..1692704 100644 --- a/manifests/network.pp +++ b/manifests/network.pp @@ -1,33 +1,41 @@ # @summary Creates network config for systemd-networkd define systemd::network ( Enum['file', 'absent'] $ensure = file, Stdlib::Absolutepath $path = '/etc/systemd/network', Optional[String] $content = undef, Optional[String] $source = undef, Optional[Stdlib::Absolutepath] $target = undef, String $owner = 'root', String $group = 'root', String $mode = '0444', Boolean $show_diff = true, Boolean $restart_service = true, ) { include systemd if $restart_service and $systemd::manage_networkd { $notify = Service['systemd-networkd'] } else { $notify = undef } + if $ensure == 'file' { + if $content =~ Undef and $source =~ Undef { + fail('Either content or source must be set') + } + if $content =~ NotUndef and $source =~ NotUndef { + fail('Either content or source must be set but not both') + } + } file { "${path}/${name}": ensure => $ensure, content => $content, source => $source, target => $target, owner => $owner, group => $group, mode => $mode, show_diff => $show_diff, notify => $notify, } } diff --git a/spec/defines/network_spec.rb b/spec/defines/network_spec.rb index 3ab5acc..dac8219 100644 --- a/spec/defines/network_spec.rb +++ b/spec/defines/network_spec.rb @@ -1,67 +1,84 @@ require 'spec_helper' describe 'systemd::network' do context 'supported operating systems' do on_supported_os.each do |os, facts| context "on #{os}" do # manage systemd-networkd service let :pre_condition do "class { 'systemd': manage_networkd => true, }" end let(:facts) { facts } let(:title) { 'eth0.network' } let(:params) do { content: 'random stuff', restart_service: true, } end it { is_expected.to compile.with_all_deps } it { is_expected.to create_file("/etc/systemd/network/#{title}").with( ensure: 'file', content: %r{#{params[:content]}}, mode: '0444' ) } it { is_expected.to create_file("/etc/systemd/network/#{title}").that_notifies('Service[systemd-networkd]') } context 'with group => systemd-network, mode => 0640 and show_diff => false' do let(:title) { 'wg0.netdev' } let(:params) do { content: 'secret string', group: 'systemd-network', mode: '0640', show_diff: false, restart_service: true, } end it { is_expected.to compile.with_all_deps } it { is_expected.to create_file("/etc/systemd/network/#{title}").with( ensure: 'file', content: %r{#{params[:content]}}, group: 'systemd-network', mode: '0640', show_diff: false ) } it { is_expected.to create_file("/etc/systemd/network/#{title}").that_notifies('Service[systemd-networkd]') } end + context 'without content and without source' do + let :params do + {} + end + + it { is_expected.to compile.and_raise_error(%r{Either content or source must be set}) } + end + context 'with content and source' do + let :params do + { + content: 'bla', + source: 'foo' + } + end + + it { is_expected.to compile.and_raise_error(%r{Either content or source must be set but not both}) } + end end end end end