无法使用knife命令删除节点属性

时间:2013-12-17 01:18:57

标签: chef chef-recipe knife cookbook

我创建了cookbook,用于启用某些Windows功能并使用WindowsRebootHandler重新启动计算机。如下面的代码所示,我使用ruby_block在后续运行中不执行相同的操作。

windows_batch 'Enable_MS_Feature' do
  code <<-EOH
    #My script
  EOH
  notifies :create, "ruby_block[WindowsFeature_Install]", :immediately
  notifies :request, 'windows_reboot[60]'
  not_if { node.attribute?("WindowsFeature_Installed") }
end

ruby_block "WindowsFeature_Install" do
  block do
    node.set['WindowsFeature_Installed'] = true
    node.save
  end
  action :nothing
end

出于测试目的,我必须删除WindowsFeature_Installed属性才能再次执行操作。所以,我使用了以下命令。

knife exec -E "nodes.transform(:all) {|n| n.delete('WindowsFeature_Installed');n.save() }"

上面的命令不是删除节点属性。当我使用knife命令搜索相同的属性时,它列出了所有节点。

knife search node "WindowsFeature_Installed:true"

要进一步调试,已启用命令的详细输出,并且来自chef-server的所有HTTP响应都正常。

此外,尝试检查chef-server日志以获取错误详细信息。但无法识别问题,因为存在与chef-server软件包相关的许多进程日志。

那么,如何删除此属性以再次执行配方操作?或者在哪个厨师服务器日志中,将记录节点属性删除详细信息?任何指针都会有所帮助。

1 个答案:

答案 0 :(得分:3)

我有类似的问题。我无法从节点删除属性,但通过 set 进行修改。帮助我解决这个问题的方法是查看我的一个食谱生成属性的级别。

例如删除属性&#34; network_interfaces&#34;看看你当前的笔记配置。

knife node show -l -F json <node_name>

你应该从nodes-config获得类似的输出:

{
  "name": "<node_name>",
  "chef_environment": "_default",
  "run_list": [
   ...
  ],
  "normal": {
     "tags": [
     ],
    "network_interfaces": {
       "order": [
         "vpn_vpn"
       ]
    },
  },
  "default": {
     ...
  },
  ...

在我的情况下,我想从所有节点中删除 network_interfaces - 属性。所以我执行了:

knife exec -E 'nodes.transform(:all) { |n| n.normal_attrs.delete("network_interfaces"); n.save() }'

而不是:

knife exec -E 'nodes.transform(:all) { |n| n.delete("network_interfaces"); n.save() }'

有关不同属性优先级的更多信息,请访问:https://coderwall.com/p/rfm4lg

一篇关于使用knife查询节点属性的好文章:http://www.programmersparadox.com/2013/02/05/viewing-chef-node-attributes-with-knife/

相关问题