如何在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
相关产品推荐
相关产品推荐

