我有一个像下面的variable
文件ansible
check:
- file1.tar.gz
- file2.tar.gz
在tasks
我使用它进行迭代时{{item}}
with_items: - "{{check}}"
,
有没有办法在迭代时提取文件名而不扩展名?即我需要file1
从file1.tar.gz
和file2
从file2.tar.gz
Ansible具有assplitext
过滤器,但不幸的是,它仅在最后一个点之后分割扩展名。
可靠地满足您的要求IMO的唯一解决方案是使用regex_replace
第一个点之后的分割。
您可以使用它,而你循环,在每个项目上,或者你循环将它与整个列表之前应用过滤器map
过滤。
这是以下剧本中每种解决方案的示例。
---
- name: Extract file name without extension
hosts: localhost
gather_facts: false
vars:
check:
- file1.tar.gz
- file2.tar.gz
tasks:
- name: Apply filter while looping
debug:
msg: >-
{{ item | regex_replace('^([^\.]*).*', '\1') }}
loop: "{{ check }}"
- name: Apply filter on list before loop
debug:
var: item
loop: >-
{{ check | map('regex_replace', '^([^\.]*).*', '\1') | list }}
这使
PLAY [Extract file name without extension] *********************************************************************************************************************************************************************************************
TASK [Apply filter while looping] ******************************************************************************************************************************************************************************************************
ok: [localhost] => (item=file1.tar.gz) => {
"msg": "file1"
}
ok: [localhost] => (item=file2.tar.gz) => {
"msg": "file2"
}
TASK [Apply filter on list before loop] ************************************************************************************************************************************************************************************************
ok: [localhost] => (item=file1) => {
"ansible_loop_var": "item",
"item": "file1"
}
ok: [localhost] => (item=file2) => {
"ansible_loop_var": "item",
"item": "file2"
}
PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句