为什么我的厨师师范属性不存在?

时间:2015-09-30 17:09:40

标签: chef knife

我需要在节点上的chef-client运行之间保留一些值。从Chef docs我认为正常属性用于此

  

“在厨师 - 客户端运行的开始,所有默认,覆盖和   自动属性被重置...普通属性永远不会   重置...在厨师 - 客户端运行结束时,所有默认值,   覆盖,自动属性消失,只留下一个   正常属性的集合将持续到下一个   厨师 - 客户经营。“)

但是,如果我使用以下配方两次

引导节点
log 'message' do
  message "Before setting I am #{node['my_key']}"
  level :warn
end

node.normal['my_key'] = 'my value'

log 'message' do
  message "After setting I am #{node['my_key']}"
  level :warn
end

我希望看到

  

在设定之前我是我的价值

在第二次运行时(因为值从第一次运行持续)。但是它又恢复了原状。

值是否可能持续存在?我需要以不同的方式运行配方吗?或者这是不可能的?

编辑:据我所知,Chef运行成功完成。这是命令和输出:

mfreake@my-linux:/export/apps/chef/chef-repo/cookbooks$ knife bootstrap node1.blah.com --ssh-user mfreake --ssh-password 'yaddayadda' --sudo --use-sudo-password  --bootstrap-proxy 'http://proxy.blah.com/' -N node1 --run-list persist_test::read_set_read
Node node1 exists, overwrite it? (Y/N) Y
Client node1 exists, overwrite it? (Y/N) Y
Creating new client for node1
Creating new node for node1
Connecting to node1.marketpipe.com
node1.blah.com [sudo] password for mfreake: -----> Existing Chef installation detected
node1.blah.com Starting first Chef Client run...
node1.blah.com Starting Chef Client, version 12.4.2
node1.blah.com resolving cookbooks for run list: ["persist_test::read_set_read"]
node1.blah.com Synchronizing Cookbooks:
node1.blah.com   - persist_test
node1.blah.com Compiling Cookbooks...
node1.blah.com [2015-09-30T17:45:40+01:00] WARN: Cloning resource attributes for log[message] from prior resource (CHEF-3694)
node1.blah.com [2015-09-30T17:45:40+01:00] WARN: Previous log[message]: /var/chef/cache/cookbooks/persist_test/recipes/read_set_read.rb:2:in `from_file'
node1.blah.com [2015-09-30T17:45:40+01:00] WARN: Current  log[message]: /var/chef/cache/cookbooks/persist_test/recipes/read_set_read.rb:9:in `from_file'
node1.blah.com Converging 2 resources
node1.blah.com Recipe: persist_test::read_set_read
node1.blah.com   * log[message] action write[2015-09-30T17:45:40+01:00] WARN: A message add to the log. 
node1.blah.com 
node1.blah.com   
node1.blah.com   * log[message] action write[2015-09-30T17:45:40+01:00] WARN: A message add to the log. my value
node1.blah.com 
node1.blah.com   
node1.blah.com 
node1.blah.com Running handlers:
node1.blah.com Running handlers complete
node1.blah.com Chef Client finished, 2/2 resources updated in 1.621458795 seconds

2 个答案:

答案 0 :(得分:1)

好的,有两种情况,节点状态,包括属性可能无法保存在厨师服务器上:

  1. 当运行结束时出错(这里取决于错误,无论如何都可以保存状态,但它超出了这个问题的范围)
  2. 运行chef-client -o any_recipe_list -o选项会暂时覆盖运行列表,因此无法保存回主厨服务器,不会覆盖实际运行列表。
  3. node.normalnode.set是相同的,在节点对象中写入值以存储在服务器上。 Examples in the documentation on the attributes

    此问题是由于使用knife bootstrap(根据documentation on the validator less bootstrap版本> 12.1),首先是在chef-server及其客户端密钥上创建节点。调用它两次并允许它覆盖前一个对象重置整个节点对象。

    bootstrap只能使用一次,之后运行的任何厨师 - 客户端应该以其他方式触发(crontab,刀ssh等)

答案 1 :(得分:0)

您应该尝试node.set['my_key'] = 'my value'(或使用node.set_unless,以便在有人更改您的厨师服务器上的属性时保持安全。