运行 厨师食谱中的任意 ruby 代码

Run arbitrary ruby code in a chef cookbook

我有一本简单的厨师食谱,它所做的只是在 CentOS 机器上设置 MOTD。它获取 /tmp/mymotd.txt 的内容并将其转换为 MOTD。

我还有一个简单的 ruby 脚本(一个成熟的 ruby 脚本),它只是从网络服务器读取文本并放入 /tmp/mymotd.txt .

我的问题是:

  1. 如何从食谱中运行这个ruby脚本?
  2. 如何将一些参数传递给脚本(例如网络服务器的地址)

非常感谢。

广告 1.

您可以在脚本中使用 libraries 目录来放置您的 ruby 脚本并在模块中声明它。示例:

# includes
module MODULE_NAME
    # here some code using your script 

    # Example function
    def example_function (text)
        # some code
    end
end

你可以使用

include MODULE_NAME

在你的食谱中导入这些函数并像

一样使用它
example_function(something)

有什么好处 - 您还可以在那里使用 Chef 功能和资源。

重要信息: 请记住 Chef 有 2 个编译阶段。首先是所有 Ruby 代码,其次是所有 Chef 资源。这意味着,您必须记住代码的优先级。我不会在这里写更多关于它的信息,因为你没有要求这个,但如果你想要,你可以找到它 here

广告 2.

您可以通过多种方式做到这一点,但在我看来,对您来说最好的选择是使用 environments。您可以找到更多信息 in here。基本上,您可以在脚本运行之前设置环境 运行 - 这样您就可以定义一些稍后会用到的变量。

希望对您有所帮助。