如何在CHEF中建立变量属性值

时间:2018-04-06 09:12:21

标签: chef chef-recipe cookbook

用例,

我们正在尝试使用脚本自动创建目录,这些脚本存储在脚本目录中,并且一旦将脚本复制到节点的/ 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文件中定义的属性值中拉出

1 个答案:

答案 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