厨师食谱使用ubuntu环境变量

时间:2017-10-30 22:20:56

标签: ruby chef

我有一个厨师食谱,我希望利用系统中的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的范围不具备所需的属性?

2 个答案:

答案 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