替换Ansible中dict列表中的值

替换Ansible中dict列表中的值,ansible,Ansible,我正在尝试用dict列表中的静态字符串“”替换键“extension\u last\u heartbeat\u time”(date)的值 [ { "vcenter": "vcenter-A", "vcenter_extension_info": [ { "extension_company&

我正在尝试用dict列表中的静态字符串“”替换键“extension\u last\u heartbeat\u time”(date)的值

[
        {
            "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},'}”