在 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]}}"
输出:
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"
}
我想从中提取版本号并将其放入变量中。例如在上面的输出中它是 1.40.0-07
如果有人可以指导,请告诉我。试图调查 google 但找不到任何东西。
我认为最好的方法是使用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() }}"
- debug:
msg: "{{ p.stat.lnk_target.split('/')[4]|
regex_replace(my_regex, my_replace) }}"
vars:
my_regex: '^Release(.*)$'
my_replace: ''
给出相同的结果
"msg": "1.40.0-07"
我需要从字符串中提取特定值(在我的例子中是发行版)。我不知道正则表达式在 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]}}"
输出:
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"
}
我想从中提取版本号并将其放入变量中。例如在上面的输出中它是 1.40.0-07
如果有人可以指导,请告诉我。试图调查 google 但找不到任何东西。
我认为最好的方法是使用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() }}"
- debug:
msg: "{{ p.stat.lnk_target.split('/')[4]|
regex_replace(my_regex, my_replace) }}"
vars:
my_regex: '^Release(.*)$'
my_replace: ''
给出相同的结果
"msg": "1.40.0-07"