我试图做一个简单的列表来显示与特定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