You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:48:15