Ansible,将字典合并为一次

2024-01-23

我有这个示例 yaml 文件(haproxy.yml):

---
rules:
  aa:
    PHP53:
      - url: php53-1-aa.my-example.com
    PHP55:
      - url: php55-1-aa.my-example.com
    PHP56:
      - url: php56-1-aa.my-example.com
      - url: php56-2-aa.my-example.com
      - url: php56-3-aa.my-example.com
    PHP72:
      - url: php72-1-aa.my-example.com
      - url: php72-2-aa.my-example.com
      - url: php72-3-aa.my-example.com
  bb:
    PHP53:
      - url: php53-1-bb.my-example.com
      - url: php53-2-bb.my-example.com
      - url: php53-3-bb.my-example.com

    PHP55:
      - url: php55-1-bb.my-example.com
    PHP56:
      - url: php56-1-bb.my-example.com
      - url: php56-2-bb.my-example.com
      - url: php56-3-bb.my-example.com
    PHP72:
      - url: php72-1-bb.my-example.com
      - url: php72-2-bb.my-example.com
      - url: php72-3-bb.my-example.com
  cc:
    PHP55:
      - url: php55-1-cc.my-example.com
    PHP56:
      - url: php56-1-cc.my-example.com
      - url: php56-2-cc.my-example.com
      - url: php56-3-cc.my-example.com
...

我使用这个剧本来加载这个文件:

---
- name: 'stack-example'
  hosts: localhost
  gather_facts: no
  tasks:
    - name: 'include'
      include_vars:
        file: 'haproxy.yml'

    - set_fact:
        try: '{{ try|default({}) | combine(item.value) }}'
      loop: '{{ lookup("dict", rules) }}'

    - debug:
        var: try

所有文件都是两个解释并重现我的问题:-)

我需要使用set_fact处理我的变量。

我的主要目标是将所有 PHP** 合并/分组为一组。 这是我需要的一个例子,我尝试了很多东西combine map lookup但没有任何结果能给我带来我期望的结果。

我尝试这样做:

{
  "PHP53": [
      { "url": "php53-1-aa.my-example.com" },
      { "url": "php53-1-bb.my-example.com" },
      { "url": "php53-2-bb.my-example.com" },
      { "url": "php53-3-bb.my-example.com" }
  ],
  "PHP55": [
      { "url": "php55-1-aa.my-example.com" },
      { "url": "php55-1-bb.my-example.com" },
      { "url": "php55-1-cc.my-example.com" }
  ],
  "PHP56": [
      { "url": "php56-1-aa.my-example.com" },
      { "url": "php56-2-aa.my-example.com" },
      { "url": "php56-3-aa.my-example.com" },
      { "url": "php56-1-bb.my-example.com" },
      { "url": "php56-2-bb.my-example.com" },
      { "url": "php56-3-bb.my-example.com" },
      { "url": "php56-1-cc.my-example.com" },
      { "url": "php56-2-cc.my-example.com" },
      { "url": "php56-3-cc.my-example.com" },
  ],
  "PHP72": [
      { "url": "php72-1-aa.my-example.com" },
      { "url": "php72-2-aa.my-example.com" },
      { "url": "php72-3-aa.my-example.com" },
      { "url": "php72-1-bb.my-example.com" },
      { "url": "php72-2-bb.my-example.com" },
      { "url": "php72-3-bb.my-example.com" }
  ]
}

如果有人有想法这样做? 非常感谢你的帮助 此致


下面的任务就完成了

- set_fact:
    rules_grouped: "{{ rules_grouped|
                       default({})|
                       combine({item.0: item.1|json_query('[].value')|flatten})
                       }}"
  loop: "{{ rules|
            dict2items|
            json_query('[*].value')|
            map('dict2items')|list|flatten|
            groupby('key')
            }}"

要了解循环的工作原理,请将其投入调试并逐步添加过滤器。

   - debug
       msg: "{{ rules|
                dict2items
                }}"

   - debug
       msg: "{{ rules|
                dict2items|
                json_query('[*].value')
                }}"

   - debug
       msg: "{{ rules|
                dict2items|
                json_query('[*].value')|
                map('dict2items')|list|flatten
                }}"

   - debug
       msg: "{{ rules|
                dict2items|
                json_query('[*].value')|
                map('dict2items')|list|flatten|
                groupby('key')
                }}"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ansible,将字典合并为一次 的相关文章

  • 如何防止 yaml-cpp 解析器删除所有注释?

    我有一个项目需要阅读一份详细的文档yaml文件 修改几个值 然后写回 麻烦的是yaml cpp完全删除所有评论并 吃掉 它们 有趣的是 YAML Emitter类允许向输出添加注释 有没有办法保留输入中的注释并将它们写回到我没有看到的库中
  • Cygwin - 如何安装 ansible?

    如何使用 Cygwin 获取 安装 ansible 我尝试了以下步骤 但在第 5 条期间 运行时 python setup py 安装 步骤取自 取自https servercheck in blog running ansible wit
  • yaml.parser.ParserError:解析块映射时

    ERROR yaml parser ParserError while parsing a block mapping in tmp statelesscs compose yml line 1 column 1 expected
  • 灵活地将新数据附加到 yaml 文件

    我有不同的 yaml 文件 它们可能具有不同的嵌套结构 文件1 yaml test3 service1 name1 somedata name2 somedata 文件2 yaml test1 app1 app2 somedata app7
  • haml 文件中的 yaml 前面内容

    我正在尝试使用Haml Jekyll 扩展 https github com codegram haml jekyll extension只是我不明白如何包含 yaml 前面的内容 我有以下内容 user hello html title
  • Ansible:即使成为 sudo 用户,也无法配置 sudo 命令

    testuser 是 sudo 用户 sudo cat etc sudoers d 90 cloud init testuser testuser ALL ALL NOPASSWD ALL 我可以手动登录 testuser 并在没有密码的情
  • 如何从用户定义的 ansible.cfg 设置 ansible_config 变量

    我有一个目录结构 在其中保存我的剧本 如下所示 home monk Ansible work ansible cfg playbook dir 1 playbook 1 yml playbook dir 2 playbook 2 yml p
  • 在 ruamel.yaml 的列表元素中添加注释

    我使用 Python 在 YAML 文件的列表中动态添加元素 并且我想在我添加的每个元素旁边添加注释 以下是所有所需的格式 flow style example a b c first list d e second list block
  • 附加到 group_vars 中的 Ansible 字典而不使用 hash_behaviour = merge

    我想定义一个字典变量 各个主机组可以将自己的密钥添加到其中在group vars中 不使用set fact 例如 像这样的东西 group vars ftp servers yml important ports ftp 21 group
  • YAML 中的多行键

    是否可以有这样的多线路键 mykey gt key one keytwo val 其中 keyone 被视为一把钥匙 我想解析 yaml 来产生 mykey keyone keytwo val 您可以在 YAML 中拥有多行密钥 但不完全按
  • 如何读取/理解目标主机上的ansible日志(由syslog编写)

    当你在某个主机上执行 ansible 时 它 会写入该主机上的 syslog 如下所示 Dec 1 15 00 22 run tools python ansible
  • 如何使用 Ansible when 条件在文件中搜索字符串

    我有一个变量中用 n 分隔的搜索字符串列表listofips 我想在文件中搜索该字符串hello csv在我的下面playbook dir 我可能遇到一些语法问题 我不确定 但下面是我尝试过的 set fact listofips 10 0
  • Jinja:空主后备示例如何工作?

    来自 jinja 官方网站的示例代码 if not standalone extends master html endif block body p This is the page body p endblock 据我了解 当独立为真时
  • 动态添加jinja模板

    我有一个 jinja 模板 它是一组 div 标签内的唯一内容 div include temppage html div 当我按下按钮时 我想用其他内容替换标签之间的所有内容 我希望用另一个 jinja 模板 include realpa
  • 连接数组时合并两个 yaml 文档

    我想合并两个 yaml 文档 结果包含 所有映射值 最后一个优先 串联数组 例如给定这个文件 file1 yml animals elephant donkey flavours sour lemon sweet chocolate str
  • 如何更改 ansible_default_ipv4?

    我想将 ansible default ipv4 更改为指向 eth1 而不是 eth0 我可以在剧本中或通过 extra vars 选项来执行此操作吗 ansible 使用命令 https github com ansible ansib
  • 如何在 Azure Pipelines YAML 构建定义中接收修订

    我使用 Azure Pipelines Azure DevOps 创建了一个新版本 它运行得非常好 通常 您使用 Rev r 在构建中获取修订版本 不幸的是 似乎该变量在构建步骤中没有被替换 设置 唯一可以使用它的地方是name YAML
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • 有没有办法同时拥有加密和非加密的主机变量?

    如果我加密host vars 文件与ansible vault 除了清单文件中的主机变量之外 我似乎没有机会拥有未加密的主机变量 我错过了什么吗 事实证明 http docs ansible com ansible intro invent
  • if else 在 ansible 打印语句中

    我需要有关具有多个条件的打印语句的语法的帮助 目前 报价为 inventory hostname 导致错误 如果我删除剧本运行的引号 但列出文本 inventory hostname 而不是变量 我想知道如何打印变量以及 if else 语

随机推荐

  • 如何将数据从 iOS 发送回 Flutter?

    我正在尝试让 iOS 将数据发送回 flutter 更具体地说 是控制中心媒体控制 我正在开发一个音乐应用程序 我可以获取从 Flutter 发送到 iOS 的数据 从而允许它显示在媒体控件中 但是 如果我要控制播放暂停下一个上一个 我该如
  • Django:按月/年分组的日期属性的总和

    我想将此查询从 SQL 放入 Django select date format date Y m as month sum quantity as hours from hourentries group by date format d
  • VBA 代码无法连接到 SQL Server 2008

    我的代码无法连接到 Microsoft SQL Server 2008 中的数据库 它尝试连接 但随后出现以下错误 运行时错误 SQL Server 不存在或访问被拒绝 服务器受密码保护 但我认为是我造成的 任何帮助将不胜感激 发生错误的地
  • 如何仅翻转变换矩阵的一个轴?

    我有一个 4x4 变换矩阵 然而 在尝试转换后我注意到这个动作andY 轴的旋转方向相反 其余的都是正确的 我从其他一些 API 获得了这个矩阵 所以可能是坐标系的差异 那么 如何翻转变换矩阵的轴呢 如果只有平移 我可以在 Y 平移上添加减
  • 查找类以按名称实例化,无需命名空间或程序集? (。网)

    我想按名称 字符串 实例化一个类 而不指定命名空间或程序集 像这样 Unity语法 var processor container Resolve
  • HttpClient 与 HttpWebRequest

    我有一个大文件 我必须将其发送到 Web api 客户端 数据是多部分的 问题是 如果文件是通过 http Web 请求发送的 那么它会在 webapi 上快速上传 对于此请求 文件内容直接写入请求流 就好像通过 Httpclient ne
  • 绕过 Rsync 提示“您确定要继续连接吗”

    如何绕过这个问题或添加一个自动回答这个问题的标志 因为我正在尝试编写一个脚本 并且这个问题不断停止 rsync 的过程 因为在提示时无法在脚本中回答这个问题 Set the StrictHostKeyChecking选项no 在配置文件中或
  • OpenCV-Python 中的简单数字识别 OCR

    我正在尝试在 OpenCV Python cv2 中实现 数字识别 OCR 它仅用于学习目的 我想学习 OpenCV 中的 KNearest 和 SVM 功能 我有每个数字 100 个样本 即图像 我想和他们一起训练 有一个样本letter
  • 通过 Java 使用 Selenium Webdriver 缺少 size() 选项

    一直在参加一些课程来提高我使用 Selenium Webdriver 的自动化技能 我没有size 方法作为尝试计算页面内链接数量时的一个选项 我缺少一些罐子吗 导入库 java public static void main String
  • SVG 坐标系 - 点与像素

    阅读通过SVG 1 1 规范 http www w3 org TR SVG11 coords html 我试图理解用于定义初始视口的单位与文档其余部分使用的单位之间的关系 如果视口最初是使用点定义的
  • 我的 $Foo ATL 解决方案中的 ($Foo)PS 项目有何用途?

    在MSVC中创建一个ATL项目似乎创建的不是一个而是两个项目 后者的名称与前者相同 但名称后附加了 PS 第二个项目的目的是什么 我如何判断我是否需要它 COM 支持跨两个不同的线程 两个不同的进程或两台不同的机器进行接口方法调用 这就是所
  • 当前单元格展开时折叠其他 UITableViewCell

    我正在努力扩展我的UITableViewCell我可以扩展细胞 但我想崩溃UITableViewCell哪些没有被选中 我在代码中尝试的内容 var expandedCells Int IBOutlet weak var tableView
  • 基于视图和单元格的 NSTableView

    Cocoa 中基于单元格的表格视图和基于视图的表格视图之间的主要区别是什么 我的理解是基于单元格的表格视图基本上用于显示字符串 基于视图用于自定义单元格 诸如拖动行 选择等用户事件可以在基于视图中处理 基于单元格的表格视图使用 object
  • 如何完全禁用LogCat暂停?

    我对新的 LogCat 及其暂停功能有一个大问题 当我想从中读取一些较旧的条目时 我喜欢暂停输出的想法 但有时我希望输出不间断 这样我就可以触摸手机 并通过读取输出来查看它的反应 所以令我非常沮丧的是 LogCat 经常完全暂停 暂停按钮被
  • 在 div 上使用“display:table-cell”有缺点吗?

    我想要实现的是拥有一个固定宽度的第一个 div 和一个流动的第二个 div 它将填充父 div 宽度的其余宽度 div class clearfix div style width 100px some content div div so
  • hsc2hs:使用 Haskell 改变 C 结构

    我正在尝试编写一个与 C 通信的 Haskell 程序 最终通过 GHC iOS 用于 iOS 我希望它将一个字符串从 C 传递到 Haskell 让 Haskell 处理它 然后通过 hsc2s 将一些数据类型从 Haskell 返回到
  • 如何在 Mahout 0.9 中实现 SlopeOne 推荐器?

    我是 Mahout 新手 正在尝试使用 0 5 版本的 Mahout in Action 早期的例子之一要求使用斜率一推荐器 Mahout 0 9 中还包含此推荐器吗 我查看了文档 但找不到它 也许它已经改名了 感谢您的帮助 Mahout
  • 当表没有行时,将表的可见性设置为 false(在报告服务中)

    如果表没有行 有没有办法将表的可见性设置为 false 我想在 Reporting Services 中隐藏没有行的表 将 NoRows 设置为 在这种情况下是不够的 因为仍然为表格留有空间 并且表格的某些格式仍然可见 我正在使用 Micr
  • 在 Python 中 - 解析响应 xml 并查找特定文本值

    我是 python 新手 在使用 xml 和 python 时遇到特别困难 我遇到的情况是这样的 我正在尝试计算一个单词在 xml 文档中出现的次数 很简单 但是 xml 文档是来自服务器的响应 是否可以在不写入文件的情况下执行此操作 尝试
  • Ansible,将字典合并为一次

    我有这个示例 yaml 文件 haproxy yml rules aa PHP53 url php53 1 aa my example com PHP55 url php55 1 aa my example com PHP56 url ph