我通过厨师食谱创建了一个文件。代码如下。
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更改内容。
请在下方发表评论以显示您的解决方案。三江源。
答案 0 :(得分:2)
你一直在询问关于厨师的一系列非常基本的问题。我强烈建议您阅读一些教程和在线培训材料,而不是要求SO有效地为您完成工作。
那说,你想要的是两种资源。首先是创建所需目录的目录资源:
directory "/etc/#{node['jboss']['user']}" do
user node['jboss']['user']
mode '755'
end
这将创建所需的目录,并确保所有者和模式匹配所请求的内容。这比使用mkdir更安全,因为在所有情况下都不会收敛(例如,不会更正所有者/模式)。
之后你想要创建文件。 Chef中有4个主要选项,file
,cookbook_file
,template
和remote_file
。所有这四个都是相关的,并共享相同的核心选项(user
,group
,mode
),但从不同的位置获取文件内容。
file
用于编写由食谱代码生成的内容。这对于写出诸如空文件(默认)或由配方生成的JSON / Yaml数据之类的内容来说非常方便。
cookbook_file
从菜谱的files/
部分逐字复制文件内容。这对于您不想修改的二进制文件(如许可证密钥)非常有用,只需按原样传输到目标系统。
template
与cookbook_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