Ansible在位编辑json对象数组,或在未定义时对不同的值进行排序
我有一个json对象列表,看起来像这样Ansible在位编辑json对象数组,或在未定义时对不同的值进行排序,ansible,jinja2,Ansible,Jinja2,我有一个json对象列表,看起来像这样 [ { "apiVersion": "v1", "count": 11, "eventTime": null, "firstTimestamp": "2020-10-20T16:17:08Z", "lastTimestamp": "2020-10-20T16:30:
[
{
"apiVersion": "v1",
"count": 11,
"eventTime": null,
"firstTimestamp": "2020-10-20T16:17:08Z",
"lastTimestamp": "2020-10-20T16:30:38Z",
"involvedObject": {
"apiVersion": "v1"
},
"kind": "Event"
},
{
"apiVersion": "v1",
"count": 11,
"eventTime": "2020-10-20T16:17:10.182317Z"
"firstTimestamp": null,
"lastTimestamp": null,
"involvedObject": {
"apiVersion": "v1"
},
"kind": "Event"
}
]
如果eventTime
未定义lastTimestamp
,我希望能够按照lastTimestamp
对该数组进行排序。由于这不适用于排序
——至少据我所知,我正在考虑操纵数组,当lastTimestamp
为空时,将lastTimestamp
设置为eventTime
由于我是Ansible的新手,我不知道如何操作一个列表来归档我的目标。或者甚至有一种方法可以按两个属性进行排序吗?简单地说,您不需要在ansible中就地编辑。您可以操纵数据以创建适合您需要的新数据结构 在您的具体案例中,我认为除了使用
set\u fact
并在原始数据上循环检查每个项目之外,没有任何其他方法(即,我看不到简单地对原始数据应用一系列过滤器的解决方案)
新列表中的新项目将通过将原始dict与包含正确日期的dict或空dict组合来获得,以保留当前日期
下面是一个快速示例剧本:
---
-名称:处理日期和排序
主机:本地主机
收集事实:错误
变量:
#将原始数据作为json显示在一行上,以缩短显示时间
api_事件:[{“apiVersion”:“v1”,“count”:11,“eventTime”:null,“firstTimestamp”:“2020-10-20T16:17:08Z”,“lastTimestamp”:“2020-10-20T16:30:38Z”,“involvedObject”:“{”apiVersion:“v1”;“种类”:“Event”},{“apiVersion”:“v1”,“count”:11,“eventTime”:“2020-10-20T16:17:10.182317Z”,“firstTimestamp”:null,“lastTimestamp”:null,“involvedObject”:{“apiVersion”:“v1”},“种类”:“事件”}]
任务:
-名称:处理API事件以确定我们将使用的时间
变量:
新的时间戳:{{item.firstTimestamp}三元({},{'firstTimestamp':item.eventTime}}}
当前_事件:{{item}合并(新的_时间戳)}”
设定事实:
已处理的_api_事件:{{已处理的_api_事件|默认([])+[current_event]}
循环:“{api_事件}}”
-名称:显示已排序的结果
调试:
msg:{{processed_api_events}排序(attribute='firstTimestamp')}
其中:
PLAY [Process date and sort] ***********************************************************************************************************************************************************************************************************
TASK [Process API events to determine time we will use] ********************************************************************************************************************************************************************************
ok: [localhost] => (item={'apiVersion': 'v1', 'count': 11, 'eventTime': None, 'firstTimestamp': '2020-10-20T16:17:08Z', 'lastTimestamp': '2020-10-20T16:30:38Z', 'involvedObject': {'apiVersion': 'v1'}, 'kind': 'Event'})
ok: [localhost] => (item={'apiVersion': 'v1', 'count': 11, 'eventTime': '2020-10-20T16:17:10.182317Z', 'firstTimestamp': None, 'lastTimestamp': None, 'involvedObject': {'apiVersion': 'v1'}, 'kind': 'Event'})
TASK [Show result sorted] **************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": [
{
"apiVersion": "v1",
"count": 11,
"eventTime": null,
"firstTimestamp": "2020-10-20T16:17:08Z",
"involvedObject": {
"apiVersion": "v1"
},
"kind": "Event",
"lastTimestamp": "2020-10-20T16:30:38Z"
},
{
"apiVersion": "v1",
"count": 11,
"eventTime": "2020-10-20T16:17:10.182317Z",
"firstTimestamp": "2020-10-20T16:17:10.182317Z",
"involvedObject": {
"apiVersion": "v1"
},
"kind": "Event",
"lastTimestamp": null
}
]
}
PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0