【问题标题】:How to pass environment variables to test kitchen in .kitchen.yml如何在 .kitchen.yml 中传递环境变量来测试厨房
【发布时间】:2016-01-25 22:53:42
【问题描述】:

我正在尝试开发一本食谱,以使烧瓶应用程序与 gunicorn 和 nginx 一起工作。我已经成功地证明了该应用程序在本地 sqlite 数据库上运行得非常好,请参阅我的食谱https://github.com/harrywang/flasky-cookbook。烧瓶应用程序使用环境变量发送电子邮件,例如:MAIL_USERNAME = os.environ.get('MAIL_USERNAME'),如何在厨房收敛期间使用测试厨房将这些环境变量传递给 ubuntu 虚拟机?

【问题讨论】:

  • 注意:当在 gunicorn.conf env MAIL_USERNAME="AKIAJ6NFIS3" 中使用 env 时,必须使用双引号 - 单引号不起作用,而使用 --env 单引号起作用 - 为了安全起见:始终使用双引号。

标签: flask chef-infra gunicorn cookbook test-kitchen


【解决方案1】:

您可以在 .kitchen.yml 中使用 Erb 格式:

provisioner:
  name: chef-solo
  attributes:
    mycookbook:
      mail_username: <%= ENV['MAIL_USERNAME'] %>

然后在您的配方中使用node['mycookbook']['mail_username'] 将值传递给应用程序。

【讨论】:

  • 我很困惑:如何“在你的食谱中使用 node['mycookbook']['mail_username'] 将值传递给应用程序”?您的解决方案是否将我的主机(macbook pro)环境变量传递给来宾(ubuntu 虚拟盒实例)?我对厨师很陌生-如果我问愚蠢的问题,对不起:)
  • 您需要 fork flasky 食谱并向此模板文件添加一些内容:github.com/harrywang/flasky-cookbook/blob/master/templates/… 以设置环境变量。
  • 还可以查看github.com/poise/application_python/blob/master/test/cookbooks/… 以获得更简单的 Flask 部署示例。
  • 非常感谢您的帮助。在模板中添加一些东西类似于 zuazo 给出的解决方案。应用程序说明书看起来很棒,但你知道任何详细的教程吗?对于像我这样的初学者来说,README 太简短了。
【解决方案2】:

没有办法使用 .kitchen.yml 配置文件传递环境变量(参见test-kitchen/test-kitchen#662 问题)。

我建议您使用--env 参数在gunicorn.conf.erb 模板中设置环境变量:

exec gunicorn --env SECRET_KEY=<%= @secret_key %> --env [...] --workers 3 --bind unix:<%= node['flasky-cookbook']['gunicorn_socket'] %> -m 007 --log-file <%= node['flasky-cookbook']['gunicorn_logfile']%> manage:app

【讨论】:

  • 我试过 exec gunicorn --env MAIL_SERVER='email-smtp.us-east-1.amazonaws.com',MAIL_USERNAME='',MAIL_PASSWORD='-redacted-',FLASK_ADMIN='-redacted-' --workers 3 --bind unix:&lt;%= node['flasky-cookbook']['gunicorn_socket'] %&gt; -m 007 --log-file &lt;%= node['flasky-cookbook']['gunicorn_logfile']%&gt; manage:app 但没有用 - 我 kitchen loginprintenv 但看不到那些环境变量。有什么想法吗?
  • @coderanger 我不认为这完全不正确。我知道您可以从 .kitchen.yml 文件中读取 ENV 变量,但我在谈论问题的另一部分:将变量传递给应用程序。我假设,也许是错误的,他知道如何做第一部分。如果你仍然认为这个答案是错误的,我会删除它。
  • @harryw seems like you can also use env to set environment variables。这些变量只会在使用 gunicorn 运行的应用程序内部定义。不在你的厨房外壳里。
  • 我主要是指第一部分,你完全可以通过环境变量。
  • 好的,@coderanger。谢谢。我删除了第一部分。我不知道,对不起。我知道,你的答案更好:-P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多