我有一个厨师食谱,我希望利用系统中的ubuntu环境变量:
bash "proj s3 sync" do
code "AWS_ACCESS_KEY_ID=#{ENV['AWS_ACCESS_ID']} AWS_SECRET_ACCESS_KEY=#{ENV['AWS_SECRET']} aws command..."
cwd "/home/#{node['deploy']['chef-environment']}"
user "#{node['deploy']['chef-environment']}"
environment ({
'HOME' => ::Dir.home(node['deploy']['chef-environment']),
'USER' => node['deploy']['chef-environment'],
})
ignore_failure false
end
执行此配方时,env vars为空。但是在同一台机器上,执行EG echo $AWS_ACCESS_ID
会按预期返回结果。
我在这个厨师食谱中使用ruby ENV语法有什么问题吗?或者另一个原因是ENV的范围不具备所需的属性?
答案 0 :(得分:1)
所以你直接在那里使用ENV
,意味着从chef-client
的环境中获取内容。并且因为chef-client
通常直接通过SSH(没有shell)或作为服务(同样没有shell)运行,所以所有的shell初始化文件都不会被加载。请记住,Unix没有“全局环境变量”或“系统环境变量”的概念。您需要(或需要)使用某种配置文件。
答案 1 :(得分:0)
在我的上下文中,此实现是针对AWS服务器的。
AWS为通过opsworks管理的机器提供环境变量的接口,主厨通过配方aws_opsworks_app:
http://docs.aws.amazon.com/opsworks/latest/userguide/data-bag-json-app.html