Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Environment variables 如何使用厨师配方设置环境变量?_Environment Variables_Chef Infra_Chef Recipe - Fatal编程技术网

Environment variables 如何使用厨师配方设置环境变量?

Environment variables 如何使用厨师配方设置环境变量?,environment-variables,chef-infra,chef-recipe,Environment Variables,Chef Infra,Chef Recipe,如何使用厨师配方设置环境变量 我需要使用厨师食谱设置一个环境变量。您能提供一个如何实现这一点的示例吗?如果您需要在Chef流程中严格设置环境变量,您可以使用env['foo']='bar,因为它是一个ruby流程 如果需要为设置一个,Chef将公开一个环境哈希: execute 'Bootstrap the database' do cwd "#{app_dir}/current" command "#{env_cmd} rake db:drop db:create db:schema

如何使用厨师配方设置环境变量


我需要使用厨师食谱设置一个环境变量。您能提供一个如何实现这一点的示例吗?

如果您需要在Chef流程中严格设置环境变量,您可以使用
env['foo']='bar
,因为它是一个ruby流程

如果需要为设置一个,Chef将公开一个环境哈希:

execute 'Bootstrap the database' do 
  cwd "#{app_dir}/current"
  command "#{env_cmd} rake db:drop db:create db:schema:load RAILS_ENV=#{rails_env}"
  environment 'HOME' => "/home/#{app_user}"
  user app_user
  action :run
  not_if %[psql -U postgres -c "\\l" | grep #{db_name}]
end

如果要设置持久性环境变量,则可能需要Chef编辑
/etc/profile.d/Chef.sh
/etc/environment
、用户配置文件等。

如果要使用Chef在系统上设置该变量,请签出


如果您想在
/etc/environment
中的系统级设置它,您可以根据以下示例直接进行设置,而无需添加额外的配方(这为Java添加了两个环境变量):


在Windows和Linux之间实现这一点的方法是不同的。最简单的方法是:

窗口

使用windows_env资源创建系统环境变量:

windows_env 'CHEF_LICENSE' do
  value 'accept'
end
Linux

如果您只需要将其用于cookbook运行及其子级,那么请使用Ruby ENV资源。这不是永久性的:

ENV['CHEF_LICENSE'] = 'accept'
如果您需要它是永久的(并使用bash):

在/etc/profile.d中创建脚本:

  • 创建模板脚本(例如chef.sh.erb)
  • 填写模板脚本:

    #/bin/bash
    CHEF Infra客户端15需要出口CHEF_许可证='accept'#

  • 将模板资源放在您的配方中(您可能需要设置属性和所有者/组设置,我希望这个示例保持简单)

    template'/etc/profile.d/chef.sh'do
    来源“厨师长,上海市雇员再培训局”
    结束

  • 这里有一些额外的资源,可以阅读这里引用的不同资源:



    对于Linux,最好的方法是使用

    ENV['Var'] = 'Value'
    

    使用此命令时,配方旋转的每个子进程都将使用此ENV值。您可以使用bash资源并回显Var的值来验证它。

    要设置的环境变量的上下文是什么?您可以扩展您的问题吗?除非你分享更多的信息或给我们一些反馈,否则它似乎已经被回答了。给其他正在谷歌搜索的人一个提示——神奇的shell环境非常棒,有一个抓到了。从ruby脚本中使用system(“/new/process/to/call”)调用的任何命令都不会从/etc/profile.d/*中提取automatically@matt您可以通过在Ruby脚本中强制进行交互式登录和/或寻源
    /etc/profile
    来实现这一点。谢谢,@sethvargo。要更新环境变量,例如
    $PATH
    ,我应该如何使用
    magic\u shell
    cookbook?magic\u shell\u环境“PATH”do value“$PATH:which”end@matt-我的问题()展示一个你提到的潜在问题的具体例子?你能解释一下如何通过chef@Prats-查看
    magic_shell
    cookbook-Linux部分非常有用,工作非常完美。非常感谢你!
    ENV['CHEF_LICENSE'] = 'accept'
    
    ENV['Var'] = 'Value'