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中创建脚本:
#/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'