如何在ansible中使用匹配过滤器传递变量
How to pass a variable using match filter in ansible
我正在尝试从 vcenter 中列出 VM,过滤以 linTest
和 winTest
开头的 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)
.
进一步问答
我正在尝试从 vcenter 中列出 VM,过滤以 linTest
和 winTest
开头的 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)
.
进一步问答