【发布时间】:2020-10-31 03:26:43
【问题描述】:
因此,我正在为我们支持的许多服务器使用 Ansible 来处理一些审计点。在大多数情况下,我不得不使用 shell 模块来获取我想要的数据,然后根据通过/失败情况编写一些文件。在很多情况下,这是处理输出数据的更简单方法。首先,我意识到这不一定是 Ansible 的强项。我想在某些时候它被公司推销为它可以很容易地做到这一点,我同意 - 在很多方面它比编写自定义 python/BASH 脚本来做同样的事情更容易。所以 - 我确实意识到我在这里稍微改变了 Ansible 的概念来进行报告,而不是配置/状态管理。然而;我喜欢这个工具,并希望向公司展示我们可以从中获得很多价值。
虽然我可以使用 shell 模块轻松完成这一部分,但我想更好地学习 Ansible。所以想我会发布这个问题。
我正在使用 Yum 模块来获取目标主机上的 repolist。但是我一直对如何提取嵌套在输出字典中的列表值感到困惑。我已经对类型进行了一些检查,据我所知 - 'results' 变量是一个字典,输出在一个列表中。我想要做的是从列表中获取键/值,然后根据该输出执行一些其他任务。但是对于我的生活 - 我无法弄清楚如何做到这一点!
理想情况下 - 我想根据输出使用一些“何时”模块语句(例如,当 repo ID 是..这样做..)或者至少能够将它们存储在一个变量中以使用数据。因此,从这个输出中,我只想获取 reoid 以及它是否已启用。如何从嵌套列表中获取这些值?
简单的剧本:
---
- hosts: localhost
become: yes
tasks:
- name: Section 1.1 - Check Yum Repos
yum:
list: repos
register: section1_1
- name: Debug
debug:
var: section1_1
这是我在本剧本中调试任务的输出:
TASK [Debug] ****************************************************************************************************************************************************
ok: [localhost] => {
"section1_1": {
"changed": false,
"failed": false,
"results": [
{
"repoid": "ansible",
"state": "enabled"
},
{
"repoid": "epel",
"state": "enabled"
},
{
"repoid": "ol7_UEKR6",
"state": "enabled"
},
{
"repoid": "ol7_latest",
"state": "enabled"
}
]
}
}
我怀疑这对外面的人来说可能很容易。我一直在尝试这个,这已经有一段时间了,终于到了我想我会问的地步:)
【问题讨论】:
标签: ansible