chef-infra - 自动属性(Ohai 数据)何时更新?

标签 chef-infra

来自http://docs.opscode.com/chef_overview_attributes.html#automatic-ohai的介绍,它表示“自动属性包含由 Ohai 在每次 Chef -客户端运行开始时识别的数据。自动属性无法修改并且始终具有最高属性优先。”

据我了解:

  1. 无法修改自动属性。
  2. 仅当 Chef-client 运行时才会更新自动属性

对于第一点来说,这不是真的。我能够修改自动属性。例如,假设我想更改 Chef 包的版本:

require 'chef'
Chef::Config.from_file(File.join('/home/chefuser', '.chef', 'knife.rb'))
query = Chef::Search::Query.new

# search a node by node name, test_machine in my case
nodes = query.search('node', "name:test_machine").first

nodes[0].automatic["chef_packages"]["chef"]["version"] = "11.12.2"
nodes[0].save

并使用

knife node show test_machine -l | grep version

Chef 包的版本已更改。 问题:这是修改自动属性的正确方法吗?或者不需要更改自动属性,因为 Ohai 会自动执行?

对于第二个问题,问题:“在 Chef -客户运行开始时”到底是什么意思?如果 Chef-client 不运行,自动属性是否永远不会更新?

我认为一旦系统配置发生更改,自动属性就应该更新。我想知道即使不运行 Chef-client,自动属性何时也会更新。

最佳答案

无法在 Chef 客户端运行的上下文中修改自动属性。即使您在保存的节点对象上设置了一个属性(这就是您的代码正在执行的操作),它也会在每个 Chef 客户端运行开始时重置,并且来自 ohai 的值将覆盖它。

以下是 Chef 客户端运行期间的大致事件顺序:

  1. Chef 从 Chef 服务器检索保存的节点对象(如果存在)
  2. 它应用 Recipe/角色/Recipe 中的任何属性覆盖
  3. 它应用了ohai提供的自动属性
  4. 它使用更新后的状态执行运行列表
  5. 如果运行成功,它会将更新后的节点对象保存在 Chef 服务器上

因此,如果您只需要在 Chef 客户端运行中使用正确的自动属性,则无需执行任何操作,因为这一切都会自动发生。

编辑:您可以找到有关属性持久性和优先级的更多详细信息 here .

关于chef-infra - 自动属性(Ohai 数据)何时更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23204256/

相关文章:

symlink - 如何确保 Chef 中的符号链接(symbolic link)存在目录路径?

chef-infra - Chef : Resource Vs Recipe

linux - 卸载 Chef 客户端

ubuntu - Ubuntu 上 Chef Server 上的 Recipe 位置

chef-infra - 厨房测试如何使用本地vm.box

chef-infra - 尝试创建两个目录的符号链接(symbolic link)时 Chef 链接错误

ruby - 有什么办法可以延迟资源的属性解析到 "execute"阶段?

Chef 中的 Git 身份验证

chef-infra - Opscode Chef 注册节点时请求实体太大

chef-infra - 覆盖配方中的属性