在 Ubuntu 14.04 中阻止 Chef 运行 bash 命令两次

Prevent Chef from running the bash commands twice in Ubuntu 14.04

在 Chef 食谱中,我使用 bash 命令来设置环境变量。

bash 'setup_env' do
code <<-EOH
    echo #{node['foo']} | sudo tee --append /etc/environment
    echo #{node['bar} | sudo tee --append /etc/environment
    for line in $( cat /etc/environment ) ; do export $line ; done
    EOH
end

每次我 运行 vagrant provision[=15 时,这都会将 foo 和 bar 写入 /etc/environment =]

/etc/environment 文件的结尾是这样的:

foo="foo"
bar="bar"
foo="foo"
bar="bar"

有没有一种方法可以防止此 bash 命令在 Chef 中 运行 多次执行?

社区食谱etc_environment可用于管理“/etc/environment”文件。

查看其代码,您会发现它使用 chef template 来管理文件:

虽然 Mark 指出存在替代方案是正确的,但更详细的答案是您没有 "idempotent"。 Chef 将在 运行 秒内每次 运行 那个脚本位,并且由于您没有针对它的保护措施,因此会一遍又一遍地附加相同的值。我们提供 templatefile 资源以幂等方式管理文件内容。