我有一个从测试数据库中检索数据的剧本,但我无法弄清楚如何提取从数据库返回的行。
该练习的全部目的是从KVP中提取值并将其添加到报告中,因此最终的输出将类似于:
| 主机名|服务器状态|服务器类型|联合控制器| associated_controller |
| --|--|--|--| ------------ |
| ATT_DELL|向上|节点|123.456.78.901| 123.456.78.901 |
| 史蒂夫_Ubuntu|向上|控制器|不适用| NOT APPLICABLE |
- name: Sample playbook
gather_facts: True
hosts: sql_server
tasks:
- name: Retrieve data from database
tags: always
community.mysql.mysql_query:
login_host: "{{ login_host }}"
login_db: "{{ login_db }}"
login_user: "{{ login_user }}"
login_password: "{{ login_password }}"
query: select * from test_db
register: mysql_result
- name: output query results
tags: always
debug:
msg: "{{ item }}"
loop: "{{ mysql_result.query_result }}"
个字符
我尝试了以下方法:
- name: output query results
tags: never
debug:
msg: "{{ item[0] }}"
loop: "{{ mysql_result.query_result | items2dict }}"
型
这导致了下面的结果,但我需要循环遍历每个列表项,从每个kvp中提取单独的值,以便在报告中使用。
ok: [servername] => (item=[{u'datetime': None, u'hostname': u'steve_ubuntu', u'associated_controller': u'NOT APPLICABLE', u'server_type': u'controller', u'server_status': u'Up'}, {u'datetime': None, u'hostname': u'ATT_DELL', u'associated_controller': u'NOT APPLICABLE', u'server_type': u'controller', u'server_status': u'Up'}]) =>
msg:
associated_controller: NOT APPLICABLE
datetime: null
hostname: steve_ubuntu
server_status: Up
server_type: controller
型
我已经尝试了很多其他的事情,比如将列表转换为字典,但我收到了下面的错误。我需要保持输入动态,但我不知道将从数据库中检索多少项。
fatal:[servername]:失败!=> msg:'在({{ mysql_result.query_result}上发生意外的模板类型错误|items2dict}}):列表索引必须是整数,而不是str'
我不只是在寻找我的问题的答案,而是我需要通读关于ansible的哪些基本原理来更好地理解返回值的基本原理以及如何提取它们?我已经阅读了Ansible的在线文档,但这并不是了解他们产品的最佳文档。
1条答案
按热度按时间q3qa4bjr1#
使用Jinja模板例如,给定数据
字符串
声明密钥
型
注意:如果您接受订单,您可以动态获取密钥
型
决定您想要存储数据的格式并创建模板。例如,尝试CSV
型
给予
型
如果这是您想要的,请在控制器上创建文件
型
将创建文件
型
用于测试的完整剧本示例
型