如何将Ansible输出拆分为两个独立的字符串?
如何在Ansible中拆分主机名和IP为独立字符串?
首先得点明你遇到的核心问题:你之前用with_items把tapip.results和hostname.results两个列表合并成了一个大列表,导致每个item只是单独的IP结果或主机名结果。而item.stdout是字符串类型(比如"192.168.0.104"),所以用item.stdout.0取到的是字符串的第一个字符,而非你预期的列表元素——这就是为什么返回了"1"和"h"。
最佳实现方式
如果你的tapip和hostname任务结果是一一对应的(比如每个IP对应一个主机名),用with_together模块来配对两个列表的元素才是正确做法:
- name: Debug paired IP and Hostname debug: msg: "IP: {{ item.0.stdout }}, Hostname: {{ item.1.stdout }}" with_together: - "{{ tapip.results }}" - "{{ hostname.results }}"
执行后,with_together会把两个列表中相同位置的元素配对成元组,item.0对应tapip.results里的结果,item.1对应hostname.results里的结果,你就能分别拿到完整的IP和主机名字符串了。
单场景下的独立变量提取
如果只有一组IP和主机名结果,也可以用set_fact直接提取成独立变量:
- name: Extract target IP set_fact: target_ip: "{{ tapip.results.0.stdout }}" - name: Extract target hostname set_fact: target_hostname: "{{ hostname.results.0.stdout }}" - name: Show extracted values debug: msg: "IP: {{ target_ip }}, Hostname: {{ target_hostname }}"
这种方式适合单主机场景,多主机批量处理的话还是优先用with_together来配对结果。
内容的提问来源于stack exchange,提问作者user1858059
相关产品推荐
相关产品推荐

