如何在 Ansible 中从列表输出中删除"U"



我试图做一个简单的列表来显示与特定vlan相关联的所有端口,并将此输出输出到csv。

代码可以工作,但不知道如何删除输出中与行"InterfaceID"关联的"u"和[]。我知道数组需要转换为字符串,只是想知道如何在不修改太多代码的情况下做到这一点。

提前感谢您的任何提示。

代码:

- name: parse output
set_fact:
vlan_output: "{{vlan_info.stdout[0] | parse_cli_textfsm(parse_template)}}"
- name: write lines to file
copy:
content: "{{ ['InterfaceID','VlanID','NAME'] | zip([item.INTERFACES,item.VLAN_ID,item.NAME]) | map('join', ', ')  | join('n') }}"
dest: "output.csv"
with_items: "{{vlan_output}}"
- debug:
var: vlan_output

vlan_output的调试:

"vlan_output": [
{
"INTERFACES": [
"Gi1/0/2",
"Gi1/0/5",
"Gi1/0/7"
],
"NAME": "test",
"STATUS": "active",
"VLAN_ID": "10"
}
]
Excel Output:
InterfaceID, [u'Gi1/0/2', u'Gi1/0/5', u'Gi1/0/7']
VlanID, 10
NAME, test

虽然您不能直接做到这一点,但一旦您将ansible使用的python版本升级到3.x,就可以消除这些问题。只有Python2.x可以打印前缀为u的unicode字符串。在3上,所有的都是unicode,前缀不再打印。

请记住,u是打印数据的一部分,而不是数据本身的一部分。

如果您试图将转换为字符串的数组解析为字符串,那么您已经做错了什么。

由于您有一个接口列表,您可以使用join过滤器来"加入";将列表项转换为字符串。从这个问题来看,还不清楚你是想用空格还是逗号连接它们,但一个小的变化,比如-item.INTERFACES|join(', ')会给出(逗号分隔(-Gi1/0/2, Gi1/0/5, Gi1/0/7

示例:

- name: write lines to file
copy:
dest: output.csv
content: "{{ ['InterfaceID','VlanID','NAME'] | zip([item.INTERFACES|join(', '),item.VLAN_ID,item.NAME]) | map('join', ', ')  | join('n') }}"
with_items: "{{ vlan_output }}"

产品:

InterfaceID, Gi1/0/2, Gi1/0/5, Gi1/0/7
VlanID, 10
NAME, test

最新更新