Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Filter 如何过滤字符串中的某些元素_Filter_Ansible_Jinja2 - Fatal编程技术网

Filter 如何过滤字符串中的某些元素

Filter 如何过滤字符串中的某些元素,filter,ansible,jinja2,Filter,Ansible,Jinja2,playbook.yml --- 主机:本地_主机 连接:本地 收集事实:错误 任务: -名称:设置详细信息 设定事实: 过滤器:“{lookup('file','tmp/task2.yml')| from_json}” -设定事实: 结果:“{filter['msg']}” -调试: var:结果 task2.yml { “ansible_loop_var”:“项目”, “\u ansible\u no\u log”:false, “调用”:{ “模块参数”:{ “等待任务”:对, “政策包

playbook.yml

---
主机:本地_主机
连接:本地
收集事实:错误
任务:
-名称:设置详细信息
设定事实:
过滤器:“{lookup('file','tmp/task2.yml')| from_json}”
-设定事实:
结果:“{filter['msg']}”
-调试:
var:结果
task2.yml

{
“ansible_loop_var”:“项目”,
“\u ansible\u no\u log”:false,
“调用”:{
“模块参数”:{
“等待任务”:对,
“政策包”:“Mills07\u简化”,
“版本”:空,
“等待任务超时”:30
}
},
“项目”:“Mills07_简化”,
“更改”:错误,
“msg”:“任务id为01234567-89ab-cdef-928b-bef7e174fc7a的任务验证策略操作失败。有关详细信息,请查看日志”,
“可更换项目标签”:“Mills07\u简化”
}
调试消息

TASK [debug] *****************************************************************************************************************************************************************************
ok: [localhost] => {
    "result": "Task Verify policy operation with task id 01234567-89ab-cdef-928b-bef7e174fc7a failed. Look at the logs for more details"
}
当我做下面的事情时

  - set_fact:
      task_id: "{{ result |
                   select('regex', my_regex)|
                   first|
                   regex_replace(my_regex, my_replace) }}"

      vars:
        my_regex: '^Task Verify policy operation with task id (.*)$'
        my_replace: '\1'
  - debug:
      var: task_id 
我收到一条错误消息

fatal: [localhost]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'my_regex' is undefined\n\nThe error appears to be in 
目标:我想获得任务id“01234567-89ab-cdef-928b-bef7e174fc7a


如何获取此字符串01234567-89ab-cdef-928b-bef7e174fc7a

既然您正在寻找一个定义格式为
8-4-4-4-12
字符的字符串,总共36个字符(32个十六进制字符和4个连字符),您可以使用简单的正则表达式来提取它

可以使用以下正则表达式处理它:

[0-9a-f]{8}-(?:[0-9a-f]{4}-{3}[0-9a-f]{12}
您可以在那里进行测试:

因此,在一个
集合\u事实中

-设置事实:
uuid:>-
{{filter.msg
|正则搜索(
“([0-9a-f]{8}-(?:[0-9a-f]{4}-{3}[0-9a-f]{12})”,
'\1', 
ignorecase=True
) 
|首先
}}

例如:

-hosts:localhost
收集事实:不
任务:
-设定事实:
uuid:>-
{{filter.msg
|正则搜索(
“([0-9a-f]{8}-(?:[0-9a-f]{4}-{3}[0-9a-f]{12})”,
'\1', 
ignorecase=True
) 
|首先
}}
变量:
过滤器:
消息:“任务id为01234567-89ab-cdef-928b-bef7e174fc7a的任务验证策略操作失败。有关详细信息,请查看日志”
-调试:
变量:uuid
将产生概述:

PLAY[localhost]***************************************************************
任务[设置事实]****************************************************************
确定:[本地主机]
任务[调试]*******************************************************************
确定:[本地主机]=>
uuid:01234567-89ab-cdef-928b-bef7e174fc7a
重演*********************************************************************
localhost:确定=2更改=0无法访问=0失败=0跳过=0获救=0忽略=0

Unrelated:task2.yml包含一个json,为什么不将其命名为task2.json?当您尝试使用?@β.εηοτ.βε时出现了什么问题,我们可以将其称为另存为.json和.yml。这是json格式。我只是想把它保存为.ymlsimplicity@Zeitounator我已经编辑了我的问题。当我使用regex_replace时,我收到一些错误消息,
vars
没有正确缩进。(正如您正在设置一个名为
vars
的事实)。而且,
result
是一个字符串。为什么需要
选择
(应该在列表中完成)?只需对字符串应用
regex\u replace
。完成。