如何在 .kitchen.yml 中将环境变量传递给测试厨房

How to pass environment variables to test kitchen in .kitchen.yml

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

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

我建议您在 gunicorn.conf.erb template using the --env 参数中设置环境变量:

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

您可以在 .kitchen.yml:

中使用 Erb 格式
provisioner:
  name: chef-solo
  attributes:
    mycookbook:
      mail_username: <%= ENV['MAIL_USERNAME'] %>

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