簡體   English   中英

提取 Ansible 中的特定模式

[英]Extract a specific pattern in Ansible

我需要從字符串中提取特定值(在我的情況下為發布版本)。 我不知道正則表達式在 Ansible 中是如何工作的。 下面是我的游戲——

---
 - name: Getting the status of current deployment
   stat:
     path: /opt/tomcat/apps/myapp
   register: p

 - debug:
     msg: "The value of symlink is {{ p.stat.lnk_target }}"

 - debug:
     msg: "{{ p.stat.lnk_target.split('/')[4]}}"

Output:

Getting the status of current deployment...
Monday 18 May 2020  11:18:43 +0100 (0:00:01.580)       0:00:01.812 ************
  server1 ok
set_fact...
Monday 18 May 2020  11:18:43 +0100 (0:00:00.552)       0:00:02.364 ************
  server1 ok
debug...
Monday 18 May 2020  11:18:43 +0100 (0:00:00.077)       0:00:02.442 ************
  server1 ok: {
    "changed": false,
    "msg": "The value of symlink is /app/tomcat/releases/Release1.40.0-07/myapp/webapp"
}
debug...
Monday 18 May 2020  11:35:20 +0100 (0:00:00.080)       0:00:02.234 ************
  myvm-kn-u1 ok: {
    "changed": false,
    "msg": "Release1.40.0-07"
}

我想從中提取發布號並將其放入變量中。 例如上面的 output 是1.40.0-07

讓我知道是否有人可以指導。 試圖調查谷歌,但找不到任何東西。

我認為最好的方法是使用regex_replace

在你的情況下

- debug:
     msg: "{{ p.stat.lnk_target.split('/')[4] | regex_replace('^Release(.*)$', '\\1') }}"

可能您需要稍微調整正則表達式。

可以reject字母部分。 例如

    - debug:
        msg: "{{ p.stat.lnk_target.split('/')[4]|
                 reject('match', '[a-zA-Z]')|join() }}"

還有regex_replace

    - debug:
         msg: "{{ p.stat.lnk_target.split('/')[4]|
                  regex_replace(my_regex, my_replace) }}"
      vars:
        my_regex: '^Release(.*)$'
        my_replace: '\1'

給出相同的結果

    "msg": "1.40.0-07"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM