在ansible脚本中,有时候需要捕获特定的输出信息或者从输出信息中剪裁需要的信息。以下是几种实现的方法:
- 使用register关键字捕获输出结果
register关键字可以将stdout和stderr的输出结果存储为变量,进而进行处理或者输出到屏幕上。
示例代码:
- name: Capture specific stdout
command: ls /tmp/
register: ls_output
- debug: var=ls_output.stdout_lines
- 使用过滤器获取特定的信息
ansible提供许多过滤器,可以用来处理变量。使用类似于grep,awk功能的过滤器可以从输出信息中剪裁所需的信息。
示例代码:
- name: Get specific information from output result
shell: rpm -qa | grep ansible
register: rpm_output
- set_fact:
ansible_rpm_package: "{{ rpm_output.stdout_lines | first }}"
- 使用json_query从json格式的输出结果中获取特定的信息
在处理json格式的输出结果时,可以使用json_query过滤器,它可以使用jmespath语言中的语法来查询和过滤json格式的信息。
示例代码:
- name: Get specific information from json formated output
command: somecommand -json
register: json_output
- set_fact:
ansible_json_data: "{{ json_output.stdout | from_json | json_query('items[?name==
somevalue
].id') }}"