【问题标题】:Chef - repetitive recipe execution厨师 - 重复食谱执行
【发布时间】:2011-06-22 06:16:05
【问题描述】:

首先,厨师能否(并且这是一种良好的做法)以特定的时间间隔为特定角色运行食谱?

我有一个管理用户帐户和 ssh 身份的 ruby​​ 脚本,它目前每小时在 cron 上运行一次,出于显而易见的原因,我想把它变成一个 Chef 食谱(我希望它在所有地方都有机器)。

我可以看到两种方法:

将脚本转换为模板,配方将简单地将模板渲染到给定路径,然后注册一个 cronjob

将脚本分解为资源、提供者等,并让 Chef 每小时运行一次。

想法?

【问题讨论】:

    标签: cron chef-infra chef-recipe


    【解决方案1】:

    您可以将 chef-client 作为守护程序运行(-d 选项,如在 init 脚本中使用的那样),或在upstartrunit/daemontools 或 bluepill 等服务管理工具下运行。你当然也可以从 cron 启动它——只要确保不要在那里运行守护程序模式 :)。

    Chef 的资源提供者采取幂等操作将资源配置为所需状态。这意味着如果 Chef 已经在系统上运行,它只会在资源与配方所说的不匹配时修改资源。例如,如果您有一个食谱,上面写着:

    package "haproxy"
    
    service "haproxy" do
      action [:enable, :start]
    end
    
    template "/etc/haproxy/haproxy.cfg" do
      source "haproxy.cfg.erb"
    end
    

    该软件包将在 chef 首次运行时安装,并且不会再次修改,除非该软件包已从系统中删除,或者您修改了资源。同样,haproxy 服务将被启用(通过您平台的服务管理工具,通常是 /etc/rc*.d 中的符号链接)然后启动(例如,通过 /etc/init.d/haproxy start)。最后,只有当模板的内容发生变化时,Chef 才会渲染模板的新版本。对于模板,它根据 SHA256 校验和确定这一点。

    有一些例外 - 执行、脚本和 ruby​​_block 资源如果不提供某种限定符条件就不是幂等的。

    此外,Chef 在使用服务器时没有“一次性”或“一次性”食谱运行列表。最近有一个thread on the Chef mailing list关于这个话题。

    【讨论】:

    • 感谢您的回答。代理作为守护进程运行,我的问题是,厨师是否可以在每次运行时运行相同的配方,即使它之前运行并成功完成?
    【解决方案2】:

    两者都是可行的。
    您提到的选项是:

    1)

    把脚本变成 模板,配方将简单 将模板渲染到给定的路径 然后注册一个cronjob

    这很容易上手(对你的脚本没有真正的改变,它只是确保它在那里)

    请记住,厨师每次都会运行每个食谱......正如 jtimberman 所说:“它只会在资源与食谱不匹配时修改资源”。所以你的食谱应该在新模板发生变化时覆盖它。

    或 2)

    将脚本分解为资源, 提供者等,并让 Chef 运行它 每小时一次。

    此选项更像厨师,并且可能更可靠和可扩展 - 特别是当您将更多基础设施置于厨师管理之下时。

    如果你的 chef 客户端是守护进程,或者 chef-solo 在 cron 上运行,它会很好用。

    在这种情况下,您可以使用“用户”、“组”和“文件”等资源设置配方(复制 ssh 密钥)。详情见这里:http://wiki.opscode.com/display/chef/Resources#Resources-File

    那么,最好的办法是使用“数据包”(json 数据)来存储用户详细信息,并根据该信息安装用户。这正是 opscode 在这个秘籍中所做的(在 ./recipe/sysadmins.rb 中寻找灵感): https://github.com/opscode/cookbooks/tree/master/users

    请注意他们使用的是 chef-server(或 opscode 平台)。如果你使用 chef-solo,你需要用你自己的数据包文件替换 'search(:users, 'groups:sysadmin')' -回购)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多