运行 厨师食谱中的任意 ruby 代码
Run arbitrary ruby code in a chef cookbook
我有一本简单的厨师食谱,它所做的只是在 CentOS 机器上设置 MOTD。它获取 /tmp/mymotd.txt 的内容并将其转换为 MOTD。
我还有一个简单的 ruby 脚本(一个成熟的 ruby 脚本),它只是从网络服务器读取文本并放入 /tmp/mymotd.txt .
我的问题是:
- 如何从食谱中运行这个ruby脚本?
- 如何将一些参数传递给脚本(例如网络服务器的地址)
非常感谢。
广告 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。基本上,您可以在脚本运行之前设置环境 运行 - 这样您就可以定义一些稍后会用到的变量。
希望对您有所帮助。
我有一本简单的厨师食谱,它所做的只是在 CentOS 机器上设置 MOTD。它获取 /tmp/mymotd.txt 的内容并将其转换为 MOTD。
我还有一个简单的 ruby 脚本(一个成熟的 ruby 脚本),它只是从网络服务器读取文本并放入 /tmp/mymotd.txt .
我的问题是:
- 如何从食谱中运行这个ruby脚本?
- 如何将一些参数传递给脚本(例如网络服务器的地址)
非常感谢。
广告 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。基本上,您可以在脚本运行之前设置环境 运行 - 这样您就可以定义一些稍后会用到的变量。
希望对您有所帮助。