我需要在节点上的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
答案 0 :(得分:1)
好的,有两种情况,节点状态,包括属性可能无法保存在厨师服务器上:
chef-client -o any_recipe_list
-o
选项会暂时覆盖运行列表,因此无法保存回主厨服务器,不会覆盖实际运行列表。 node.normal
和node.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
,以便在有人更改您的厨师服务器上的属性时保持安全。