![如何在 ansible 中使用正则表达式验证变量值](https://linux22.com/image/765831/%E5%A6%82%E4%BD%95%E5%9C%A8%20ansible%20%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E9%AA%8C%E8%AF%81%E5%8F%98%E9%87%8F%E5%80%BC.png)
如何在 ansible 中使用正则表达式验证变量值
var:
DeviceName: "xxxxx-ax34tas1.xxxint.pngxx.abc.com"
- name: valdiate switchname
set_fact:
switchname: "{{'false' if DeviceName | regex_match('\\S+(ias|pas|tas|sps)\\S+(mfg|kssm|png|cd|ss|ch|ra|cr)\\S+') else 'true'}}"
它应该是假的,但我不知道为什么它会变成真。
答案1
据我所知没有过滤器 regex_match,至少从 v2.9 及更高版本开始。
它应该来,
false
但我不知道它为什么来true
由于一个简单的测试构造
var:
DeviceName: "switch.example.com"
- name: Valdiate device name
set_fact:
switchname: "{{'false' if DeviceName | regex_search('switch') else 'true'}}"
true
为 a提供switch
,并且false
对于 a 来说,server
它似乎是您的正则表达式。
我发现使用 Jinja 匹配过滤器代替 regex_match
[弃用警告]:使用测试作为过滤器已被弃用。请使用
result|match
useresult is match
。此功能将在 2.9 版中删除。
我已经测试过了
var:
DeviceName: "switch.example.com"
- name: Valdiate device name
set_fact:
switchname: "{{ DeviceName is match ('server*') }}"
并发现它也正常工作。从 Ansible 2.9 开始,这应该是首选解决方案。