【问题标题】:how to make sure a chef script block doesn't run every time you run chef-solo如何确保每次运行 chef-solo 时都不会运行 chef 脚本块
【发布时间】:2024-07-14 11:10:01
【问题描述】:

对 chef 来说完全陌生...我们曾经从 ppa repo 安装 elasticsearch,但现在我想在每次更改属性/默认值中的版本号时从头开始构建它(repo 不再更新) .rb

现在我有一个 bash 块,它只是拉下 gz 文件,解压缩并将其链接到正确的位置,但我不知道如何制作它,这样它就不会在我每次运行 chef-独奏。

有什么建议吗?

【问题讨论】:

    标签: chef-infra


    【解决方案1】:

    我创建了一个带有版本的文本文件。逻辑很简单。

    • 如果文件不存在:解压。
    • 如果文件存在且版本(用IO.read(filename)检查)不同:解压缩。
    • 如果文件存在且版本相同:什么都不做。

    默认情况下,创建文件的资源有action :nothing,并通过解压缩通知。这样,如果版本相同,不仅解压缩不会运行,而且版本文件也将保持不变。

    伪代码说明逻辑:

    unzip "resource_name" do
      not_if { ::File.exists?( filename ) and node[:version]==IO.read( filename ).strip }
      notifies :create, "file[#{filename}]"
    end
    
    file filename do
      action :nothing
      content node[:version]
    end
    

    【讨论】: