chef-infra - 如何从 Chef 数据包中访问当前值?

标签 chef-infra

我有一台由 Chef 管理的服务器。
我需要从不是由 Chef 运行的脚本访问一些存在于 Recipe 数据包中的值。

/* Chef REST API 允许访问 Chef 服务器所看到的数据包值。这不是我想要的。每个chef-client run 可能会引入许多协调的更改,包括数据包中的更改。如果服务器上的数据已经更改,但 chef-client尚未在本地运行,本地设置和服务器端数据包可能不同步。 */

我看到两个解决方案:

  • 解析/导入/var/cache/chef/cookbooks/<book-name>下的数据包文件因为它或多或少是普通的Ruby。
  • 在配方中,将数据包中的相关数据转储到可从我的脚本访问的纯文件中。

  • 有更好的选择吗?

    最佳答案

    将节点哈希或数据包中的数据转储到单独的文件中是在 Chef 服务器和节点上运行的脚本之间进行通信的好方法。如果您的脚本可以解析 JSON,那么这真的很容易:

    file "/etc/script.json" do
      owner "root"
      group "root"
      mode 0644
      content node[:whatever].to_json
     end
    

    使用 Chef REST 接口(interface)听起来有点矫枉过正,在/var/cache/chef 中摸索是不礼貌的。 (-:

    关于chef-infra - 如何从 Chef 数据包中访问当前值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10318919/

    相关文章:

    ssh - 奇怪的 Vagrant/SSH 连接行为

    ruby - Chef LWRP 的属性方法是什么?我可以传递什么?

    chef-infra - Chef 客户无法使用 Berkshelf 找到 Recipe

    Rails 上的 MySQL Gem 安装错误

    ruby - 在 Ruby 中,如何在文件中的另一行之后添加一行?

    mysql - Chef 客户端在处理 MySQL Recipe 期间出现错误

    chef-infra - 如何在 Vagrant 盒子中安装 Postgresql

    ruby - Gem::Ext::BuildError:错误:无法构建 gem native 扩展 - nio4r

    chef-infra - 如果要安装的所需软件包不存在,如何告诉 Chef 采取措施?

    linux - root 用户的 Chef 客户端权限被拒绝