Ansible playbook中如何访问单主机hostvars内的location变量
Ansible playbook中访问inventory主机自定义location变量的方法
你在inventory单台主机条目下定义的location属于主机级自定义变量,Ansible执行任务时会自动将这类变量加载到对应主机的变量上下文,直接通过{{ location }}即可引用当前任务执行主机对应的location值,不需要加额外的变量前缀。
可直接参考的完整playbook示例
下面的示例实现了全清单主机安装snmpd,同时自动把每台主机对应的location值写入snmpd配置:
--- - name: 部署并配置snmpd服务 hosts: all become: true tasks: - name: 安装snmpd软件包 # RHEL/CentOS系列用yum模块,Debian/Ubuntu系列替换为ansible.builtin.apt即可 ansible.builtin.yum: name: snmpd state: present - name: 写入对应主机的location配置到snmpd.conf ansible.builtin.lineinfile: path: /etc/snmp/snmpd.conf regexp: '^syslocation ' line: "syslocation {{ location }}" notify: 重启snmpd服务 handlers: - name: 重启snmpd服务 ansible.builtin.systemd: name: snmpd state: restarted enabled: true
变量引用验证方法
如果不确定变量是否能正常读取,可以先执行ad-hoc命令快速验证:
ansible webserver -m debug -a "msg='当前主机配置的location值为{{ location }}'"
执行后会看到web01.local返回lca、web02.local返回lcb,即说明变量引用逻辑正常。
注意:主机级变量优先级高于组级变量,就算后续你在webserver组的vars块里也定义了location变量,执行时依然会优先读取单台主机配置的location值,不会出现覆盖问题。
内容的提问来源于stack exchange,提问作者Kr3el
相关产品推荐
相关产品推荐

