поиск и настройка нового var из ansible_net_config

#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"
}