如何在 Chef 模板中使用 OpsWorks App Data Bag (aws_opsworks_app) 环境变量?
How to use OpsWorks App Data Bag (aws_opsworks_app) environment variables in Chef templates?
鉴于 OpsWorks 对 Chef 12 的支持是最近发布的——我能找到的所有文档都是针对 Chef 11 的。因此,这是我当前的设置:Flask + gunicorn + nginx on OpsWorks with Chef 12。我使用 Upstart 来使用模板启动 Gunicorn:
start on runlevel [2345]
stop on runlevel [!2345]
respawn
setuid <%= node['conf-cookbook']['gunicorn_user'] %>
setgid <%= node['conf-cookbook']['gunicorn_group'] %>
env MAIL_SERVER="email-smtp.us-east-1.amazonaws.com"
env MAIL_USERNAME="[redcacted]"
env MAIL_PASSWORD="[redacted]"
chdir <%= node['conf-cookbook']['app_dir'] %>
exec gunicorn --workers 3 --bind unix:<%= node['conf-cookbook']['gunicorn_socket'] %> -m 007 --log-file <%= node['conf-cookbook']['gunicorn_logfile']%> manage:app
我必须在模板中包含敏感的环境变量信息。在 OpsWorks Chef 12 中,可以使用 App Data Bag (aws_opsworks_app) 指定环境变量,并使用类似于部署配方中的内容进行检索(从未尝试过 - 是否正确):
app = search(:aws_opsworks_app).first
app['environment']['MAIL_SERVER']
我想用应用程序数据包环境变量来替换我在模板文件中定义的环境变量,但不知道如何。谁能帮忙?
谢谢!!
您可以将任意变量数据传递给 Chef 模板资源:
template '/etc/init/myapp.conf' do
source 'myapp.conf.erb'
variables node['conf-cookbook'].merge(app)
end
然后让您的模板看起来更像这样:
start on runlevel [2345]
stop on runlevel [!2345]
respawn
setuid <%= @gunicorn_user %>
setgid <%= @gunicorn_group %>
<%- @environment.each do |key, value| -%>
env <%= key %>="<%= value %>"
<%- end -%>
chdir <%= @app_dir %>
exec gunicorn --workers 3 --bind unix:<%= @gunicorn_socket %> -m 007 --log-file <%= @gunicorn_logfile %> manage:app
另请查看 poise-service and application_python 食谱,其中有分别用于编写 Upstart 配置文件和 Gunicorn 服务的助手。
鉴于 OpsWorks 对 Chef 12 的支持是最近发布的——我能找到的所有文档都是针对 Chef 11 的。因此,这是我当前的设置:Flask + gunicorn + nginx on OpsWorks with Chef 12。我使用 Upstart 来使用模板启动 Gunicorn:
start on runlevel [2345]
stop on runlevel [!2345]
respawn
setuid <%= node['conf-cookbook']['gunicorn_user'] %>
setgid <%= node['conf-cookbook']['gunicorn_group'] %>
env MAIL_SERVER="email-smtp.us-east-1.amazonaws.com"
env MAIL_USERNAME="[redcacted]"
env MAIL_PASSWORD="[redacted]"
chdir <%= node['conf-cookbook']['app_dir'] %>
exec gunicorn --workers 3 --bind unix:<%= node['conf-cookbook']['gunicorn_socket'] %> -m 007 --log-file <%= node['conf-cookbook']['gunicorn_logfile']%> manage:app
我必须在模板中包含敏感的环境变量信息。在 OpsWorks Chef 12 中,可以使用 App Data Bag (aws_opsworks_app) 指定环境变量,并使用类似于部署配方中的内容进行检索(从未尝试过 - 是否正确):
app = search(:aws_opsworks_app).first
app['environment']['MAIL_SERVER']
我想用应用程序数据包环境变量来替换我在模板文件中定义的环境变量,但不知道如何。谁能帮忙?
谢谢!!
您可以将任意变量数据传递给 Chef 模板资源:
template '/etc/init/myapp.conf' do
source 'myapp.conf.erb'
variables node['conf-cookbook'].merge(app)
end
然后让您的模板看起来更像这样:
start on runlevel [2345]
stop on runlevel [!2345]
respawn
setuid <%= @gunicorn_user %>
setgid <%= @gunicorn_group %>
<%- @environment.each do |key, value| -%>
env <%= key %>="<%= value %>"
<%- end -%>
chdir <%= @app_dir %>
exec gunicorn --workers 3 --bind unix:<%= @gunicorn_socket %> -m 007 --log-file <%= @gunicorn_logfile %> manage:app
另请查看 poise-service and application_python 食谱,其中有分别用于编写 Upstart 配置文件和 Gunicorn 服务的助手。