1
我有以下木偶代碼:validate_cmd在木偶:支持舊版本
file { "/etc/sudoers.d/${name}":
content => template('sudo/sudoers.erb'),
owner => 'root',
group => 'root'
mode => '0440',
validate_cmd => '/usr/sbin/visudo -c -f %',
}
然而,validate_cmd
只在僞滿添加> 3.5,我要支持運行3.2及以上的一些系統。
是否有一些巧妙的方法將猴子修補到老版本的Puppet中,或者我應該辭職使用puppetlabs-stdlib
validate_cmd
聲明?
它做了類似的事情,但是如果它沒有正確驗證(fle的validate_cmd參數的主要好處),將不會恢復文件。
編輯:使用Felix的覆蓋語法,我結束了下面的代碼:
file { "/etc/sudoers.d/${name}":
content => template('sudo/sudoers.erb'),
owner => 'root',
group => 'root',
mode => '0440',
}
if versioncmp($::puppetversion, '3.5') >= 0 {
File["/etc/sudoers.d/${name}"] { validate_cmd => '/usr/sbin/visudo -c -f %' }
}
else {
validate_cmd(template('sudo/sudoers.erb'), '/usr/sbin/visudo -c -f', 'Visudo failed to validate sudoers content')
}
這有點繁瑣的木偶RSpec的測試,我結束了這是怎麼回事:
if (Puppet.version >= '3.5.0')
context "validating content with puppet #{Puppet.version}" do
let(:params) { { :users => ['joe'] } }
let(:facts) {{ :puppetversion => Puppet.version }}
it { should contain_file('/etc/sudoers.d/worlddomination').with_validate_cmd('/usr/sbin/visudo -c -f %') }
end
else
context "validating content with puppet #{Puppet.version}" do
let(:params) { { :users => ['joe'] } }
let(:facts) {{ :puppetversion => Puppet.version }}
it { should contain_file('/etc/sudoers.d/worlddomination').with_validate_cmd(nil) }
end
end
我還沒有看到覆蓋以前使用過的語法,非常酷! :) – 2014-11-26 12:21:17