【发布时间】:2018-06-18 20:39:24
【问题描述】:
我有一个像下面这样的简单剧本,其中包含一些任务。在剧本之上,我正在从提供的 CSV 文件创建 YAML 文件,但是如果我想在任务中定义一个变量,则该变量不会在另一个任务中定义。那么 Ansible 变量的可见性或/和范围是什么?我知道如果我在主机部分中定义变量,该变量将在所有任务中持续存在,但是由于我将动态定义变量,这不是一个好方法。
- name: Create IAM users
vars:
password: Sometestpassword123
iam:
iam_type: user
name: "{{ item.username }}"
password: "{{ password }}"
access_key_state: create
state: present
groups: "{{ item.group }}"
with_items:
- "{{ users.users }}"
register: user
- name: Create a file with user credentials
local_action: template src=template.j2 dest=./users_credentials.csv
所以,如果我在任务中定义密码,这个变量被用作模块参数,但我不能在第二个任务中重用这个变量,我想在注册的第一个任务过滤输出中连接变量与定义的变量,将在循环的每次迭代中动态改变。
TASK [Create a file with user credentials] *********************************************************************************************************************************************************************
fatal: [localhost -> localhost]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'password' is undefined"}
基本上,我想创建一个 CSV 文件,该文件由保存在注册变量“用户”中的过滤后的 iam 模块返回值和“密码”变量的动态计算值组成。
很遗憾,AWS iam 模块不返回密码。
模板非常简单,出于测试目的,我只需要任务中定义的“密码”值的值。就这样吧。
{{ password }}
【问题讨论】:
-
@techraf 没错。我应该编辑问题。
-
现在答案是“你不能”。
-
为什么这样做而不是
set_fact?
标签: ansible