如何通过厨师食谱编辑文件内容?

时间:2014-11-18 02:28:52

标签: chef chef-recipe

我通过厨师食谱创建了一个文件。代码如下。

execute "helloworld.txt" do
  command "mkdir /etc/#{node['jboss']['user']}"
  not_if { ::File.exists?("/etc/#{node['jboss']['user']}")}
end

file "/etc/jboss-as/helloworld.txt" do
   owner 'user'
   group 'user'
   mode 0755
   action :create_if_missing
end

template "/etc/jboss-as/helloworld.txt" do
  source "helloworld.txt.erb"
end

我的helloworld.txt文件内容如下:

TESTING 
Hello World 
Hello Winnie 
Hello Everyone 
Hello Boy

我想编辑Hello Boy给Hello Girl,使用代码编辑上面的命令,我应该使用什么命令,我需要做什么?我不想直接从helloworld.txt更改内容。

请在下方发表评论以显示您的解决方案。三江源。

1 个答案:

答案 0 :(得分:2)

你一直在询问关于厨师的一系列非常基本的问题。我强烈建议您阅读一些教程和在线培训材料,而不是要求SO有效地为您完成工作。

那说,你想要的是两种资源。首先是创建所需目录的目录资源:

directory "/etc/#{node['jboss']['user']}" do
  user node['jboss']['user']
  mode '755'
end

这将创建所需的目录,并确保所有者和模式匹配所请求的内容。这比使用mkdir更安全,因为在所有情况下都不会收敛(例如,不会更正所有者/模式)。

之后你想要创建文件。 Chef中有4个主要选项,filecookbook_filetemplateremote_file。所有这四个都是相关的,并共享相同的核心选项(usergroupmode),但从不同的位置获取文件内容。

file用于编写由食谱代码生成的内容。这对于写出诸如空文件(默认)或由配方生成的JSON / Yaml数据之类的内容来说非常方便。

cookbook_file从菜谱的files/部分逐字复制文件内容。这对于您不想修改的二进制文件(如许可证密钥)非常有用,只需按原样传输到目标系统。

templatecookbook_file类似,但在写出之前通过Erb模板语言运行内容。这允许基于节点属性或搜索查询等内容的动态内容。

remote_file从提供的URL下载文件内容,而不是从Chef服务器获取文件内容。

在这种情况下,似乎template可能是你想要的:

template "/etc/#{node['jboss']['user']}/helloworld.txt" do
  user node['jboss']['user']
  mode '644'
  source 'helloworld.txt.erb'
end