将精确字符串与数组/列表匹配-Ansible
将精确字符串与数组/列表匹配-Ansible,ansible,ansible-2.x,Ansible,Ansible 2.x,service\u name变量打印以下内容 "msg": [ "BLAH PEX", "BLAH AEX non prod", "BLAH BIND", "BLAH DBFactory" ] 我想匹配变量BSA,它包含字符串BLAH BIND。我试过这样的方法: - debug: msg: "Match found" when: "BSA in service_name" 它起作用了!但问题是,如果BSA包含字符串BLAH,它也会匹配。我希望只有
service\u name
变量打印以下内容
"msg": [
"BLAH PEX",
"BLAH AEX non prod",
"BLAH BIND",
"BLAH DBFactory"
]
我想匹配变量BSA
,它包含字符串BLAH BIND
。我试过这样的方法:
- debug:
msg: "Match found"
when: "BSA in service_name"
它起作用了!但问题是,如果BSA
包含字符串BLAH
,它也会匹配。我希望只有在完全匹配的情况下才匹配。现在,我想它是逐字匹配的
预期输出:它应该跳过调试任务,因为当BSA
包含字符串BLAH
时,它不应该与服务名称
列表中的任何字符串匹配
如何实现匹配数组中整个精确字符串的任何帮助
我使用的是ansible 2.7
Q:“预期输出:它应该跳过调试任务,因为当BSA包含字符串BLAH时,它不应该匹配服务名称列表中的任何字符串。”
A:它按预期工作。字符串“BLAH”不匹配,已跳过调试任务
- hosts: localhost
vars:
service_name: [ "BLAH PEX", "BLAH AEX non prod", "BLAH BIND", "BLAH DBFactory" ]
BSA: "BLAH"
tasks:
- debug:
var: service_name
- debug:
var: BSA
- debug:
msg: "Match found"
when: "BSA in service_name"
- debug:
msg: "Continue"
给予
谢谢@Vlamdimir。我感到很有趣的是,字符串BSA不需要用单引号(例如服务名称中的“BSA”)或双引号(例如服务名称中的“BSA”)来解释为字符串。这是一条很好的情报,从引文开始。1) 看。需要
变量的名称
和消息
。2) 看。谢谢你的评论。
shell> ansible-playbook playbook.yml
PLAY [localhost] ***
TASK [debug] ***
ok: [localhost] => {
"service_name": [
"BLAH PEX",
"BLAH AEX non prod",
"BLAH BIND",
"BLAH DBFactory"
]
}
TASK [debug] ***
ok: [localhost] => {
"BSA": "BLAH"
}
TASK [debug] ***
skipping: [localhost]
TASK [debug] ***
ok: [localhost] => {
"msg": "Continue"
}
PLAY RECAP ***
localhost: ok=3 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0