我正在尝试将键"extension_last_heartbeat_time“(date)的值替换为这个dicts列表中的静态字符串"”
[
{
"vcenter": "vcenter-A",
"vcenter_extension_info": [
{
"extension_company": "VMware Inc.",
"extension_key": "com.vmware.vim.sms",
"extension_label": "VMware vCenter Storage Monitoring Service",
"extension_last_heartbeat_time": "2020-11-03T09:05:41.676497+00:00",
"extension_type": "",
"extension_version": "5.5"
},
{
"extension_company": "VMware Inc.",
"extension_key": "com.vmware.vim.vsm",
"extension_last_heartbeat_time": "2020-11-03T09:05:41.678007+00:00",
"extension_type": "",
"extension_version": "6.5"
},
{
"extension_company": null,
"extension_key": "VirtualCenter",
"extension_last_heartbeat_time": "2020-11-03T09:05:41.684018+00:00",
"extension_type": "",
"extension_version": "1.0"
}
]
},
{
"vcenter": "vcenter-B",
"vcenter_extension_info": [
{
"extension_company": "VMware Inc.",
"extension_key": "com.vmware.vim.sms",
"extension_last_heartbeat_time": "2020-08-17T13:12:10.529370+00:00",
"extension_type": "",
"extension_version": "5.5"
},
{
"extension_company": "VMware Inc.",
"extension_key": "com.vmware.vim.vsm",
"extension_last_heartbeat_time": "2020-08-17T13:12:10.530946+00:00",
"extension_type": "",
"extension_version": "6.5"
},
{
"extension_company": null,
"extension_key": "VirtualCenter",
"extension_last_heartbeat_time": "2020-08-17T13:12:10.537281+00:00",
"extension_version": "1.0"
}
]
}
]我试过:
'0-9{4}-0-9{2}-0-9{2}T0-9{2}:0-9{2}:0-9{2}.*',
但是它删除了大部分数据
发布于 2021-01-29 16:52:22
Jinja2数据结构是“活动的”,因此它们在所有jinja2评估上下文中都会发生变异。诀窍是(至少在这篇文章中) set语句创建了新的局部变量,并且没有按照用户预期的方式分配,从而导致了一些愚蠢。这就是为什么我们必须使用dict.update作为一个“覆盖这个切分成员”的工作。
- set_fact:
# you didn't say what variable contained that outermost `list[dict]`
# so change that as needed
vcenter_data: |
{%- for i in vcenter_data -%}
{%- for e in i.vcenter_extension_info -%}
{%- set _ = e.update({
"extension_last_heartbeat_time": new_extension_last_heartbeat_time}) -%}
{%- endfor -%}
{%- endfor -%}
{{ vcenter_data }}
vars:
new_extension_last_heartbeat_time: '1111-22-33'发布于 2021-02-01 12:29:41
解决这一问题的方法之一是使用regex_replace。如果数据位于变量"vcenter_data“中,那么解决方案可能如下所示:
- name: anonymize instance uuid
set_fact:
vcenter_data: "{{ vcenter_data| regex_replace('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}', '<INSTANCE_UUID>') }}"https://stackoverflow.com/questions/65953988
复制相似问题