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

时间:2015-10-10 10:55:30

标签: ruby chef cookbook recipe

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

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

我的问题是:

  1. 如何在食谱中运行这个ruby脚本?
  2. 如何将一些参数传递给脚本(例如网络服务器的地址)
  3. 事先非常感谢。

1 个答案:

答案 0 :(得分:1)

广告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。基本上,您可以在脚本运行之前为脚本设置环境 - 这样您就可以定义稍后将使用的一些变量。

希望这有帮助。