【问题标题】:Run arbitrary ruby code in a chef cookbook在厨师食谱中运行任意 ruby​​ 代码
【发布时间】:2016-01-08 06:47:47
【问题描述】:

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

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

我的问题是:

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

非常感谢。

【问题讨论】:

    标签: ruby chef-infra cookbook recipe


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

    希望这会有所帮助。

    【讨论】:

    • 非常感谢!虽然我无法使用 include MODULE_NAME,所以我搜索了一下,发现:Chef::Recipe.send(:include, MODULE_NAME) 具有魔力。
    • 是的,对不起,我也忘了提到这个命令 :) 很高兴能帮到你!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 2013-08-21
    • 1970-01-01
    • 2017-11-17
    相关资源
    最近更新 更多