如何从ansible中的stdout.line中提取输出
输出:如何从ansible中的stdout.line中提取输出,ansible,mikrotik,ansible-template,Ansible,Mikrotik,Ansible Template,输出: --- - name: Mikrotik info hosts: mikrotik connection: network_cli remote_user: root gather_facts: false tasks: - name: show info routeros_command: commands: /system routerboard print register: rb_info - name: Debug inf
---
- name: Mikrotik info
hosts: mikrotik
connection: network_cli
remote_user: root
gather_facts: false
tasks:
- name: show info
routeros_command:
commands: /system routerboard print
register: rb_info
- name: Debug info
debug:
msg: "{{ rb_info.stdout_lines }}"
我需要过滤“升级固件”字符串,并获得如下输出:
routerboard: yes
model: 751G-2HnD
serial-number: 3A6502B2A2E7
firmware-type: ar7240
factory-firmware: 3.0
current-firmware: 6.42.3
upgrade-firmware: 6.43.4
我应该用正则表达式替换吗?或者我可以用grep之类的
任何想法都非常感谢
谢谢(更新)
使用from_yaml并合并词典。比如说
-设置事实:
minfo:{{minfo | default({})| combine(item | from_yaml)}
循环:“{rb_info.stdout_line}”
-调试:
变量:minfo['upgrade-firmware']
给予
minfo['upgrade-firmware']:6.43.4
(备案)
-临时文件:
寄存器:tempfile
-模板:
src:minfo.j2
dest:{{tempfile.path}}
-包括以下变量:
文件:“{tempfile.path}”
姓名:明福
-调试:
var:minfo
使用模板
shell>cat minfo.j2
{rb_info.stdout_行%中项目的%
{{item}}
{%endfor%}
应该给
“minfo”:{
“当前固件”:“6.42.3”,
“工厂固件”:3.0,
“固件类型”:“ar7240”,
“型号”:“751G-2HnD”,
“线路板”:没错,
“序列号”:“3A6502B2A2E7”,
“升级固件”:“6.43.4”
}
-设置事实:
升级固件:“{item.split(':').1 | trim}”
循环:{rb_info.stdout_line | map('quote')| map('trim')| list}}
何时:项目为搜索(“^upgrade firmware”)
-调试:
var:升级固件
-设置事实:
minfo:{{minfo}默认值({})|
组合({item.split(':').0:item.split(':').1 | trim}})
循环:{rb_info.stdout_line | map('quote')| map('trim')| list}}
-调试:
变量:minfo['upgrade-firmware']
谢谢!但是我遇到了一个错误致命:[10.1.1.1]:失败!=>{“msg”:“条件检查”项为搜索(“^upgrade firmware”)”失败。错误为:({%if项为搜索(“^upgrade firmware”)%}真{%else%}假{%endif%})上发生意外的模板类型错误:应为字符串或缓冲区\n\n错误出现在“/home/user/scripts/mikrotik.update/mikrotik info.yml”:第12行第5列,但可能\n出现在文件的其他位置,具体取决于语法问题。\n\n错误行可能是:\n\n register:rb\u info\n-set\u fact:\n^ here\n“}
Tryitem\124; quote is search(“^upgrade firmware”)
。您必须对其进行测试。抱歉,我没有rb_信息。是的,我已更改。现在输出为:任务[设置事实]*跳过:[10.1.1.1]=>(项=[u'RouteBoard:yes',u'model:750',u'serial number:3B0202EEEFB4',u'firmware type:ar7240',u'factory firmware:2.38',u'current firmware:3.19',u'upgrade firmware:6.43.4'])任务[debug]*******************************************************************************************确定:[10.1.1.1=>{“升级固件”:“未定义变量”]
我应该在另一个剧本中定义变量?是否可以隐藏“任务[设置事实]部分?问题是字符串开头有多余的空间。添加过滤器映射('trim')
。请参阅更新的答案。
upgrade-firmware: 6.43.4