自动将环境变量包含在 Ansible playbook 中。

4

我有一个Ansible Playbook,根据在运行Ansible的系统上设置的环境变量执行各种任务。例如:

- hosts: all
  tasks:
  - name: Download allowlist
    command: "some_command {{ lookup('env', 'ALLOWLIST_URL') }}"
    when: "lookup('env', 'ALLOWLIST_URL') is defined"

目前,我通过一个包装脚本从playbook外部提供所有环境变量:

export ALLOWLIST_URL="..."
export SOME_OTHER_VAR="..."
ansible-playbook -i hosts playbook.yaml

不过,我希望能够自动将这些环境变量包含到Ansible中,可以通过命令行开关、播放书中的附加任务或其他方式实现,这样就可以完全摆脱包装器。

澄清一下,我更喜欢像这样做某些事情的方式(这不是一个真正的命令,只是为了演示我正在寻找的内容):

ansible-playbook --include-env-vars ENVFILE -i hosts playbook.yml

或者,如果在playbook中,可以像这样实现(再次强调,include_env_vars不是真正的模块,仅用作演示):
tasks:
- name: Include env vars
  include_env_vars:
    from: ENVFILE

这种事情可能吗?


请澄清使用情况。您通过包装器提供的环境仅对本地主机可用。其他主机(- hosts: all)是否也可以看到此环境? - undefined
1
只需将它们放在ansible调用之前,用分号分隔开:export ALLOWLIST_URL="..."; export SOME_OTHER_VAR="..."; ansible-playbook -i hosts playbook.yaml 这真的比命令行参数更糟糕吗? - undefined
如何使用Ansible设置Linux环境变量这个回答了你的问题吗? - undefined
2
@U880D 我意识到,为了满足这个用例,我可能更适合从环境变量转移到本地的 Ansible 变量,因为 Ansible 变量有 include_vars - user2064000
1个回答

0
环境变量是通过设置收集的事实。每个主机上的每个用户可能具有不同的相关环境变量集,具有特定定义的值。在Ansible控制器上,您可以运行此playbook:
$ ansible-playbook env.yml -i localhost, -v

示例代码 env.yml

---
- name: Gather environment variables
  hosts: localhost
  connection: local
  become: false
  gather_facts: false

  tasks:
    - name: Gather env facts
      ansible.builtin.setup:
        gather_subset: env

    - name: Display ansible_env
      ansible.builtin.debug:
        verbosity: 1
        msg: "{{ ansible_env }}"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接