Ansible 将变量传递给角色

2024-03-17

我想根据环境和主机名创建文件夹、用户和组。

我的剧本将环境和主机名传递给角色,该角色应该从 defaults/main.yml 文件中选择正确的数据。

剧本:

roles:
- { role: myrole, environment: 'xxx', hostname: 'yyy' }

myrole/任务/main.yml

- name: add the group
  group: name={{ item }} state=present
  with_items: "{{ environment }}_{{ hostname }}_groups"

myrole/defaults/main.yml

xxx_yyy_groups: [ '1', '2', '3', ]

但是,当我将变量传递给我的角色时,它无法使用 defaults/main.yml 文件,并且出现以下错误:

任务 [internal/groups_users_folders :添加组] ******************************

失败的! => {"failed": true, "msg": "环境必须是字典, 收到 xxx ()"}

为什么 Ansible 无法再访问默认文件夹中的变量? 或者有更优雅的方式吗?

edit:

显然 Ansible 不喜欢将变量称为“环境”,并且我无法像这样将 with_items 变量粘合在一起。

- name: set groups variable
  set_fact:
    groups: "{{ env }}_{{ hostname }}_groups" 

- name: add groups
  group: name={{ item }} state=present
  with_items: "{{ groups }}"

似乎适用于数组,如果我使用哈希并想要使用 item.xxx 访问变量,则会返回此错误:

失败的! => {"failed": true, "msg": "字段 'args' 有一个无效的 value,其中似乎包含未定义的变量。这 错误是:“unicode object”没有属性“name”\n\n错误 似乎已经在 '.../tasks/main.yml': 第 25 行第 3 列,但\n可能位于文件中的其他位置,具体取决于 确切的语法问题。\n\n有问题的行似乎是:\n\n\n- 名称:添加用户\n ^ 此处\n"}


您使用 with_items 的方式有点错误with_items: "{{ env }}_{{ hostname }}_groups"。 事实上,您传递字符串“xxx_yyy_groups”,但您需要将其作为变量名传递。

我做了一些研究,看起来不可能以这种方式做到这一点。您要么需要像您一样使用事实,要么加载带有变量的文件(例如{{ env }}_{{ hostname }}.yml)。 实际上,它通常是人们处理环境和默认操作系统系列的不同任务和变量的方式。

我希望这有帮助!

UPD你也可以看看这个答案:Ansible:如何从另一个变量构造一个变量,然后获取它的值 https://stackoverflow.com/questions/29276198/ansible-how-to-construct-a-variable-from-another-variable-and-then-fetch-its-v获得一些细节/想法

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

Ansible 将变量传递给角色 的相关文章

随机推荐

  • 安卓中的adb是什么?

    当我尝试运行 Android 程序时 出现以下错误 请解释一下到底是什么adb是的 如何重新启动呢 我收到以下错误 The connection to adb is down and a severe error has occured Y
  • 为什么 Android 上的 onCallStateChanged() 在一次调用中会被多次调用?

    我想实现一个像防火墙一样阻止呼叫的应用程序 当我调试我的应用程序时 我发现当有电话进来时 onCallStateChanged 界面中的函数电话状态监听器被调用 3 次 因此 阻止一个调用可能会导致三个日志 我很困惑 my code Ove
  • PLSQL 触发器通过 SQL 加载器触发

    当我们通过 SQL 加载器插入时 表会被触发吗 请详细解释一下 Oracle 将执行INSERT如果使用常规负载则触发 但是当你使用直接负载时不是 http docs oracle com cd E11882 01 server 112 e
  • 确定 django 中的属性是否为“DeferredAttribute”

    上下文 我在 Django Cache Machine 中发现了一个相当严重的错误 导致其失效逻辑在从 Django 1 4 升级到 1 7 后失去理智 该错误仅限于调用only 在扩展缓存机器的模型上CachingMixin 它会导致深度
  • 如何剪切csv的列

    我有一组 csv 文件 大约 250 个 每个文件有 300 到 500 条记录 我需要从每个文件中剪切 2 或 3 列并将其存储到另一个文件中 我在用着操作系统 有什么办法可以在命令或实用程序中做到这一点吗 如果您知道字段内没有出现列分隔
  • 使用 1xx 响应通过 HTTP 报告进度

    问题 通过 HTTP 提供进度信息 我正在编写一个应用程序 我想为长时间运行的请求提供进度信息 我希望客户端能够报告进度 例如完成百分比 并向用户发送消息 HTTP 1xx 响应 我的目的是在最终 HTTP 响应之前使用 HTTP 1xx
  • 如何在 Gnome 终端中对 Python 错误的输出进行着色?

    注意 我在研究如何实际做到这一点后提出这个问题 其他有点相似但实际上与我的问题不同的问题涉及 颜色编码withinpython脚本 导入颜色库within剧本 使用类似的工具Solarized改进工具 例如Vim对 python 代码进行颜
  • Python unittest:如何临时将标准输出消息重定向到缓冲区并测试其内容?

    我想捕获发送到的消息stdout our stderr 在测试期间暂时断言这些消息中是否出现某些字符串模式 import unittest class SomeTest unittest TestCase def test stdout s
  • Tomcat 6 堆大小 - 这是正确的吗?

    我在 Red Hat 机器上运行多个 tomcat 我想为每个 tomcat 配置单独的堆大小 某些实例使用更多内存 我可以在 catalina sh 文件中输入以下内容来设置堆大小最小 最大 bt CATALINA OPTS Xms64m
  • WPF 将控件可见性绑定到另一个控件的聚焦属性

    我有一个显示项目列表的组合框 我想在它旁边放置一个按钮来触发命令以查看所选项目的详细信息 到目前为止 一切都很好 现在我希望该按钮仅在组合框具有焦点时才可见 或处于 编辑 模式 但不仅在弹出窗口打开时 我想我可以将按钮的可见性绑定到组合框的
  • 命令“git checkout”的含义。 [复制]

    这个问题在这里已经有答案了 虽然我知道标题中的命令类似于撤消对当前存储库的更改 但我无法理解它的实际工作原理或如何读取该命令 任何线索都会有很大的帮助 git 结账
  • Python 中的参数解析(必需与可选)

    我目前正在编写一个能够采用多个标志的脚本 我希望它无论最后一个参数是什么都应该是 start stop status usr bin env python from argparse import ArgumentParser def ar
  • Oracle 11g - FOR 循环仅将工作日插入表中?

    我想将一些数据插入与明年日期相关的表中 实际上我只需要插入工作日 BEGIN FOR i IN 1 365 LOOP INSERT INTO MY TABLE ID MY DATE VALUES i to date sysdate DD M
  • 如何以Python方式获取numpy argwhere函数的最大值

    我想使用 numpy argwhere 来查找数据中的最大值在哪里 下面是一个示例集 描述了我正在做的事情 bins np arange 10 data np array 6 4 8 5 np argwhere bins
  • 有没有办法加快 python 中处理大型 CSV 和数据帧的速度?

    我正在处理一些大小在 1Gb 到 2Gb 范围内的 CSV 文件 仅将文件加载到 pandas 数据帧中就需要 20 30 分钟 而我执行的每个操作则需要 20 30 分钟 例如按列名称过滤数据帧 打印 dataframe head 等 有
  • Hibernate从数据库生成ID函数

    我的代码是 Id GenericGenerator name generator strategy increment GeneratedValue generator generator Column name PM ID nullabl
  • 我可以将 struts.xml 文件更改为其他文件吗?

    当我研究 struts2 时 我遇到了一个典型的问题 问题是我可以改名字吗struts xml文件到其他东西并使其工作 您可以使用您的web xml
  • 在 Windows 7 32 位 SP1 上安装 Python 3.8

    我无法在 Windows 7 32 位 SP1 上安装 Python 3 8 错误日志显示detected windows 7 sp1 without kb2533625我一整天都在搜索这个更新 但没有找到任何帮助 我认为这是 Python
  • “沟通”扩展中的内容js和后台js文件

    我正在编写扩展程序 遇到一个问题 我无法将数据从扩展程序菜单发送到content js 在扩展菜单中 我有一些直觉 填写并单击按钮后 我写下它们的值 我想将它们发送到content js该数据将用于实施html但由于某种原因 数据没有发送
  • Ansible 将变量传递给角色

    我想根据环境和主机名创建文件夹 用户和组 我的剧本将环境和主机名传递给角色 该角色应该从 defaults main yml 文件中选择正确的数据 剧本 roles role myrole environment xxx hostname