我正在写一本剧本来收集一些网络设备的数据,但是现在我很难过滤这些数据。我只需要一些钥匙的价值。
这是我得到的全部数据:
"license": {
"response": {
"@status": "success",
"result": {
"licenses": {
"entry": [
{
"authcode": "11111111",
"description": "Feature A",
"expired": "no",
"expires": "September 10, 2020",
"feature": "Feature A",
"issued": "September 10, 2016",
"serial": "96765555555"
},
{
"authcode": "222222222",
"description": "Feature B",
"expired": "no",
"expires": "September 14, 2020",
"feature": "Feature B",
"issued": "September 14, 2016",
"serial": "77777777777"因此,我只需要这个特性和过期信息,比如:
"expires": "September 10, 2020",
"feature": "Feature A",
"expires": "September 14, 2020",
"feature": "Feature B",我正试图像下面这样处理regex,但是我无法得到它的全部值,并且它的前进只是第一个键(有两个具有相同名称的键):
我现在的代码是:
这是预期的结果:
"expires": "September 10, 2020",
"feature": "Feature A",
"expires": "September 14, 2020",
"feature": "Feature B",发布于 2019-04-05 12:52:36
看起来,您在license_output.stdout中得到了一个JSON响应。当您只需在json数据中直接查找值时,就没有理由尝试使用正则表达式来解析它。考虑:
---
- hosts: localhost
gather_facts: false
vars:
license_output:
stdout: |
{
"license": {
"response": {
"@status": "success",
"result": {
"licenses": {
"entry": [
{
"authcode": "11111111",
"description": "Feature A",
"expired": "no",
"expires": "September 10, 2020",
"feature": "Feature A",
"issued": "September 10, 2016",
"serial": "96765555555"
},
{
"authcode": "222222222",
"description": "Feature B",
"expired": "no",
"expires": "September 14, 2020",
"feature": "Feature B",
"issued": "September 14, 2016",
"serial": "77777777777"
}
]
}
}
}
}
}
tasks:
- debug:
msg:
feature: "{{ item.feature }}"
expires: "{{ item.expires }}"
loop: "{{ (license_output.stdout|from_json).license.response.result.licenses.entry }}"这将产生以下结果:
TASK [debug] **********************************************************************************
ok: [localhost] => (item=Feature A) => {
"msg": {
"expires": "September 10, 2020",
"feature": "Feature A"
}
}
ok: [localhost] => (item=Feature B) => {
"msg": {
"expires": "September 14, 2020",
"feature": "Feature B"
}
}目前还不清楚您想要对这些值做什么;在您的示例中使用的是set_fact,但是由于有多个特性,所以不能使用一个名为feature或expires的变量。一种可能是这样的:
- set_fact:
"expires_{{ item.feature.lower().replace(' ', '_') }}": "{{ item.expires }}"
loop: "{{ (license_output.stdout|from_json).license.response.result.licenses.entry }}"
loop_control:
label: "{{ item.feature }}"
- debug:
msg: "Feature A expires on {{ expires_feature_a }}"这将创建名为expires_feature_a和expires_feature_b的变量。上面的示例将输出:
TASK [debug] **********************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "Feature A expires on September 10, 2020"
}另一个例子可能是构建一个将功能名称映射到过期日期的字典:
- set_fact:
features: "{{ features|default({})|combine({item.feature: item.expires}) }}"
loop: "{{ (license_output.stdout|from_json).license.response.result.licenses.entry }}"
loop_control:
label: "{{ item.feature }}"
- debug:
msg: "Feature {{ item.0 }} expires on {{ item.1 }}"
loop: "{{ features.items() }}"这将产生以下结果:
TASK [debug] **********************************************************************************************************************************************************************************
ok: [localhost] => (item=[u'Feature B', u'September 14, 2020']) => {
"msg": "Feature Feature B expires on September 14, 2020"
}
ok: [localhost] => (item=[u'Feature A', u'September 10, 2020']) => {
"msg": "Feature Feature A expires on September 10, 2020"
}https://stackoverflow.com/questions/55533373
复制相似问题