Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 条件语句中具有多个值的可解变量_Variables_Ansible_Jinja2 - Fatal编程技术网

Variables 条件语句中具有多个值的可解变量

Variables 条件语句中具有多个值的可解变量,variables,ansible,jinja2,Variables,Ansible,Jinja2,我正在使用Ansible在我的环境中配置虚拟机,这非常有效,但我们目前正在修改剧本,根据使用vmware\u guest模块将虚拟机放置在特定集群/数据存储中时指定的名称 我们的服务器名称如下所示。(P=生产,S=暂存,继续字符A=主要,B/C=次要等)。我们有相应的集群和数据存储,用于初级、次级、暂存等 p-WEB01-A P-WEB01-B S-WEB01-A S-WEB01-B 在剧本的开头,我们指定了一个名为vm\u name 使用when:语句,我试图按照下面的思路做一些事情 当:“'

我正在使用Ansible在我的环境中配置虚拟机,这非常有效,但我们目前正在修改剧本,根据使用
vmware\u guest
模块将虚拟机放置在特定集群/数据存储中时指定的名称

我们的服务器名称如下所示。(P=生产,S=暂存,继续字符A=主要,B/C=次要等)。我们有相应的集群和数据存储,用于初级、次级、暂存等

p-WEB01-A
P-WEB01-B
S-WEB01-A
S-WEB01-B

在剧本的开头,我们指定了一个名为
vm\u name

使用
when:
语句,我试图按照下面的思路做一些事情

当:“'p-'in{vm_name}”和{vm_name}[-1]=”A”或{vm_name}[-1]=”1”或{vm_name}[-1]=”2”或{vm_name}[-1]=”3”或{vm u name}[-1]=”4”

但是为了看起来像这样,我想把它浓缩一下

当:“{vm_name}}”中的“p-”和“{vm_name}}[-1]=”A',1',2',3',4'

当“{vm_name}”和{vm_name}[-1]=”B”或{vm_name}[-1]=”C“
中的“'p-”看起来如下

当:“{vm_name}}”中的“p-”和“{vm_name}}[-1]='B','C'”

我只是不知道下面的方法是否有效,我在找到类似的情况时遇到了一些困难

也许有更好的方法来实现这一点,比如使用可变文件,或者在服务器启动后使用
vmware\u vmotion
迁移服务器

问:为了看起来像这样,我想把它浓缩一下

A:下面的剧本

- hosts: localhost
  vars:
    my_hosts: ['P-WEB01-A', 'P-WEB01-B', 'S-WEB01-A', 'S-WEB01-B']
    my_sufix: ['A', '1', '2', '3', '4']
  tasks:
    - debug:
        msg: "[OK] {{ item }}"
      loop: "{{ my_hosts }}"
      when: item[0:2] == "P-" and item[-1] in my_sufix
给予


这就是你要找的吗?

据我所知,你可以将支票压缩为

---
- hosts: all
  gather_facts: no
  vars:
    - vm_name: "P-WEB01-1"
    - vm_name1: "P-WEB01-B"
  tasks:
    - name: Check regex
      debug:
        msg: "Check 1 passed : {{ vm_name }}"
      when: vm_name | regex_search("^P-.*-[A|1|2|3|4]")

    - name: Check regex
      debug:
        msg: "Check 2 passed : {{ vm_name1 }}"
      when: vm_name1 | regex_search("^P-.*-[B|C]")
我使用了regex_搜索过滤器来匹配vm_name的值


我为这两种情况都提供了正则表达式。

这将非常有效。我真的很喜欢你把它们都存储在一个变量中并对照检查的方式。谢谢。这也会很好用的。我以后肯定会用这个。非常感谢。
ok: [localhost] => (item=P-WEB01-A) => 
  msg: '[OK] P-WEB01-A'
skipping: [localhost] => (item=P-WEB01-B) 
skipping: [localhost] => (item=S-WEB01-A) 
skipping: [localhost] => (item=S-WEB01-B)
---
- hosts: all
  gather_facts: no
  vars:
    - vm_name: "P-WEB01-1"
    - vm_name1: "P-WEB01-B"
  tasks:
    - name: Check regex
      debug:
        msg: "Check 1 passed : {{ vm_name }}"
      when: vm_name | regex_search("^P-.*-[A|1|2|3|4]")

    - name: Check regex
      debug:
        msg: "Check 2 passed : {{ vm_name1 }}"
      when: vm_name1 | regex_search("^P-.*-[B|C]")