community.general.replace_keys 过滤器 – 替换字典列表中的特定键

注意

此过滤器插件是 community.general 集合(版本 10.1.0)的一部分。

如果您使用的是 ansible 包,则可能已安装此集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.general

要在 playbook 中使用它,请指定:community.general.replace_keys

community.general 9.1.0 中的新增功能

概要

  • 此过滤器替换提供的字典列表中的指定键。

输入

这描述了过滤器的输入,即 | community.general.replace_keys 之前的值。

参数

注释

输入

列表 / 元素=字典 / 必需

字典的列表。

顶层键必须是字符串。

关键字参数

这描述了过滤器的关键字参数。这些是以下示例中的值 key1=value1key2=value2 等:input | community.general.replace_keys(key1=value1, key2=value2, ...)

参数

注释

matching_parameter

字符串

指定目标键的匹配选项。

选择

  • "ends_with":匹配以 target[].before 项之一结尾的键。

  • "equal" (默认):匹配与 target[].before 项之一完全相同的键。

  • "regex":匹配与 target[].before 中提供的正则表达式之一匹配的键。

  • "starts_with":匹配以 target[].before 项之一开头的键。

target

列表 / 元素=字典 / 必需

具有属性 beforeafter 的字典列表。

target[].after 的值替换匹配 target[].before 的键。

after

字符串

匹配的键更改为。

before

字符串

要更改的键或键模式。

target[].before 的解释取决于 matching_parameter

对于匹配多个 target[].before 的键,将使用 第一个 匹配的 target[].after

示例

l:
  - {k0_x0: A0, k1_x1: B0, k2_x2: [C0], k3_x3: foo}
  - {k0_x0: A1, k1_x1: B1, k2_x2: [C1], k3_x3: bar}

# 1) By default, replace keys that are equal any of the attributes before.
t:
  - {before: k0_x0, after: a0}
  - {before: k1_x1, after: a1}
r: "{{ l | community.general.replace_keys(target=t) }}"

# 2) Replace keys that starts with any of the attributes before.
t:
  - {before: k0, after: a0}
  - {before: k1, after: a1}
r: "{{ l | community.general.replace_keys(target=t, matching_parameter='starts_with') }}"

# 3) Replace keys that ends with any of the attributes before.
t:
  - {before: x0, after: a0}
  - {before: x1, after: a1}
r: "{{ l | community.general.replace_keys(target=t, matching_parameter='ends_with') }}"

# 4) Replace keys that match any regex of the attributes before.
t:
  - {before: "^.*0_x.*$", after: a0}
  - {before: "^.*1_x.*$", after: a1}
r: "{{ l | community.general.replace_keys(target=t, matching_parameter='regex') }}"

# The results of above examples 1-4 are all the same.
r:
  - {a0: A0, a1: B0, k2_x2: [C0], k3_x3: foo}
  - {a0: A1, a1: B1, k2_x2: [C1], k3_x3: bar}

# 5) If more keys match the same attribute before the last one will be used.
t:
  - {before: "^.*_x.*$", after: X}
r: "{{ l | community.general.replace_keys(target=t, matching_parameter='regex') }}"

# gives

r:
  - X: foo
  - X: bar

# 6) If there are items with equal attribute before the first one will be used.
t:
  - {before: "^.*_x.*$", after: X}
  - {before: "^.*_x.*$", after: Y}
r: "{{ l | community.general.replace_keys(target=t, matching_parameter='regex') }}"

# gives

r:
  - X: foo
  - X: bar

# 7) If there are more matches for a key the first one will be used.
l:
  - {aaa1: A, bbb1: B, ccc1: C}
  - {aaa2: D, bbb2: E, ccc2: F}
t:
  - {before: a, after: X}
  - {before: aa, after: Y}
r: "{{ l | community.general.replace_keys(target=t, matching_parameter='starts_with') }}"

# gives

r:
  - {X: A, bbb1: B, ccc1: C}
  - {X: D, bbb2: E, ccc2: F}

返回值

描述

返回值

列表 / 元素=字典

包含已替换键的字典列表。

返回: 成功

作者

  • Vladimir Botka (@vbotka)

  • Felix Fontein (@felixfontein)

提示

每个条目类型的配置条目都有一个优先级顺序,从低到高。例如,列表中较低的变量将覆盖列表中较高的变量。