#ansible
Вопрос:
Я пытаюсь придумать способ найти фрагмент текста в очень длинной строке. Я использую модуль ios_facts для получения конфигурации Cisco. Я ищу текст ниже и хочу установить его как новый var. Часть «пакет протоколов ip nbar» никогда не изменится, но значение после этого будет варьироваться от узла к узлу.
{{ ansible_net_config }} = o ip-источник-маршрутn!n!n протокол ip nbar-загрузка пакета:pp-adv-isr4000-169.1-34-47.0.0.упакуйте n!n!n!n!n nb
значение ansible_net_config намного больше. Я урезал его ради здравомыслия.
Это то, что я хочу, чтобы для параметра var было установлено значение: ip-протокол nbar-загрузка пакета:pp-adv-isr4000-169.1-34-47.0.0.упакуйте
Вот код, с которым я работаю. Я не знаю, следует ли мне продолжать пробовать regex_search или попробовать json_query или что-то, о чем я еще не знаю.
---
- name: Cisco NBAR Test
connection: ansible.netcommon.network_cli
hosts: all
tasks:
- name: collect facts
cisco.ios.ios_facts:
gather_subset:
- config
- name: set vars
set_fact: config={{ ansible_net_config | regex_search('ip nbar protocol-pack') }}
#set_fact: config={{ ansible_net_config | community.general.json_query('*') }}
- name: show output
debug:
var: config
Есть идеи, как это сделать?
Спасибо,
Комментарии:
1. Что вы пробовали и какую ошибку это для вас создает? Я не вижу никакого кода в вашем вопросе, а также никаких журналов от выполнения вашей попытки
Ответ №1:
Я бы написал регулярное выражение следующим образом:
set_fact: config="{{ ansible_net_config | regex_search('.*ip nbar protocol-pack.*') | trim }}"
- name: test
hosts: localhost
tasks:
- name: set vars
set_fact: config="o ip source-routen!n!nip nbar protocol-pack bootflash:pp-adv-isr4000-169.1-34-47.0.0.pack n!n!n!n!nip nb"
- name: regex vars
set_fact: result="{{ config | regex_search('.*ip nbar protocol-pack.*') | trim }}"
- name: show
debug:
var: result
Результат:
TASK [show] ***********************************************************************************************************************************************************************
ok: [localhost] => {
"result": "ip nbar protocol-pack bootflash:pp-adv-isr4000-169.1-34-47.0.0.pack"
}