如何在 ansible 中使用正则表达式验证变量值

如何在 ansible 中使用正则表达式验证变量值

如何在 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|matchuse result is match。此功能将在 2.9 版中删除。

我已经测试过了

var:
  DeviceName: "switch.example.com"

- name: Valdiate device name
  set_fact:
    switchname: "{{ DeviceName is match ('server*') }}"

并发现它也正常工作。从 Ansible 2.9 开始,这应该是首选解决方案。

相关内容