如何在ansible中使用匹配过滤器传递变量

How to pass a variable using match filter in ansible

我正在尝试从 vcenter 中列出 VM,过滤以 linTestwinTest 开头的 VM 名称。如何在下面的代码中将 linTest|winTest 作为变量传递?

  - name: Gather all registered virtual machines
    vmware_vm_info:
      hostname: '{{ vc_host }}'
      username: '{{ vc_user }}'
      password: '{{ vc_pass }}'
      validate_certs: False
    delegate_to: localhost
    register: vminfo

  - set_fact:
      vm_hostname: "{{ vminfo.virtual_machines | map(attribute='guest_name')|select('match', '^(linTest|winTest)')| list }} "

  - debug:
      var: vm_hostname 

我了解到您喜欢将变量正则表达式传递给过滤器。为此,您可以使用

这样的方法
...
vars:

  REGEX: '^(linTest|winTest)'

tasks:

- set_fact:
      vm_hostname: "{{ vminfo.virtual_machines | map(attribute='guest_name') | select('match', REGEX) | list }}"
...

简而言之select('match', REGEX).

进一步问答