
上面是质询提示,下面是我的最新尝试。目录和文件按预期创建,执行chef-apply multipleCopies.rb之后的读出告诉我这些文件是链接的,但是当我更新任何一个文件时,其他文件都没有这样做。有什么想法吗?下面是我的代码:
for x in 1..3
directory "multipleCopy#{x}" do
mode '0755'
action :create
end
end
file "multipleCopy1/secret.txt" do
mode '0755'
action :create
end
for x in 2..3
link "multipleCopy#{x}/secret.txt" do
to "multipleCopy1/secret.txt"
link_type :hard
subscribes :reload, "multipleCopy1/secret.txt", :immediately
end
end注意:为了减少麻烦,在上传到提示符中提到的ubuntu服务器之前,我正在本地测试配方,这就是为什么我的文件路径不同,以及我还没有包括所有权属性的原因。
发布于 2018-06-26 12:14:28
因此,文件硬链接似乎不是问题的主题(尽管我想说你的解决方案可能更好,因为这真的不是Chef的用途,稍后会有更多)。相反,他们似乎希望你有三个实际上不同的文件,但同步内容。
所以首先是简单的部分,创建目录和空的初始文件。在Ruby代码中很少看到这样的for循环,尽管它在语法上是有效的:
3.times do |n|
directory "/var/save/multipleCopy#{n+1}" do
owner "ubuntu"
group "root"
mode "755"
end
file "/var/save/multipleCopy#{n+1}/secret.txt" do
owner "root
group "root"
mode "755"
end
end但这并没有实现同步文件的困难部分。为此,我们需要首先分析文件上的mtime,并使用最新的作为要设置的文件内容。
latest_file = 3.times.sort_by { |n| ::File.mtime("/var/save/multipleCopy#{n+1}/secret.txt") rescue 0 }
latest_content = ::File.read("/var/save/multipleCopy#{latest_file+1}/secret.txt") rescue nil然后在文件资源中:
file "/var/save/multipleCopy#{n+1}/secret.txt" do
owner "root
group "root"
mode "755"
content latest_content
end至于这并不是Chef: Chef的一个很好的用法,它是关于编写断言机器所需状态的代码。对于这样的文件,您可以简单地说Chef拥有所有这三个文件的内容,如果您想要更新它,您可以通过您的食谱(然后通常使用template或cookbook_file资源)来进行更新,而不是做这种时髦的事情来检查文件是否被编辑过。
https://stackoverflow.com/questions/51032781
复制相似问题