如何在Chef食谱的Shell脚本中使用节点属性?
使用Chef属性值的两种实现方式
嘿,我来帮你搞定用Chef属性值的事儿!你已经在attributes/default.rb里配置好了属性:
node.default['main']['a2'] = "hello world"
下面给你两种方式来在食谱里使用这个属性值:
方式一:用execute执行echo写入文件
你可以修改现有的execute资源,通过Ruby字符串插值把属性值嵌入到命令里,这样就能把"hello world"写入到目标文件啦:
# Cookbook Name:: a2 # Recipe:: default # # Copyright (c) 2018 The Authors, All Rights Reserved. execute 'write_a2_value' do command "echo '#{node['main']['a2']}' > /tmp/a2345" end
这里的#{node['main']['a2']}会在Chef编译阶段替换成你设置的"hello world",执行后/tmp/a2345文件里就会有这个内容。
方式二:用Chef的file资源(推荐)
其实Chef更推荐用内置的file资源来处理文件操作,这种方式更符合Chef的幂等性原则(文件内容如果已经正确就不会重复执行),代码也更直观:
# Cookbook Name:: a2 # Recipe:: default # # Copyright (c) 2018 The Authors, All Rights Reserved. file '/tmp/a2345' do content node['main']['a2'] mode '0644' # 可选,设置文件权限,默认也是0644 end
这个资源会直接把属性值作为文件内容写入/tmp/a2345,还能方便地设置文件权限,比用execute更稳妥哦。
内容的提问来源于stack exchange,提问作者anish anil
相关产品推荐
相关产品推荐

