Ansible 列表变量和 Select 过滤器以忽略匹配项
Ansible List Variable and Select Filter to ignore matched items
我在 ansible 剧本中有一个变量 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 保存到另一个变量。
我用谷歌搜索了正则表达式并尝试 不匹配模式与 select 过滤器 如下:
- 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"
]
有人可以建议我如何完成吗?
下面的任务完成工作
- 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 剧本中有一个变量 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 保存到另一个变量。
我用谷歌搜索了正则表达式并尝试 不匹配模式与 select 过滤器 如下:
- 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"
]
有人可以建议我如何完成吗?
下面的任务完成工作
- 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"
]