如何使用 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
执行结果与第一次相同,表明该操作是幂等的。