Ansible 列表变量和选择过滤器以忽略匹配项
Posted
技术标签:
【中文标题】Ansible 列表变量和选择过滤器以忽略匹配项【英文标题】:Ansible List Variable and Select Filter to ignore matched items 【发布时间】:2020-03-17 08:48:22 【问题描述】:我在 ansible playbook 中有一个变量 dir_lst_raw
,其值为 list,如下所示:
"dir_lst_raw": [
"/path1/dir1/user",
"/path2/dir2/admin",
"/path3/dir3/user.ansible_backup_2020-03-16",
"/path1/dir1/config.ansible_backup_2020-03-16",
"/path2/dir2/dir3/somefile"
]
我需要删除所有包含.ansible_backup_
的行并作为list 保存到另一个变量中。
我搜索了正则表达式并试图 不匹配模式与选择过滤器,如下所示:
- set_fact:
dir_lst: " dir_lst_flt_r | select('match','(^.ansible_backup_)+') | list "
但新变量 dir_lst
原来是一个空列表。我期待dir_lst
如下:
"dir_lst_raw": [
"/path1/dir1/user",
"/path2/dir2/admin",
"/path2/dir2/dir3/somefile"
]
有人可以建议我如何完成它吗?
【问题讨论】:
【参考方案1】:下面的任务完成了这项工作
- set_fact:
dir_lst: " dir_lst_raw|reject('match', my_regex)|list "
vars:
my_regex: '^(.*)\.ansible_backup_(.*)$'
- debug:
var: dir_lst
给予
"dir_lst": [
"/path1/dir1/user",
"/path2/dir2/admin",
"/path2/dir2/dir3/somefile"
]
【讨论】:
以上是关于Ansible 列表变量和选择过滤器以忽略匹配项的主要内容,如果未能解决你的问题,请参考以下文章
ansible Regular Expression Filters 正则表达式过滤器
扁平化和过滤 ansible 中的复杂结构 - dict 列表中的 dict