我无法弄清楚。
如何删除下面的item.0
变量内的所有特殊字符和空格?
例如show命令将像这样转换。
show running-config
>> show_running_config
show ip interface brief | include up
>> show_ip_interface_brief_include_up
将输出保存到与命令同名的文件中。因此,|/\
等特殊字符会引起问题。
我已经尝试过使用它,但是我只是报错。
dest: "/media/share/ansible_out/{{ inventory_hostname }}/{{ item.0 | regex_replace('@?\+(.*)', '_') }}.bck"
以下是Ansible代码,当尝试使用文件名中的|
写入文件时引发错误。
---
- name: Create show command list
set_fact:
command_list:
- show running-config
- show ip interface brief | include up
- name: Execute commands on device
ios_command:
commands: "{{ command_list }}"
register: output
when: ansible_network_os == 'ios'
- name: Copy show command output to file
copy:
content: '{{ item.1 }}'
force: yes
dest: "/media/share/ansible_out/{{ inventory_hostname }}/{{ item.0 }}.bck"
loop: "{{ command_list|zip(output.stdout)|list }}"
when: ansible_network_os == 'ios'
答案 0 :(得分:1)
Q:“如何删除任何特殊字符和空格,只在变量中保留文本?”
A:可以使用 map 和 regex_replace 的组合,因为YAML中的字符串是字符数组。例如剧本
- hosts: localhost
vars:
regex: '[^A-Za-z0-9._-]'
replace: '_'
command_list:
- show running-config
- show ip interface brief | include up
tasks:
- debug:
msg: "{{ item|map('regex_replace', regex, replace)|list|join() }}"
loop: "{{ command_list }}"
给予
"msg": "show_running-config"
"msg": "show_ip_interface_brief___include_up"