ansible打印调试msg变量


17

我尝试mosh_version使用如下所示的ansible debug msg命令打印先前注册的变量:

- name: Print mosh version
  debug: msg="Mosh Version: {{ mosh_version.stdout }}"

它不起作用,并显示以下错误:

Note: The error may actually appear before this position: line 55, column 27

- name: Print mosh version
  debug: msg="Mosh Version: {{ mosh_version.stdout }}"
                          ^
We could be wrong, but this one looks like it might be an issue with
missing quotes.  Always quote template expression brackets when they
start a value. For instance:

    with_items:
      - {{ foo }}

Should be written as:

    with_items:
      - "{{ foo }}"

我试过了

- name: Print mosh version
  debug: msg=Mosh Version: "{{ mosh_version.stdout }}"

但这只会打印“ Mosh”。

使其运行的最佳方法是什么?

Answers:


25

尝试这个:

- name: Print mosh version
  debug: "msg=Mosh Version: '{{ mosh_version.stdout }}'"

有关更多信息,请访问http://docs.ansible.com/YAMLSyntax.html#gotchas

编辑:这样的东西对我来说很完美:

- name: Check Ansible version
  command: ansible --version
  register: ansibleVersion

- name: Print version
  debug:
    msg: "Ansible Version: {{ ansibleVersion.stdout }}"

http://pastie.org/private/cgeqjucn3l5kxhkkyhtpta


没有更多的语法错误,但是也不起作用:TASK: [ Print mosh version] ************************************** ok: [127.0.0.1] => { "msg": "Mosh" }
Zulakis 2015年

首先尝试只打印变量,然后查看没有自定义消息的输出,如下所示:-名称:打印mosh版本调试:var = mosh_version.stdout_lines
Tom Aac 2015年

ok: [127.0.0.1] => { "var": { "mosh_version.stdout_lines": [ "mosh 1.2.4a [build mosh-1.2.4-57-g9eeb2fb]" ] } } 这行得通,我真的更喜欢自定义消息;-)
Zulakis 2015年

1
检查我更新的答案
Tom Aac

请注意:调试:“ msg = Mosh版本:'{{mosh_version.stdout}}'”将仅显示“ Mosh”。msg =“ ...”必须用引号引起来,而不是整个消息。但是来自@xddsg的答案效果更好,因为它是更详细的var dump。
Dalibor Filus 2015年

6

最简单的答案

- debug: var=mosh_version.stdout

1

只要去掉结肠

debug: msg="Mosh Version {{ mosh_version.stdout }}"

老实说,这不是一个完整的解决方案,但仍然可以解决我遇到的下一个问题。无法使用其他语法,因为我将其与一起使用,when因此删除冒号实际上是解决此问题的最简单方法。所以我
投票赞成

0

我用这个,注意双引号(“)和单引号(')的位置

- name: Print mosh version
  debug: "msg='Mosh Version: {{ mosh_version.stdout }}'"

0

每当我在Ansible字符串/ cmds中遇到特殊字符问题时,我都会这样做:

  1. 用单引号引起来
  2. 用双花括号包裹

因此,您的标准冒号变为 {{':'}}

您的任务将变为:

- debug: msg="Ansible Version{{':'}} {{ ansibleVersion.stdout }}"

再次适用于大多数特殊字符,甚至字符串。考虑以下:

docker ps --format '{{.Names}}'

为了在Ansible中运行此命令,只需应用相同的逻辑,以下任务将按预期执行:

- name: Get the docker container names
  become: yes
  shell: "docker ps --format '{{'{{'}}.Names{{'}}'}}'"
  register: docker_containers
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.