Chef infra 如何在Chef recipe中传递变量
我想知道如何使用Chef和variables来处理这个问题。 我的默认部分包含以下变量Chef infra 如何在Chef recipe中传递变量,chef-infra,Chef Infra,我想知道如何使用Chef和variables来处理这个问题。 我的默认部分包含以下变量 node.default['common']['docker'] = "18.09.1" 因此,我想通过变量管理版本 remote_file 'docker'-node['common']['docker'] do source 'https://download.docker.com/linux/static/stable/x86_64/docker-'node['commo
node.default['common']['docker'] = "18.09.1"
因此,我想通过变量管理版本
remote_file 'docker'-node['common']['docker'] do
source 'https://download.docker.com/linux/static/stable/x86_64/docker-'node['common']['docker']'.tgz'
owner 'root'
group 'root'
mode '0755'
action :create
end
bash 'install docker' do
code <<-EOH
tar xzvf node['common']['docker']
sudo cp docker/* /usr/bin/
sudo groupadd docker
sudo usermod -a -G docker ec2-user
sudo dockerd &
EOH
end
看来你在找我。Chef属性与Ruby等编程语言中的变量相同 Ruby中的字符串插值是使用
“#{}”
语法执行的。大括号内的任何变量/属性都将被插值
因此,您的远程\u文件
资源应该如下所示:
remote_file”/tmp/docker-#{node['common']['docker']}.tgz“do
来源“https://download.docker.com/linux/static/stable/x86_64/docker-#{node['common']['docker']}.tgz“
所有者“根”
“根”组
模式“0755”
行动:创建
结束
请注意,我使用了外部双引号
“
,因为它是插值所必需的。我还将目标路径作为/tmp
包含在文件中以保存文件。如果我想用EOH:tar xzvf”/tmp/docker-#{node['common']['docker']}.tgz将其放在bash代码中“会是这样吗?没错。您可能还希望为tar
命令设置cwd
或-C路径/to/extract
,例如:tarxzf”/tmp/docker-#{node['common']['docker']}.tgz“-C/tmp
。这就是说,请查看以幂等方式进行此提取。除了以下答案外,还发现了一条类似的线索:
Chef Client failed. 0 resources updated in 02 seconds
FATAL: SyntaxError: /tmp/packer-chef-solo/local-mode-cache/cache/cookbooks/recipes/common.rb:90: syntax error, unexpected tIDENTIFIER, expecting keyword_end