Ansible 比较两个列表变量

2023-12-10

我必须检查系统上是否有可用的安装点列表。
因此,我定义了一个包含挂载点列表的变量,然后从 Ansible 事实中提取可用的挂载点。

---
- hosts: all
  vars:
    required_mounts:
      - /prom/data
      - /prom/logs

  tasks:
    - name: debug mountpoint
      set_fact:
        mount_points: "{{ ansible_mounts|json_query('[].mount') }}"

    - name: check fs
      fail:
        msg: 'mount point not found'
      when: required_mounts not in mount_points

我被困在这里,我不知道如何比较变量required_mounts与现有的安装点。
如果有任何项目在required_mounts不在现有安装点中,任务应该失败。

任务check fs即使安装点存在,也总是失败。

我必须一一循环吗?并逐项比较?如果是这样,我怎样才能实现这一目标?


您可以使用集合论为此,因为您正在寻找的只是之间的区别required_mountsansible_mounts.

另外,这里不需要 JMESPath 查询,这个简单的要求可以通过简单的实现map.

因此,这可以通过单独的任务来实现:

- fail:
    msg: "Missing mounts: `{{ missing_mounts | join(', ') }}`" 
  when:  missing_mounts | length > 0
  vars:
    missing_mounts: >-
      {{ 
        required_mounts 
          | difference(
            ansible_mounts | map(attribute='mount')
          ) 
      }}

鉴于剧本:

- hosts: localhost
  gather_facts: yes
  vars:
    required_mounts:
      - /etc/hostname
      - /etc/hosts
      - /tmp/not_an_actual_mount
      - /tmp/not_a_mount_either

  tasks:
    - fail:
        msg: "Missing mounts: `{{ missing_mounts | join(', ') }}`" 
      when:  missing_mounts | length > 0
      vars:
        missing_mounts: >-
          {{ 
            required_mounts 
              | difference(
                ansible_mounts | map(attribute='mount')
              ) 
          }}

这产生:

TASK [Gathering Facts] *******************************************************
ok: [localhost]

TASK [fail] ******************************************************************
fatal: [localhost]: FAILED! => changed=false 
  msg: 'Missing mounts: `/tmp/not_an_actual_mount, /tmp/not_a_mount_either`'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ansible 比较两个列表变量 的相关文章

  • 即使在开始时已经输入,Ansible 同步也会提示密码

    Ansible v1 6 5 的同步模块提示输入密码 Enter passphrase for key 尽管我一开始就已经输入了运行剧本 知道为什么吗 我使用以下选项运行我的剧本 u myuser ask sudo pass private
  • Ansible:权限被拒绝(公钥、密码)

    我无法连接到 Ansible 中的主机 这是错误 192 168 1 12 无法到达 gt 改变 假 msg 错误 SSH 在连接过程中遇到未知错误 我们建议您使用 vvvv 重新运行该命令 这会导致 将启用 SSH 调试输出以帮助诊断问题
  • Ansible:全局模板文件夹?

    谷歌搜索找不到任何东西 有group vars 全部 对于变量 有类似的模板吗 我想在多个角色中使用一些模板 您可以将全局模板放入templatesAnsible 布局顶层目录 与group vars 顺便说一句 全局文件也是如此 file
  • 根据磁盘可用空间获取节点IP

    我正在尝试编写一个 Ansible 剧本来检查多个服务器上的磁盘空间 到目前为止 这是我的 Ansible 剧本 hosts all become yes tasks name Check freespace shell df h awk
  • Ansible with_items 与循环

    使用有什么区别带有项目 https docs ansible com ansible 2 4 playbooks loops html vs loops http docs ansible com ansible latest user g
  • 无法在守护进程模式下运行 Ansible

    我可以运行 Ansible 像守护进程一样管理我的主机吗 例如 我有时会更改我的剧本 但我不想手动运行 ansible playbook main yml 请不要建议 crontab 有一个特定的点 我不能在生产服务器上使用 crontab
  • 用于下载文件的 S3 模块在 ansible 中不起作用

    这是为从 S3 存储桶 artefact test 下载文件而编写的 ansible 代码 name Download customization artifacts from S3 s3 bucket artefact test obje
  • 如何从 Ansible 中的指定组中删除用户?

    我们假设user01定义了两个组 groupA and groupB 除了主要组之外 我可以将帐户添加到groupC 确保user01属于groupC using user name user01 groups groupC append
  • 带有 cacert 选项的 Ansible URI 模块

    我正在尝试做相当于 curl X POST data
  • ansible安装node.js版本6

    要安装 Node 6 x 版本 请执行以下命令 curl sL https deb nodesource com setup 6 x sudo E bash sudo apt get install y nodejs 现在我到底该如何在an
  • 如何使用Vault在Ansible中运行playbook api

    我有一本带有Vault的剧本 我可以运行它 ansible playbook info yml ask vault pass 现在 我想在 Ansible 中运行我的 playbook api 答案在如何使用Vault在Ansible v2
  • Ansible 权限问题

    我正在尝试将当前用户添加到系统中的某个组 然后执行需要该组权限的命令 我的剧本是这样的 name Add this user to RVM group sudo true user state present name vagrant ap
  • 创建一个能够从容器注册表中提取的 Docker 就绪计算引擎

    我们使用 terraform 设置 GCE 实例 然后使用 ansible playbooks 来配置它们并将我们的服务转移到机器上 我正在我们的组织中运行一个项目 该项目需要从另一个项目中提取 Docker 映像 这些图像托管在另一个项目
  • Ansible 循环直到条件匹配。

    我想进行一系列 API 调用 每次调用后检查结果中的特定参数 如果它大于特定值 则将其保存在寄存器中并继续进一步执行剧本 基本上 我正在对 RHEV 进行 API 调用来检查存储域 然后我想检查存储域是否有足够的空间 如果有 则将该存储域i
  • Ansible git clone“权限被拒绝”但直接 git clone 工作

    我在使用 Ansible 时遇到了一个令人不安的问题 我使用当前主机的 ssh 密钥在我的环境中设置 git 克隆 name Add user Public Key copy src Users alexgrs ssh id rsa pub
  • Ansible 无法运行任何命令或 shell

    我在 RPi 上运行任何命令或 shell 时遇到问题 当我使用以下代码时 name Example command ansible builtin command cmd cat etc motd 我收到此错误 Unsupported p
  • Ansible 列表未排序

    我有一个正在循环的列表 问题是它给出了一个奇怪的顺序 param yml 文件 my list a val1 b val2 c val3 d val3 这是我的简单调试循环 name debug debug msg item loop my
  • 角色和任务可以存在于同一个剧本中吗?

    file main yml hosts fotk remote user fakesudo tasks name create a developer user user name user password password shell
  • Ansible bitbucket 克隆配置 ssh 错误

    总之 当使用 Ansible 配置我的 vagrant box 时 在尝试使用 ssh 克隆我的 bitbucket 私有存储库时 我遇到了一个神秘的错误 该错误指出 主机密钥验证失败 然而 如果我流浪 ssh 然后运行 克隆 命令 私有存
  • 您可以更改 Ansible 的临时消息,直到重试循环吗?

    在我的一本剧本中 我启动一项服务并轮询其状态 然后再继续执行下一个任务 如下所示 name Poll for service status uri url http some service status register response

随机推荐

  • 如何触发特定的Google自定义搜索引擎细化标签?

    目前 我们的组织正在使用 Google 自定义搜索引擎来提供自动建议 并且我们在 CSE 中配置了大约 3 个优化标签 之前 我们使用 WebSearch 和 SearchControl WebSearch 有一个 setSiteRestr
  • QWizard:更改标题字段的高度/尺寸

    我目前正在尝试为我正在开发的 Python Qt 应用程序实现一个简单的 第一步 向导 使用 Designer 确实很容易做到这一点 但与往常一样 问题在于细节 我的问题是 标题 字段对我来说太大了 约占可用屏幕空间的 50 这里有一个截屏
  • 给定表数据的期望输出

    您好 我有一个表测试其结构如下 Testing PK C1 c2 1 v11 v12 2 v21 v23 3 v31 v32 现在我需要查询该表 测试 以便获得以下输出 Pk Key value 1 c1 v11 1 c1 v12 2 c2
  • 泛型类型约束与继承

    这两个函数声明有区别吗 func doSomething
  • 在 C# 中将很长的日期格式解析为 DateTime

    如何将以下字符串日期解析为 C 中的 DateTime 对象 1970 年 1 月 1 日 星期四 这是来自 XML 提要 而 DateTime Parse 似乎不喜欢 en GB 语言环境中的它 该提要仅来自英国服务器 因此我不必担心全球
  • YUV NV21 转换为 RGB 的困惑

    根据http developer android com reference android graphics ImageFormat html NV21 NV21 是默认使用的格式 网上有很多关于 YUV NV21 到 RGB 转换的代码
  • OpenGL 中纹理像素和屏幕像素之间的一对一映射

    我正在使用 OpenGL 执行以下操作 我的屏幕尺寸是512 512 我有一个与屏幕大小相同的纹理 我想绘制一个覆盖整个屏幕的四边形 并在像素和纹素之间建立一对一的映射 这样我就可以做到texelFetch与着色器中的屏幕坐标 首先 如果我
  • 何时在新类名后添加括号? [复制]

    这个问题在这里已经有答案了 可能的重复 PHP 类实例化 使用或不使用括号 省略括号和无参数对象构造函数 不管有没有括号 新的Class似乎都不麻烦 所以我怀疑括号有什么用 我查了php手册 没有明白 有人能解释一下吗 括号的目的是让您输入
  • 在哪些情况下会跳过 DAG 的阶段?

    我正在尝试查找在我使用 RDD 的情况下 Spark 会跳过阶段的情况 我知道如果发生洗牌操作 它会跳过阶段 于是 我写了下面的代码来看看是否正确 def main args Array String Unit val conf new S
  • 如何阻止代码/程序访问Web应用程序?

    我想阻止任何人尝试通过代码访问我的网站 从代码的意义上来说 任何一个类似于bot的程序 都会造成流量激增 例如 URL url new URL http www example com URLConnection yc url openCo
  • 使用 jquery 调用 ajax 后如何等待图像加载?

    我有一个 Python 脚本 它对 JPEG 图像进行一些操作 我将一些参数传递给此脚本并从 HTML 页面调用它 该脚本返回一个 img src newimage jpg 标签 我知道如何等待脚本的回复 但我不知道如何判断图像何时完全加载
  • 由于 RAM 故障,是否会发生 System.AccessViolationException?

    我有一个网站 我已经工作了大约一年了 最近 它开始时不时地在我的开发机器中抛出 System AccessViolationException 大多数情况下 当我离开机器时 几周以来我没有对服务器代码进行任何更改 因为我一直在 100 地处
  • cmake 错误:QGLWidget:没有这样的文件或目录

    我正在尝试将 cmake 与 Qt 一起使用 但是在构建时出现以下错误 QGLWidget No such file or directory 在我的 CMakeLists txt 文件中 我有 set CMAKE INCLUDE CURR
  • 使用 C# 在另一个应用程序上执行鼠标单击事件

    我需要做的是 我需要使用我的自定义应用程序来控制安装在同一台计算机上的另一个应用程序 例如 如果我需要使用标准 Windows 计算器 我只需将输入事件发送到计算器 我使用了一些代码片段来实现这一点 现在我已经触发了鼠标和键盘事件 但问题是
  • Python 列表的幂集[重复]

    这个问题在这里已经有答案了 我正在尝试实现一个函数来生成列表的幂集xs 总体思路是我们遍历以下元素xs并选择是否包含x或不 我面临的问题是withX最终等于 None 一个单例列表None 因为 我认为 s add x 回报None 这不是
  • 使用 /= 规范化变量会引发 ufunc 错误

    我正在慢慢地进入一些机器学习领域 但在一项使用计算机视觉处理 Kaggle 猫和狗数据集的练习中 发生了一些我不太明白的事情 当我尝试标准化pickle中的图像值时 它在写入时起作用 X X 255 0 但当我写入时抛出错误 X 255 0
  • C select() 超时 STDIN 单字符(无 ENTER)

    我希望能够使用select 从 STDIN 输入单个字符 无 ENTER 因此 当用户按下一个键时 select 应立即返回 而不是等待用户按 ENTER 键 int main void fd set rfds struct timeval
  • 将字符串电话号码转换为整数[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我对 Java 和 Android 都缺乏经验 我正在尝试检索存储在 Android 手机模拟器的联系人之一中的电话号码 虽然我成功获取了它 但该号码已以 987 654 3210
  • C# 中委托的协变/不变/逆变

    我有以下代码 我没有为此委托指定任何通用参数和 IN OUT 方差 如果我正确理解不变性的含义 我应该无法返回基本类型的对象 因为我的委托提到了对象的返回类型 我对不变性的理解是错误的吗 class Program public deleg
  • Ansible 比较两个列表变量

    我必须检查系统上是否有可用的安装点列表 因此 我定义了一个包含挂载点列表的变量 然后从 Ansible 事实中提取可用的挂载点 hosts all vars required mounts prom data prom logs tasks