从Ansible中的stdout_lines提取数据

时间:2018-07-05 15:51:59

标签: regex ansible jinja2

我正在尝试从Ansible的stdout_lines中提取一个特定的数字并将其用作变量。我在剧本中运行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/zh/stable-2.0/rst/playbooks_filters.html

我也尝试过此页面上的建议,但我也没有做到。

ansible parse text string from stdout

2 个答案:

答案 0 :(得分:0)

请注意,我在记事本中忙碌着,无法完全使用这些工具,因此请检查我的语法,尤其是那些双反斜杠转义符。就是说,让我们一连串的过滤器可以满足您的需求。怎么样:

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

答案 1 :(得分:0)

由于我遇到了非常类似的问题,所以我有以下想法:您可以在运行全文搜索服务的MS SQL Server企业版中放入易执行的结果,只需简单地选择所需的内容即可。 话虽如此,但我必须指出,这是我在开源社区中遇到过的最奇怪的情况:Linux工具无法简单有效地与grep之类的基本内容集成。

这可能意味着正在开发的人不知道什么是系统管理...

我真的很想尝试一下,但是日复一日,我印象深刻,这就像Powershell噩梦广告根本没有用,仅仅是因为Yo无法有效地控制输出...