在 Ansible 角色任务文件中使用 YAML 锚点

2023-12-29

我正在尝试创建一个 ansible 角色任务文件,其中包含多个重复部分,并且我想利用 YAML 的锚点功能,该功能允许跨文件共享数据。在我的实际文件中,我有 3 或 4 个属性需要在文件中的十几个任务中完全相同,因此锚点似乎是完美的解决方案。这是我的设置:

主机配置文件

localhost connection=local

test.yml

---
- name: test
  hosts: localhost
  roles:
    - test

角色/测试/任务/main.yml

---
foo: &foo
  msg: 'this is a test'

- name: Test message
  debug:
    <<: *foo

我期望的属性foo字典应该传播到debug字典,结果是这样的结构

{
  "name": "Test message",
  "debug": {
    "msg": "this is a test"
  }
}

但是,当我尝试运行剧本时却收到此错误消息:

λ ansible-playbook -i hosts.ini test.yml
ERROR! Syntax Error while loading YAML.
  did not find expected key

The error appears to have been in '~/ansible-test/roles/test/tasks/main.yml': line 5, column 1, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:


- name: Test message
^ here

是否可以在 ansible 角色任务文件中使用 YAML 锚点?或者有更好的方法来实现这一点吗?


是否可以在 ansible 角色任务文件中使用 YAML 锚点?或者有更好的方法来实现这一点吗?

当然可以,但实际情况是您创建的 YAML 文档不合法;你不能只使用任意的顶级密钥并期望好的结果——它与 YAML 锚点无关

你想要的是:

- set_fact:
    foo: &foo
      msg: this is a test

- name: Test message
  debug:
    <<: *foo

你不必使用set_fact,任何“不可执行”的任务都可以,你也可以使用when:阻止它运行,因为 YAML 结构很重要。您还可以在中创建该结构vars:某些其他任务的块,即使该任务不使用 var

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

在 Ansible 角色任务文件中使用 YAML 锚点 的相关文章

  • 奇怪的 bash 脚本行为 - 生成的命令在复制粘贴时有效,但在脚本中无效

    出于安全原因 我编写了一个简短的 bash 脚本来包装 ansible playbook 命令 这并不复杂 而且大部分脚本在这里都是无关紧要的 最后 我将脚本参数生成的变量中的 ansible 命令放在一起 如下所示 ansible pla
  • 使用 Python API 2.0.0.1 运行 Ansible Playbook

    安塞布尔版本 2 0 0 1 我现在已经四处寻找了很多 我发现的大多数文档要么不完整 要么已弃用 这篇文章适用于1 8 4版本 即 https stackoverflow com questions 27590039 running ans
  • Ansible 和硬件检查

    我必须使用 ansible 检查 Linux 机器上的不同硬件和配置元素 我完全不确定如何做到这一点 RAM 磁盘空间 DNS CPU 我知道我几乎可以找到我想要的所有事实都在 ansible 中 但我不明白如何使用它 例如 我必须检查 R
  • Ansible local_action 指令

    我对 Ansible 很陌生 有一个简单的问题来了解我的理解local action指示 这是否意味着该命令完全在本地执行 假设你有这样的东西 local action command which nginx register check
  • local_action:shell 连接文件时出错

    我的剧本中有这样的错误 为什么以及如何解决它 获取远程主机的更新列表 将列表连接到一个文件中 name Save update deb packs in file on ansible host copy content update de
  • 如何在 Ansible 中运行 MySQL 查询

    我需要编写一个 Ansible 脚本来在 MySQL 数据库中执行 SQL 查询 这是我尝试过的 你能指导一下吗 hosts localhost tasks name retrive data command mysql u root h
  • 使用 ansible 处理程序滚动重启

    我想运行一个 ansible playbook 它会安装一个服务 如果自上次运行以来发生任何更改 或多或少是 ansible 处理程序的规范用例 则重新启动它 但我想要一个不同的并行性用于安装而不是重新启动 我想一次在所有主机上安装 但是
  • Ansible 输出格式选项

    是否有一个选项可以使用 ansible 而不是任何其他脚本 来格式化 ansible 输出 例如 name Show version sudo true hosts web front end tasks name Create yum c
  • 在特定主机组上运行 ansible

    我正在尝试使用以下命令运行 ansible ansible playbook provision yml l webserver 我的主机文件包含以下主机组 webclient 172 29 4 75 webserver 172 29 4
  • Ansible - 如何使用项目循环命令,直到注册的变量相等?

    我正在尝试查找文件在过去 15 秒内是否有任何写入操作 name Check File for Writes shell tail n 50 path to some file sha1sum loop 1 2 register file
  • Ansible:使用变量定义 playbook 主机

    我安装了以下版本 ansible 2 3 0 开发2131eaba0c 我想将我的主机变量指定为外部变量 然后在playbook与此类似 hosts integration In my 组变量 全部文件我有以下定义的变量 integrati
  • Ansible - 默认/显式标签

    我有一本剧本 其中包含并标记了各种角色 name base hosts host default localhost roles role apt tags base apt ubuntu role homebrew tags base h
  • 在 sudo 用户下应用角色

    是否可以在 Ansible 中应用 sudo 等特定角色 具体来说 这些是从 ansible galaxy 获取的角色 因此来源不在我的控制范围内 这个例子 https raymii org s tutorials Ansible Bett
  • 'extra_vars' 可以接收多个文件吗?

    根据 Ansible 文档在运行时定义变量 https docs ansible com ansible latest user guide playbooks variables html defining variables at ru
  • Ansible:如何为Solaris设置全局路径

    我正在编写 Ansible 剧本来在 Solaris 服务器上设置和安装我们的应用程序 问题是我需要执行的 bash 脚本都假设某个目录位于 PATH 上 即 data bin 如果 Ansible 没有忽略所有这些 这通常不会成为问题 p
  • 在远程 playbook 中运行 ansible 本地任务

    我试图让这个任务在本地运行 在运行剧本的机器上 name get the local repo s branch name local action git branch awk print 2 register branchName 我尝
  • 如何在 Ansible 中制作幂等 shell

    我正在使用 Ansible 在尝试使 shell 执行幂等时遇到一些问题 我做的第一件事是安装python apt 包因为我需要它来使用 apt 模块来安装其他软件包 但每次我运行我的playbookshell 任务始终运行 我想使其幂等
  • 如何使用 Ansible 设置环境变量

    我需要设置变量 例如JAVA HOME并更新PATH 有多种方法可以做到这一点 一种方法是更新 etc environment变量并包含一行JAVA HOME使用文件行 http docs ansible com ansible linei
  • Ansible 条带空白

    当我尝试在 nxos 设备上运行某些命令时 输出末尾有一个空格 我必须将输出与现有变量列表进行比较 末尾的空格导致比较错误 如何在字符串列表中使用 strip 函数 name Current TACACS server host befor
  • 将变量写入 Ansible 中的文件

    我通过 URI 模块提取 JSON 并希望将接收到的内容写入文件 我能够获取内容并将其输出到调试器 因此我知道已收到内容 但我不知道写入文件的最佳实践 来自的重要评论tmoschou https stackoverflow com user

随机推荐