如何在 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 开始,这应该是首选解决方案。