我正在尝试使用ansible检查是否发生了任何空中飞行迁移,然后在迁移达到0时运行任务。为此,我使用ansible shell模块将总迁移数输出到stdout,用ansible注册该输出,并对其进行ansible测试。
Ansible似乎正在正确录制输出,但它会不断地将标准输出显示为" Hello World"
这是我的测试手册:
---
- hosts:
- foo
- bar
serial: 1
gather_facts: no
tasks:
- name: check for migrates
shell: "echo 10"
register: as_migrates
- debug: var=as_migrates
- debug: msg = "{{ as_migrates.stdout }}"
- debug: msg = "{{ as_migrates.stdout_lines }}"
- debug: msg = "{{ as_migrates }}"
这是输出:
PLAY [foo;bar] ******************************************************
TASK: [check for migrates] ****************************************************
changed: [foo-10]
TASK: [debug var=as_migrates] *************************************************
ok: [foo-10] => {
"var": {
"as_migrates": {
"changed": true,
"cmd": "echo 10",
"delta": "0:00:00.001367",
"end": "2016-01-26 23:19:20.586245",
"invocation": {
"module_args": "echo 10",
"module_complex_args": {},
"module_name": "shell"
},
"rc": 0,
"start": "2016-01-26 23:19:20.584878",
"stderr": "",
"stdout": "10",
"stdout_lines": [
"10"
],
"warnings": []
}
}
}
TASK: [debug msg = "{{ as_migrates.stdout }}"] ********************************
ok: [foo-10] => {
"msg": "Hello world!"
}
TASK: [debug msg = "{{ as_migrates.stdout_lines }}"] **************************
ok: [foo-10] => {
"msg": "Hello world!"
}
TASK: [debug msg = "{{ as_migrates }}"] ***************************************
ok: [foo-10] => {
"msg": "Hello world!"
}
我的问题是:为什么debug var清楚地显示正确的标准输出和as_migrats.stdout显示" Hello World" ?? 我知道" Hello World"是消息模块的默认消息。那么寄存器不能从一个任务持续到另一个任务吗?我觉得我错过了一些明显的东西。我没有另一个名为" as_migrates"的变量。在我的ansible环境中。
答案 0 :(得分:4)
Ansible是" space"敏感:-) msg
试试这个:
- debug: msg="{{ as_migrates.stdout }}"
- debug: msg="{{ as_migrates.stdout_lines }}"
- debug: msg="{{ as_migrates }}"