如何在 Chef 食谱中传递变量
How to pass variables in Chef recipe
我想知道如何使用 Chef 和变量来管理它。
我的默认部分包含以下变量
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 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
您似乎在寻找 string/variable interpolation。 Chef 属性与 Ruby.
等编程语言中的变量相同
Ruby 中的字符串插值是使用 "#{}"
语法执行的。花括号内的任何 variable/attribute 都将被插入。
因此您的 remote_file
资源应该如下所示:
remote_file "/tmp/docker-#{node['common']['docker']}.tgz" 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
请注意,我使用了外部双引号 "
,因为它是插值所必需的。此外,我已将目标路径包含为 /tmp
以保存文件。
我想知道如何使用 Chef 和变量来管理它。 我的默认部分包含以下变量
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 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
您似乎在寻找 string/variable interpolation。 Chef 属性与 Ruby.
等编程语言中的变量相同 Ruby 中的字符串插值是使用 "#{}"
语法执行的。花括号内的任何 variable/attribute 都将被插入。
因此您的 remote_file
资源应该如下所示:
remote_file "/tmp/docker-#{node['common']['docker']}.tgz" 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
请注意,我使用了外部双引号 "
,因为它是插值所必需的。此外,我已将目标路径包含为 /tmp
以保存文件。