首页 > 解决方案 > 将 .env 文件中的环境变量传递给 Ansible 任务/剧本

问题描述

我很感激一些关于如何优雅地处理这种情况的建议

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

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

.env 文件采用 key=value 格式

例如

USER=Fish
PASSWORD=Net

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

标签: ansible

解决方案


这对我有用

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


推荐阅读