python - 如何在ansible playbook中使用正则表达式排除单词?

标签 python regex automation ansible vmware

我正在尝试开发一个 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/

相关文章:

python - 如何释放 numpy 数组?

java - 如何检查字符串是否包含小写字母、大写字母、特殊字符和数字?

java - Jenkins 构建失败 - Android 应用程序

python - 特征缩放(标准化)以及 LabelEncode 和 OneHotEncode 数据的最佳实践是什么

python - 卷中的持久(本地)dynamoDB 数据缺乏权限 - 无法打开数据库文件

python - 根据数据帧中值的重复创建计数器

javascript - 如何使用正则表达式 Javascript 匹配第二组括号内的字符串

javascript - 使用javascript的正则表达式删除特殊字符

azure - 在 Azure 中自动执行 Jupyter 笔记本

android - 检测设备方向