Ansible / Ansible-Playbook 2.9.27
我有下面的剧本,我想只显示那些行(来自数据结构(即,list -->with_items循环),这些循环匹配给定的multi“egrep”类模式(例如:“* 模式1| pattern2| pattern3withRange [0-9a-zA-Z]*”)。
我如何在Ansible中实现这一点,可能只使用一个with_items / loop?
这将是伟大的:
- 如果我不用N的话不。嵌套循环(每个模式/字符串)--或--
- 我不必使用shell一行代码(egrep“string|绝对值 *yz| giga”)。
以下是我的Playbook:aks.yml
---
- hosts: localhost
become: yes
remote_user: root
become_user: root
pre_tasks:
- name: show pattern matching lines
#command: 'echo {{ item }} | egrep -i "r[0-9]|goga"'
ansible.builtin.debug:
var: "{{ item }}"
when: ( item | regex_search('r0[0-9]|goga', ignorecase=True))
with_items:
- "ar00n_giga"
- "Schnooka_goga"
- "lorito_r01_gigaFifa"
运行Playbook可以让我:
$ ansible-playbook aks.yml
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [localhost] *************************************************************************************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
ok: [localhost]
TASK [show pattern matching lines] *******************************************************************************************************************************************************************************
ok: [localhost] => (item=ar00n_giga) => {
"ansible_loop_var": "item",
"ar00n_giga": "VARIABLE IS NOT DEFINED!",
"item": "ar00n_giga"
}
skipping: [localhost] => (item=Schnooka_goga)
ok: [localhost] => (item=lorito_r01_gigaFifa) => {
"ansible_loop_var": "item",
"item": "lorito_r01_gigaFifa",
"lorito_r01_gigaFifa": "VARIABLE IS NOT DEFINED!"
}
PLAY RECAP *******************************************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
我注意到都“范围”[0-9]
和多模式,即在regex_search(...)
中使用|
工作!
- 使用范围
r0[0-9]
可以成功捕获包含r 00和r 01的项字符串,这很棒。 - 使用
...|goga
(它也捕获第二行,它没有r0[0-9]
模式。
但是如果我的值在with_items中有空格,上面的代码就不起作用了:循环,即如果我添加以下内容:
with_items:
- "ar00n_giga"
- "new goga shooga"
- "Schnooka_goga"
- "lorito_r01_gigaFifa"
然后,我得到以下错误消息:
...
TASK [show pattern matching lines] *******************************************************************************************************************************************************************************
ok: [localhost] => (item=ar00n_giga) => {
"ansible_loop_var": "item",
"ar00n_giga": "VARIABLE IS NOT DEFINED!",
"item": "ar00n_giga"
}
fatal: [localhost]: FAILED! => {"msg": "template error while templating string: expected token 'end of print statement', got 'goga'. String: {{new goga shooga}}"}
PLAY RECAP *******************************************************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
2条答案
按热度按时间jc3wubiy1#
它更容易搜索选定的列表。例如,给定列表
1.搜索模式r 0 [0-9]|戈加
选择所有项目,因为:
1.改变第二模式'r 0 [0-9]|新'
第三项未选中
用于测试的完整剧本示例
up9lanfz2#
从红帽分销渠道了解带Ansible的RHEL 7.9
一个最小的示例剧本
将导致输出
从Python包索引(PyPI)安装RHEL 7.9和Ansible的结果相同
简而言之,我无法重现错误(annot.:不断地)。
您收到的错误消息
是由
debug
任务中的语法错误引起的,而不是
或