我正在尝试开发一个Ansible剧本来选择和显示vCenter中的数据存储列表,但是出于验证目的,我不应该选择名称中包含local
或Local
的数据存储。
例如,考虑以下4个数据存储区:
datastore:local8
TQAESXHOST05-Local01
vnx_dwcesxbl_ecom_lun7
tqaesx37d_1
它应该只选择:
vnx_dwcesxbl_ecom_lun7
tqaesx37d_1
应不选择:
datastore:local8
TQAESXHOST05-Local01
这是战术手册
tasks:
- name: List of datastores with calculated values
set_fact:
ds_size_list: "{{ ds_size_list | default([]) + [{ 'name' : item.name, 'capacity' : item.capacity, 'freeSpace' : item.freeSpace, 'freeSpaceAfter' : freeSpaceAfter | int, 'percentFreeAfter' : percentFreeAfter | int }] }}"
with_items: "{{ datastore_info.datastores }}"
vars:
freeSpaceAfter: "{{ item.freeSpace - (vm_size_b | int) }}"
percentFreeAfter: "{{ freeSpaceAfter | int / item.capacity * 100 }}"
when: item.accessible
when: when: item.name is regex(?!local) #should exclude datastores containing "local" word
需要有关编写regex表达式以排除包含单词local
的数据存储区的建议。
2条答案
按热度按时间wf82jlnq1#
问:"排除包含单词'local'或'Local'的数据存储区。"
A:拒绝属性 name 可以 search Python regex
'[lL]ocal'
的项目。例如,给定以下测试数据任务
给予
如果你想保留项目的所有属性,你可以 * 合并 * 额外的属性。这简化了代码。例如,下面的任务给出了相同的结果
zlwx9yxi2#
使用正则表达式可能有些矫枉过正。你可以使用Jinja的
in
测试来Assert一个子字符串包含在一个字符串中-因为字符串只是一个字符序列,所以in
测试对字符串有效。因此,给定:
该产量:
如果你根本不关心
local
的大小写(Local
,lOcAl
,...),你甚至可以用lower
过滤器进一步简化它: