gpt4 book ai didi

Ansible 将变量传递给角色

转载 作者:行者123 更新时间:2023-12-02 01:20:42 24 4
gpt4 key购买 nike

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

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

剧本:

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 文件,并且出现以下错误:

TASK [internal/groups_users_folders : add the group] ******************************

FAILED! => {"failed": true, "msg": "environment must be a dictionary, received xxx ()"}

为什么 Ansible 无法再访问 defaults 文件夹中的变量?还是有更优雅的方式?

编辑:

显然 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! => {"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'unicode object' has no attribute 'name'\n\nThe error appears to have been in '.../tasks/main.yml': line 25, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: add users\n ^ here\n"}

最佳答案

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

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

希望对您有所帮助!

UPD 你也可以看看这个答案:Ansible: how to construct a variable from another variable and then fetch it's value获得一些细节/想法

关于Ansible 将变量传递给角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40404837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com