我想在文件/var/rsyslog.conf文件中添加以下几行,而不必删除现有文件。
要包含在文件中的行是
*************
#audit log
$ModLoad imfile
$InputFileName /var/log/audit/audit.log
$InputFileTag tag_audit_log:
$InputFileStateFile audit_log
$InputFileSeverity info
$InputFileFacility local6
$InputRunFileMonitor
*.* @@172.167.189.67:514
*************
在配方中,我将以下内容作为文件资源
****
file '/etc/rsyslog.conf' do
content ' #audit log
$ModLoad imfile
$InputFileName /var/log/audit/audit.log
$InputFileTag tag_audit_log:
$InputFileStateFile audit_log
$InputFileSeverity info
$InputFileFacility local6
$InputRunFileMonitor'
*.* @@172.167.189.67:514 --> #This value needs to be dynamically changed using String Intepolation
mode '0644'
owner 'root'
group 'root'
end
****
尽管它更新了文件,但只有上面几行,并且所有其他文件内容现在都消失了
我尝试创建一个扩展名为.erb的新模板文件,顺便说一句,它也做了同样的事情。插入内容,但删除较旧的文件内容。
将文件与属性值插值一起添加的建议方式是什么。
用例:
Attribute.rb文件
default ['serverIP'] ['hostname'] =“ 172.167.189.67:514” 此属性值将是动态的,并且会定期更改。
我想在文件或模板中使用插值法,以便它选择属性文件中提供的值。
最简单的方法是什么?
谢谢
答案 0 :(得分:0)
file
资源用于立即管理整个文件。我们建议不要进行部分文件更新,因为这会导致Chef内核非常脆弱,但是如果需要,请查看poise-file
和line
食谱。
答案 1 :(得分:0)
@coderander提到,不建议在Chef中执行此操作,因为这样最好在Chef中管理整个文件。
但是,如果必须这样做(有时是这种情况),可以通过以下方式实现:
bash 'append line(s) to file if it doesnt exist' do
user 'user'
code <<-EOS
cat >>/home/file <<EOL
*.* @@172.167.189.67:514
EOL
EOS
not_if "grep -q 172.167.189.67 /home/file"
end
您可能需要在该^上运行cookstyle