Chef infra 如何在Chef recipe中传递变量

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

我想知道如何使用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['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