替换Ansible中dict列表中的值
我正在尝试用dict列表中的静态字符串“”替换键“extension\u last\u heartbeat\u time”(date)的值替换Ansible中dict列表中的值,ansible,Ansible,我正在尝试用dict列表中的静态字符串“”替换键“extension\u last\u heartbeat\u time”(date)的值 [ { "vcenter": "vcenter-A", "vcenter_extension_info": [ { "extension_company&
[
{
"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"
}
]
}
]
我试过:
- 名称:匿名化上次心跳时间 设定事实: 格言:“{dict|map('regex|u replace','[0-9]{4}-[0-9]{2}-[0-9]{2}[0-9]{2}:[0-9]{2}.''.''){list}”
但它删除了大部分数据Jinja2数据结构是“活的”,因此它们在所有Jinja2评估上下文中都会发生变异。诀窍在于(至少在这篇文章中是这样的)
set
语句创建了新的局部变量,并且没有按照用户可能期望的方式分配,这导致了一些愚蠢的行为。这就是为什么必须使用dict.update
作为“覆盖此dict成员”的解决方法
-设置事实:
#你没有说哪个变量包含最外层的'list[dict]`
#因此,根据需要进行更改
vcenter_数据:|
{%-对于vcenter_数据中的i-%}
{%-对于i.vcenter_扩展_info-%}
{%-集{=e.update({
“extension\u last\u heartbeat\u time”:新的\u extension\u last\u heartbeat\u time})-%}
{%-endfor-%}
{%-endfor-%}
{{vcenter_data}}
变量:
新的扩展上次心跳时间:“1111-22-33”
Jinja2数据结构是“活的”,因此它们在所有Jinja2评估上下文中都会发生变异。诀窍在于(至少在这篇文章中是这样的)set
语句创建了新的局部变量,并且没有按照用户可能期望的方式分配,这导致了一些愚蠢的行为。这就是为什么必须使用dict.update
作为“覆盖此dict成员”的解决方法
-设置事实:
#你没有说哪个变量包含最外层的'list[dict]`
#因此,根据需要进行更改
vcenter_数据:|
{%-对于vcenter_数据中的i-%}
{%-对于i.vcenter_扩展_info-%}
{%-集{=e.update({
“extension\u last\u heartbeat\u time”:新的\u extension\u last\u heartbeat\u time})-%}
{%-endfor-%}
{%-endfor-%}
{{vcenter_data}}
变量:
新的扩展上次心跳时间:“1111-22-33”
解决此问题的方法之一是使用regex\u 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>') }}"
-名称:匿名化实例uuid
设定事实:
vcenter_数据:“{vcenter_数据}regex_替换('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12},'}”
解决此问题的方法之一是使用regex\u 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>') }}"
-名称:匿名化实例uuid
设定事实:
vcenter_数据:“{vcenter_数据}regex_替换('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12},'}”