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

如何在Ansible中获取inventory_hostname的第一部分内容?

解决Ansible中提取inventory_hostname前缀的问题

你遇到的问题很典型——basename过滤器其实是为处理文件路径设计的,它只会去掉路径中的目录部分,对于以点分隔的域名格式,它完全不会拆分,所以自然返回整个inventory_hostname字符串啦。

下面给你几个靠谱的解决方案,按便捷程度排序:

方法1:直接用Ansible内置变量(最简单)

Ansible本身就提供了一个内置变量inventory_hostname_short,它的作用就是自动提取inventory_hostname中第一个点.之前的部分,完全不用自己写过滤器:

hostName: "{{ inventory_hostname_short }}"

针对你的例子server00122.linux.ca.domain.com,这个变量会直接返回server00122,完美符合需求。

方法2:用split过滤器拆分

如果出于某些原因不想用内置变量,可以用split过滤器按点拆分字符串,然后取第一个元素:

hostName: "{{ inventory_hostname.split('.')[0] }}"

或者更优雅一点用first过滤器:

hostName: "{{ inventory_hostname.split('.') | first }}"

方法3:用正则表达式替换

如果需要更灵活的匹配规则(比如处理特殊格式的hostname),可以用regex_replace过滤器,匹配从第一个点开始到结尾的部分并替换为空:

hostName: "{{ inventory_hostname | regex_replace('\\..*', '') }}"

这里的正则\..*表示匹配第一个点以及后面的所有字符,替换成空字符串后就剩下了前缀部分。


内容的提问来源于stack exchange,提问作者robert.kane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:18:20