当前位置: 首页 > 知识库问答 >
问题:

将变量传递给角色的Ansible

琴镜
2023-03-14
roles:
- { role: myrole, environment: 'xxx', hostname: 'yyy' }

myrole/tasks/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文件,并且得到以下错误:

- 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'具有无效值,该值似乎包含未定义的变量。错误是:'Unicode Object'没有属性'name'\n\n错误似乎出现在'.../tasks/main.yml':第25行,第3列,但可能\n在文件的其他地方,这取决于确切的语法问题。\n\n出错的行似乎是:\n\n\n\n\n:添加用户\n^在这里\n”}

共有1个答案

史承福
2023-03-14

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

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

我希望这能帮上忙!

 类似资料:
  • 问题内容: 我有Google地图提供的JavaScript值,需要将其保存在MySQL数据库中。 其实我有变量 我需要将该变量传递给PHP变量lugar 问题答案: 如果要在页面转换时进行操作,则可以通过表单或在URL中传递它,然后仅使用或接收变量。 如果您需要无缝完成它,那么您可能需要考虑使用AJAX。

  • 问题内容: 我有一个PHP会话变量,在整个会话过程中仍然有效。在开头部分,我包含了我的JavaScript文件。 如果需要以下内容,如何将会话变量传递到JavaScript文件中。 由于无法在JavaScript文件中识别出,因此上面的代码不起作用。因此,我必须放入PHP文件本身,但是如何将其保留在JavaScript文件中? 问题答案: 在您的PHP文件中,您可以将用户设置为全局变量: 在包含外

  • 问题内容: 如果我有一个指令,我可以这样调用它 我该如何访问?我在函数中使用时会得到实际的字符串。当我检查html时,实际上说。 问题答案: 尝试 然后 演示:柱塞

  • 问题内容: 我对此完全迷失了;我正在使用NodeJS来获取JSON,我需要将变量传递给我的页面并让JavaScript使用数据。 那就是我的Express代码(出于测试目的非常简单);现在使用EJS,我想收集这些我知道要呈现在页面上的数据, 但是我需要能够在JavaScript中收集这些数据(如果可能在.js文件中),但现在只是在我尝试过的“警告”框中显示变量 在翡翠中就像或。我可以在EJS中做类

  • 问题内容: 我有类似下面的代码: 但是,该变量未在ActionListener类的范围内定义。如何传递变量? 问题答案: 除了Hovercraft的答案外,您还应注意,您不会被迫对侦听器使用匿名类。气垫船的答案代码类似于以下代码:

  • 问题内容: 如何在不刷新页面的情况下将变量从jQuery传递到PHP?当我单击一个复选框时,我想将一个变量从jQuery传递到PHP。我也在使用formdialog。 我的PHP代码 我的JavaScript代码 问题答案: Ajax可以做到这一点。谷歌它,并检查api.jquery.com并查看ajax函数,.ajax(),.post(),.get(),.load()等。 关于您的特定问题,这是