用例,
我们正在尝试使用脚本自动创建目录,这些脚本存储在脚本目录中,并且一旦将脚本复制到节点的/ tmp目录,就会调用该脚本。
attributereplacement/
├── Berksfile
├── LICENSE
├── README.md
├── attributes
└── default.rb
├── chefignore
├── files
│ └── default
└── unix.sh
├── metadata.rb
├── recipes
└── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
└── default
└── default_test.rb
in the Unix.sh under files directory we have the following
mkdir /tmp/'#{default['main']['a2']}'
mkdir'/ tmp /'#{default ['main'] ['a2']}'
“mkdir / tmp /'#{default ['main'] [' A2 ']}'“`
在Attribute目录下,我们有以下内容 node.default ['main'] ['a2'] =“MY_DIR”
根据食谱,我们有以下内容:
cookbook_file '/tmp/unix.sh' do
source 'unix.sh'
owner 'root'
group 'root'
mode '0755'
action :create
end
execute 'script' do
command './tmp/unix.sh'
end
食谱完成执行,但它不是创建一个名为“MY_DIR”的目录,而是创建一个名为 - >的目录。 #{默认[ '主'] [ 'A2']}
是否可以将属性值传递给脚本,或者是否有其他方法可以解决此问题。
注意:我知道我们可以使用CHEF资源创建一个文件/目录,但我更感兴趣的是通过脚本执行此操作,因为我们有另一个用例来实现,这类似于将属性值传递给脚本实际上从attributes.rb文件中定义的属性值中拉出
答案 0 :(得分:1)
使用模板资源而不是cookbook_file
for f in temp/temp_orfs/* ; do
wc -l $f > ${f}_temp
gawk '{print $1}' ${f}_temp > temp/temp_orfs/num_${f}_text
done
${f}_temp ---> exists
num_${f}_text --> doesn't exists
在cookbook根目录下的templates / default里面创建模板unix.sh.erb,内容如下
template '/tmp/unix.sh' do
source 'unix.sh.erb'
variables (dir: node['main']['a2'] )
owner 'root'
group 'root'
mode '0755'
end