Ansible 注册变量不会在任务中持久化

Ale*_*x M 3 ansible ansible-playbook

我正在尝试使用 ansible 检查是否有任何 aerospike 迁移发生,然后在迁移达到 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 }}"
Run Code Online (Sandbox Code Playgroud)

这是输出:

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!"
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么调试变量清楚地显示正确的标准输出,而 as_migrats.stdout 显示“Hello World”?我知道“Hello World”是消息模块的默认消息。那么寄存器不是从一项任务持续到另一项任务吗?我觉得我错过了一些明显的东西。我的 ansible 环境中没有另一个名为“as_migrates”的变量。

hel*_*loV 5

Ansible 对“空间”敏感 :-) 后面不能有空格 msg

尝试这个:

  - debug: msg="{{ as_migrates.stdout }}"
  - debug: msg="{{ as_migrates.stdout_lines }}"
  - debug: msg="{{ as_migrates }}"
Run Code Online (Sandbox Code Playgroud)