首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Chef食谱保持文件更新

使用Chef食谱保持文件更新
EN

Stack Overflow用户
提问于 2018-06-26 06:54:16
回答 1查看 783关注 0票数 0

上面是质询提示,下面是我的最新尝试。目录和文件按预期创建,执行chef-apply multipleCopies.rb之后的读出告诉我这些文件是链接的,但是当我更新任何一个文件时,其他文件都没有这样做。有什么想法吗?下面是我的代码:

代码语言:javascript
运行
复制
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服务器之前,我正在本地测试配方,这就是为什么我的文件路径不同,以及我还没有包括所有权属性的原因。

EN

回答 1

Stack Overflow用户

发布于 2018-06-26 12:14:28

因此,文件硬链接似乎不是问题的主题(尽管我想说你的解决方案可能更好,因为这真的不是Chef的用途,稍后会有更多)。相反,他们似乎希望你有三个实际上不同的文件,但同步内容。

所以首先是简单的部分,创建目录和空的初始文件。在Ruby代码中很少看到这样的for循环,尽管它在语法上是有效的:

代码语言:javascript
运行
复制
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,并使用最新的作为要设置的文件内容。

代码语言:javascript
运行
复制
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

然后在文件资源中:

代码语言:javascript
运行
复制
  file "/var/save/multipleCopy#{n+1}/secret.txt" do
    owner "root
    group "root"
    mode "755"
    content latest_content
  end

至于这并不是Chef: Chef的一个很好的用法,它是关于编写断言机器所需状态的代码。对于这样的文件,您可以简单地说Chef拥有所有这三个文件的内容,如果您想要更新它,您可以通过您的食谱(然后通常使用templatecookbook_file资源)来进行更新,而不是做这种时髦的事情来检查文件是否被编辑过。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51032781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档