ansible - 将 .env 文件中的环境变量传递给 Ansible 任务/剧本
问题描述
我很感激一些关于如何优雅地处理这种情况的建议
我有一个需要特定环境变量的应用程序。该应用程序的构建是为了让我可以加载一个 .env 文件,并且该应用程序将从环境变量中读取登录用户/密码。
我有一本可靠的剧本
a) 检查一个 git repo
b) 设置应用程序
我需要使用适当的环境变量运行应用程序
(这些环境变量 [作为 .env 文件] 由 terraform 工作流程创建)
什么是使用 .env 文件将环境变量传递到 ansible.builtin.shell/command 等而不将它们存储在磁盘上的优雅方法
.env 文件采用 key=value 格式
例如
USER=Fish
PASSWORD=Net
我知道 Ansible 可以读取定义了变量的 .yaml/.json 文件,但是我想避免另一种存储登录名/密码参数的方式。
解决方案
这对我有用
- name: Get env vars
shell: cat .env
register: env
- name: Run command
shell: /usr/bin/env {{ env.stdout_lines | join(' ') }} bash -c 'echo $USER $PASSWORD'
register: echo
- name: debug
debug:
var: echo.stdout_lines
TASK [debug] **********************************************************
ok: [localhost] => {
"echo.stdout_lines": [
"Fish Net"
]
}
但我不得不说,要弄清楚该怎么做,这是一件可怕的事情。我期待 /usr/bin/env 命令将文件名作为参数(就像 docker 一样),但没有。
推荐阅读
- angular - 使用角度路由动态配置组件的角度未按预期工作
- sqlite - 为什么 sqlite fts5 Unicode61 Tokenizer 不支持 CJK(中文日文韩文)?
- php - 多个静态函数调用方法
- c# - 单击左键时WPF MouseDown冒泡事件不会冒泡
- ios - Swift UIDatePicker 限制未来年份而不是月份和日期
- angularjs - $element.on("$destroy", fn) 和 $scope.$on("$destroy", fn) 在摘要循环中的作用有什么区别?
- typescript - 使用 Typescript 时的 Phaser 全局变量
- excel - rs.open 中的 FROM 子句 Excel VBA 中的语法错误
- .net - Kubernetes 上的 SiloHost
- javascript - Angular 2+中的“this.model”方法和文件?