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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:47:45