如何从Ansible的device_output变量提取设备ID生成循环用item列表
解决Ansible提取设备ID生成列表的问题
没问题,我来帮你搞定这个需求!要从之前任务的stdout里提取所有设备ID生成id_list,你可以用Ansible的set_fact结合正则表达式来实现,具体步骤如下:
第一步:提取设备ID生成列表
添加一个set_fact任务,专门处理上一个任务(注册为device_output)的输出:
- name: Extract device IDs from task output set_fact: id_list: "{{ device_output.stdout_lines | map('regex_search', 'Found (\\w+)', '\\1') | select('string') | list }}"
代码解释:
device_output.stdout_lines:调用上一个任务返回的标准输出行列表map('regex_search', 'Found (\\w+)', '\\1'):对每一行执行正则匹配,提取Found后面的设备ID(\w+匹配字母数字下划线,正好对应你的设备ID格式)select('string'):过滤掉不匹配的行(比如第一行等待设备连接的提示)list:把处理后的结果转换成列表格式,最终id_list就会是["3e194", "6cc84"]
第二步:在后续任务中循环使用
接下来就可以像你计划的那样,用with_items遍历id_list执行任务了:
- name: Do my task with each device ID command: "do some thing {{ item }}" with_items: "{{ id_list }}"
小提示
如果你的设备ID格式有变化(比如包含连字符等特殊字符),可以调整正则表达式,比如把\w+改成[\w-]+,或者用\S+匹配任意非空格字符,根据实际情况灵活调整就行!
内容的提问来源于stack exchange,提问作者realheaven
相关产品推荐
相关产品推荐

