ansible - "msg": "该任务包含一个带有未定义变量的选项 - 打印一个步骤的输出
问题描述
所以我有一本用来终止用户的剧本:
---
- name: "Playbook: Terminate user"
hosts: localhost
gather_facts: True
roles:
- { role: common, tags: ['always'] }
- { role: ad_termination, tags: ['ad_termination', 'never'] }
- name: "Playbook: Terminate storage"
hosts: storage
gather_facts: False
roles:
- { role: storage_termination, tags: ['storage_termination', 'always'] }
- name: "Playbook: User environment"
hosts: localhost
gather_facts: False
roles:
- { role: common,
tags: ['always'],
}
- { role: send_summary_email,
tags: ['send_summary_email', 'always']
}
我使用以下命令调用它:
ansible-playbook userOperations/userTerminationPB.yml -t ad_termination -e "username=user"
. 然后它会遍历每个剧本(总共 3 个)。
前 2 个剧本(终止用户和终止存储)一切正常。我在传递第二个剧本 ( terminate storage
) 中的变量时遇到问题。
如您所见,hosts
为存储 playbook 配置的名为storage
. 它拥有几台服务器。
这是剧本本身:
- name: Logical block of home-storage tasks
block:
- name: Check if home folder exists
stat:
path: "{{ hostvars[inventory_hostname].fspath }}/{{ username }}"
register: home_dir_details
- name: Move user home folder to terminated home folder
command: mv {{ hostvars[inventory_hostname].fspath }}/{{ username }} "{{ hostvars[inventory_hostname].fspath }}/terminated/{{ username }}"
when: home_dir_details.stat.exists
register: storage_moved
- name: Printing and debugging
ansible.builtin.debug:
msg: "{{ storage_moved }}"
when:
- hostvars[inventory_hostname].fsname is search("home")
我正在尝试在电子邮件中总结所有内容。我的电子邮件是一个 jinja2 模板,我使用这些传递的变量对其进行编辑。
我的问题是当我{{ storage_moved }}
在我的 Jinja2 模板(发送电子邮件的第三本剧本)中使用时,它不被识别为变量。
I'm not sure what to change in order for it to be recognized. I simply use {{ storage_moved }}
in my template but it doesn't work.
It should print the following:
ok: [storage.server.com] => {
"msg": {
"changed": true,
"cmd": [
"mv",
"/path/user",
"/path/terminated/user"
],
"delta": "0:00:00.006022",
"end": "2021-10-19 16:13:03.468398",
"failed": false,
"rc": 0,
"start": "2021-10-19 16:13:03.462376",
"stderr": "",
"stderr_lines": [],
"stdout": "",
"stdout_lines": []
}
}
Any help would be appreciated. Currently I'm getting:
"msg": "The task includes an option with an undefined variable. The error was: 'storage_moved' is undefined
Edit:
I was able to access all the info in storage_moved
by using the following loop in my jinja2 tempalte:
{% for host in groups['storage'] %}
{{ hostvars[host]['storage_moved'] }}
{% endfor %}
解决方案
not tested, but you could add dummy host with var in the playbook where you defined your storage
- name: Register dummy host with variable
add_host:
name: "DUMMY_HOST"
STORAGE_NEW: "{{ storage_moved }}" #storage_moved.stdout
and in the other playbook you echo the variable:
tasks:
- name: Echo the output - storage_new var
shell: cat {{ hostvars['DUMMY_HOST']['STORAGE_NEW'] }} |tail -1
register: STORAGE_RESULT
推荐阅读
- r - 存储循环中的值
- php - 如何在 laravel 中与数据中心 ID 同步
- c# - 多次定义导入的类型`Newtonsoft.Json.Linq.JObject'
- python - 在Python中获取URL中最后两个斜杠位置之间的字符串
- r - 更改数据框中变量的值:≥16 为“1”,<16 为“0”?
- android - Android 资源链接失败 - 守护进程:AAPT2 aapt2-3.2.0-4818971-windows Daemon #0
- php - 试图居中 img 但没有常见的修复工作
- python - 如何在搜索中包含多个单词
- android - 支持使用 kotlin2js 将 Android Studio 应用程序中的 Kotlin 文件转换为 Javascript 所需的最小 Gradle 设置是什么?
- java - 为矩阵乘积的每个值创建一个线程比仅使用 1 个线程慢是否正常?