如何使用 Ansible 的 lookup 插件 env 自动化读取 HOME 环境变量,并在 Ansible Playbook 中使用它。

ansible.builtin.env 读取环境变量的值。

让我们深入了解一下 Ansible 的 env lookup 插件。插件是扩展 Ansible 功能的一种方式,尤其是 lookup 插件,可以从外部源加载变量或模板。 ansible.builtin.env 的全名表明它是 Ansible 核心的一部分,并包含在所有 Ansible 安装中。 它的作用是读取环境变量的值。

参数和返回值

  • 参数
    • _terms(字符串):要读取的环境变量名称。
  • 返回值
    • _raw(列表):环境变量的值。

该插件的唯一必需参数是默认的 _terms,它指定了要读取的环境变量名称。 通常情况下,lookup 插件会被赋值给一个变量,但你也可以直接在 Ansible 任务中使用它。

示例:使用 Ansible Playbook 读取环境变量

代码文件: environment.yml

---
- name: environment demo
  hosts: all
  tasks:
    - name: display HOME
      ansible.builtin.debug:
        msg: "{{ lookup('env', 'HOME') }}"

执行命令:

ansible-pilot $ printenv | grep HOME
HOME=/Users/lberton
ansible-pilot $ ansible-playbook -i virtualmachines/demo/inventory ansible\ statements/environment.yml

执行结果:

PLAY [environment demo] ******************************************

TASK [Gathering Facts] ******************************************
ok: [demo.example.com]

TASK [display HOME] *********************************************
ok: [demo.example.com] => {
    "msg": "/Users/lberton"
}

PLAY RECAP ******************************************************
demo.example.com           : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

幂等性验证

多次运行 Playbook 时,结果保持一致,不会对远程主机产生额外更改:

ansible-pilot $ printenv | grep HOME
HOME=/Users/lberton
ansible-pilot $ ansible-playbook -i virtualmachines/demo/inventory ansible\ statements/environment.yml

执行结果与第一次相同,表明该操作是幂等的。