Удалите специальные символы с помощью регулярных выражений в элементе списка с помощью Ansible - PullRequest
1 голос
/ 10 октября 2019

Я не могу понять это.

Как бы удалить все специальные символы и пробелы, оставив только текст в переменной item.0 ниже?

Например, команды show конвертируются следующим образом.

show running-config >> show_running_config

show ip interface brief | include up >> show_ip_interface_brief_include_up

Вывод сохраняется в файл, имя которого совпадает с именем команды. Поэтому специальные символы, такие как |/\ и т. Д., Вызывают проблемы.

Я пытался использовать это, но у меня только ошибки.

dest: "/media/sf_ubuntu_vm_share/ansible_out/{{ inventory_hostname }}/{{ item.0 | regex_replace('@?\+(.*)', '_') }}.bck"

Вот код ANSI, который генерирует ошибку при попытке записи. файл с | в имени файла.

---
- 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'

1 Ответ

1 голос
/ 10 октября 2019

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...