将 .env 文件中的环境变量传递给 Ansible 任务/剧本

时间:2021-07-16 12:09:36

标签: ansible

我很想就如何优雅地处理这种情况提出一些建议

  • 我有一个需要特定环境变量的应用程序。该应用程序的构建使我可以加载 .env 文件,并且该应用程序将从环境变量中读取登录用户/密码。

  • 我有一个可靠的剧本

    a) 检查一个 git 仓库

    b) 设置应用

  • 我需要在环境变量到位的情况下运行应用

(这些环境变量 [作为 .env 文件] 由 terraform 工作流创建)

使用 .env 文件将环境变量传递到 ansible.builtin.shell/command 等而不将它们存储在磁盘上的优雅方法是什么

.env 文件采用 key=value 格式

例如

USER=Fish
PASSWORD=Net

我知道 Ansible 可以读取定义了变量的 .yaml/.json 文件,但是我想避免另一种存储登录/密码参数的方式。

1 个答案:

答案 0 :(得分:0)

这对我有用

- 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 一样)但没有。