我正在尝试开发一个 Ansible playbook 来选择并显示 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
需要有关编写正则表达式以排除包含单词 local
的数据存储的建议.
最佳答案
问:“排除包含“local”或“Local”一词的数据存储。”
答:Reject the items where the attribute 姓名可以 search Python 正则表达式'[lL]ocal'
。例如,给出以下数据进行测试
datastores:
- {name: datastore:local8, capacity: 100, freeSpace: 10}
- {name: TQAESXHOST05-Local01, capacity: 200, freeSpace: 20}
- {name: vnx_dwcesxbl_ecom_lun7, capacity: 300, freeSpace: 30}
- {name: tqaesx37d_1, capacity: 400, freeSpace: 40}
任务
- set_fact:
ds_size_list: "{{ ds_size_list|default([]) +
[{'name': item.name,
'capacity': item.capacity,
'freeSpace' : item.freeSpace,
'percentFreeAfter': percentFreeAfter|int }] }}"
loop: "{{ datastores|rejectattr('name', 'search', '[lL]ocal') }}"
vars:
percentFreeAfter: "{{ item.freeSpace|int / item.capacity|int * 100 }}"
给出
ds_size_list:
- capacity: 300
freeSpace: 30
name: vnx_dwcesxbl_ecom_lun7
percentFreeAfter: 10
- capacity: 400
freeSpace: 40
name: tqaesx37d_1
percentFreeAfter: 10
如果您想保留项目的所有属性,您可以combine附加属性。这简化了代码。例如,下面的任务给出相同的结果
- set_fact:
ds_size_list: "{{ ds_size_list|default([]) +
[item|combine({'percentFreeAfter': percentFreeAfter|int})] }}"
loop: "{{ datastores|rejectattr('name', 'search', '[lL]ocal') }}"
vars:
percentFreeAfter: "{{ item.freeSpace|int / item.capacity|int * 100 }}"
关于python - 如何在ansible playbook中使用正则表达式排除单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70672836/