Извлечение данных из stdout_lines в Ansible - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь извлечь конкретное число из моего stdout_lines в Ansible и использовать его в качестве переменной. Я запускаю команду show в моей книге воспроизведения, и все, что я хочу получить из вывода, это самый высокий порядковый номер из моей криптографической карты. Например, это моя пьеса:

 - 
  asa_command:
      commands:
        -  show run crypto map
      provider: "{{ base_provider }}"
  register: result

-
  debug: var=result.stdout_lines

Это приводит к хорошему выводу, но я не уверен, как поступить с извлечением порядкового номера из следующего (я опустил большую часть криптокарты только для упрощения объяснения).

"crypto map map1 60 set ikev1 transform-set test",
"crypto map map1 60 set security-association lifetime seconds 3600", 
"crypto map map1 61 set peer 1.1.1.1 ",
"crypto map map1 61 set ikev1 transform-set test1", 
"crypto map map1 61 set security-association lifetime seconds 3600", 
"crypto map map1 interface outside"

Так что, в принципе, я хотел бы извлечь наибольший порядковый номер (в данном случае «61»), чтобы я мог ввести его как переменную в той же книге. Любые мысли будут оценены :-)

Я пытался посмотреть на некоторые фильтры jinja2, но я не мог понять, что будет наиболее подходящим для моего использования.

http://ansible -docs.readthedocs.io / ж / стабильный-2,0 / первый / playbooks_filters.html

Я также попробовал предложения на этой странице, но я тоже не стал этим заниматься.

Разбор текстовой строки из стандартного вывода

1 Ответ

0 голосов
/ 05 июля 2018

Обратите внимание, что я работаю над этим в блокноте без полного доступа к инструментам, поэтому, пожалуйста, проверьте мой синтаксис, особенно на тех выходах с двойной обратной косой чертой. Тем не менее, давайте посмотрим на цепочку фильтров, которые получают то, что вам нужно. Как насчет:

- debug: msg="{{ result.stdout                                       |
                 regex_findall ('^"crypto map map1 \\d\\d set ')     |
                 regex_replace ('^"crypto map map1 (\\d\\d) set .*',
                                '\\1')                               |
                 max
              }}"
...