Ansible/Jinja2 如何将密钥追加到字典列表中

2023-12-10

我想要像这样在 ansible 中定义字典

vhosts:
  git_branch_1:
    - { a: example.com, customer: a }
    - { a: example.com, customer: b }
    - { a: example.org, customer: a }
  git_branch_2:
    - { a: example.com, customer: x }
    - { a: example.org, customer: y }

有些任务我只需要循环字典键,这很好用

- name: "just debug"
  debug: msg={{ item }}
  with_items: "{{ vhosts.keys() }}"

但有些任务我想从每个键迭代列表,并将键附加为字典的另一个属性,所以我想从这个原始字典组合/创建新字典,如下所示:

combined_vhosts:
  - { a: example.com, customer: a, branch: git_branch_1 }
  - { a: example.com, customer: b, branch: git_branch_1 }
  ...
  - { a: example.com, customer: x, branch: git_branch_2 }

在某些任务中,我只需要获取顶级域:

domains:
  - example.com
  - example.org

有没有办法,如何用 ansible setfacts/jinja2 表示法实现这一点,或者我是否必须在 python 中为 ansible 编写一个自定义插件?


你可以通过以下方式实现这一点set_fact:

---
- hosts: localhost
  gather_facts: no
  vars:
    vhosts:
      git_branch_1:
        - { a: example.com, customer: a }
        - { a: example.com, customer: b }
        - { a: example.org, customer: a }
      git_branch_2:
        - { a: example.com, customer: x }
        - { a: example.org, customer: y }
  tasks:
    - set_fact:
        tmp_vhosts: "{{ item.value | map('combine',dict(branch=item.key)) | list }}"
      with_dict: "{{ vhosts }}"
      register: combined_vhosts
    - set_fact:
        combined_vhosts: "{{ combined_vhosts.results | map(attribute='ansible_facts.tmp_vhosts') | sum(start=[]) }}"
    - debug:
        msg: "{{ combined_vhosts }}"

有关此技巧的更多详细信息set_fact and with_ in 这个帖子.

要获取所有域,您可以使用json_query('*[].a').

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ansible/Jinja2 如何将密钥追加到字典列表中 的相关文章

随机推荐

  • 最后的资源优化

    我正在编写一个不支持两阶段提交的资源适配器 我知道有一种优化技术称为 最后资源优化 在 JBoss 上 您的 XAResource 类应该实现 LastResource 以便进行优化 我的问题是 如何在 WebLogic WebSpehre
  • Angularjs 将数组映射到另一个数组

    我有两个数组 Users and 就业机会像这样 Users id 1 name ryan id 2 name Julie Employments user id 1 title manager user id 2 title Profes
  • 如何重新启动 Robotium 中关闭的应​​用程序?

    我开始自动化我的 Android 应用程序 它有一个 条款和条件 屏幕 在那里 如果我点击 衰退 我的应用程序将被关闭 如何在同一进程中重新启动或重新启动我的应用程序 尝试这个 assuming this method is in a Ac
  • CSS 样式表不适用于自定义 QWidget

    我想做的是将自定义 CSS 应用于派生自的自定义小部件QLabel但我没有运气 我将自定义类定义为 class CustomLabel public QLabel 我还没有重新实现paintEvent鉴于标准 我认为功能QLabel支持CS
  • Sugarcrm 8 XSRF

    我已经备份了 Sugarcrm 版本 8 0 0 企业版的 ondemand 实例 它对于 CRUD 记录和其他内容正常工作 但是当我尝试通过 Zip 上传模块时 它给出了以下错误 Cross Site Request Forgery XS
  • 如何停止鼠标垂直滚动

    我在网络浏览器中使用java脚本 Jquery 我制作了一个自定义水平滚动条 它与鼠标滚轮或鼠标滚动一起使用 通常鼠标滚动与垂直条一起使用 所以它与我编程的水平滚动条冲突 我不想完全删除竖线 而只是在滚动鼠标时禁用竖线 如果您有道理 请提出
  • Django 查询:计算具有 FK 的对象数量以建模实例

    这应该很容易 但由于某种原因我找不到它 我有以下内容 App models Model Release models Model date models DateTimeField App models ForeignKey App 如何查
  • 延迟长度字符变量会导致内存泄漏,具体取决于优化级别

    我在 Ubuntu 中使用 gfortran 8 4 和延迟长度字符变量 如下例所示 PROGRAM test IMPLICIT NONE CHARACTER LEN ALLOCATABLE str str 10 END PROGRAM t
  • asp.net c# 中的动态 imageURL

    目前我有这个
  • xpages 视图面板列多值分隔符

    视图中有一列具有多值分隔符和新行 但是当我将此视图拖放到我的 XPage 中时 作为
  • 动态 OR 过滤 - Slick

    好的 我有一个带有多个可选参数的方法 如下所示 def username Option String petname Option String favouritefood Option String 我想编写一个动态查询 它将能够以这种方
  • 加载媒体时出错:jw_player Rails 中的文件无法播放错误

    我正在使用下面提到的代码来播放本地磁盘上的视频 但它不起作用 而不是抛出错误加载媒体 文件无法播放错误 我已经提到了下面的代码 我是这个 jw player 的新手 所以请帮我解决这个问题 提前致谢 从下载 jwplayerhttp www
  • HTML 不显示带有 JLabel 的 Java Applet

    当我执行与我的小程序关联的 HTML 文件时 没有绘制任何内容并且屏幕是空的 为什么会出现这种情况 如何将字符串添加到 Applet 中 Java Applet 的源代码 package m2mcom web import m2mcom e
  • 为什么没有 static_cast 会失败?

    编译f有效 但编译g因错误而失败 为什么会出现这种情况 class A public A class B public A public B void f A a new A B b static cast
  • 对象文字属性值简写

    在创建 JavaScript 工厂函数时 我被告知返回语法如下所示 function FF constructorArg var privateName constructorArg var publicMessage Hello Stac
  • 从 GPU 复制到 CPU 比将 CPU 复制到 GPU 慢

    我开始学习cuda有一段时间了 我遇到了以下问题 请看下面我的表现 Copy GPU int B int dev B initialize B 0 cudaMalloc void dev B Nel Nface sizeof int cud
  • Elasticsearch 匹配与术语查询

    我使用匹配查询搜索 request method GET query filtered query match request method GET filter bool must 不出所料 Match查询可以得到结果 如下图 但问题是当
  • C# / Postgres / FluentNHibernate:配置 npgsql 抛出 NotSupportedException

    有时我真的开始想知道我的源代码中发生了什么 我正在尝试使用 npgsql 2 0 11 0 连接到 PostGres 9 0 我确信我已经这样做了 但是现在 我的程序抛出了不支持异常因为它分为以下几个步骤 ISessionFactory s
  • 单击标记时从底部滑入 Google 地图视图

    我想实现以下目标 GMaps 在模型中滑动 当我单击标记时 信息视图应该从底部滑入 黑色圆圈是一个浮动操作按钮 应随信息窗口一起上升到顶部 并以其中心位于信息窗口的上边框处 当我单击信息窗口以外的任何地方时 它应该滑回并消失 你能给我一些出
  • Ansible/Jinja2 如何将密钥追加到字典列表中

    我想要像这样在 ansible 中定义字典 vhosts git branch 1 a example com customer a a example com customer b a example org customer a git