如何通过ansible从shell命令的标准输出中删除换行符

Ank*_*rni 4 python jinja2 ansible ansible-playbook

所以我有一种情况,我正在使用ansible在机器上执行shell命令以获取一些有关标准输出的信息。我正在register将其结果记录到变量中my_infomy_info使用print 进行打印debug,我看到其结果\n附加了它(Ansible已附加\ n。Linux上的同一命令不附加\ n“)。当我在my_infoin模板中使用config它在config中打印新行,从而弄乱了我的config。

这是代码和输出的方式。

验证码:

- name: calculate range address start
  raw:  grep 'CONFIG_PARAMS' /path/to/the/file | head -n 1
  register: my_info
Run Code Online (Sandbox Code Playgroud)

输出:

ok: [My_HOST] => {
    "msg": "CONFIG_PARAMS\n"
}
Run Code Online (Sandbox Code Playgroud)

我们如何从这个输出中删除空格或可能改变模板,以便不打印新行。

AKS*_*AKS 6

raw_module的文档中,它要求仅在特定情况下使用它:

执行低级且脏的SSH命令,而不通过模块子系统。这很有用,只应在两种情况下进行。第一种情况是将其安装python-simplejson在较旧的(Python 2.4及更低版本)主机上,因为它需要依赖于运行模块,因为几乎所有核心​​模块都需要它。另一个人正在与没有安装任何Python的任何设备(例如路由器)说话。在任何其他情况下,使用shellcommand模块更为合适。赋予raw的参数直接通过配置的远程Shell运行。

因此,我使用rawshell模块测试了简单的回显调用:

- name: System setup
  hosts: 127.0.0.1
  connection: local

  tasks:
    - name: simple print hello
      raw:  echo 'hello'
      register: my_info

    - debug:
        msg: '{{ my_info.stdout }}'
Run Code Online (Sandbox Code Playgroud)

然后输出新行:

TASK: [debug ]    **************************************************************** 
ok: [127.0.0.1] => {
    "msg": "hello\n"
}
Run Code Online (Sandbox Code Playgroud)

并通过使用shell模块:

- name: System setup
  hosts: 127.0.0.1
  connection: local

  tasks:
    - name: simple print hello
      action:  shell echo 'hello'
      register: my_info

    - debug:
        msg: '{{ my_info.stdout }}'
Run Code Online (Sandbox Code Playgroud)

结果是:

TASK: [debug ]    **************************************************************** 
ok: [127.0.0.1] => {
    "msg": "hello"
}
Run Code Online (Sandbox Code Playgroud)

并且,您可以看到输出的差异。


Tod*_*wen 6

您可以使用Jinja2的内置过滤器来实现此目的。具体来说,请使用trim,例如:

- debug: msg='{{ my_info.stdout | trim}}'
Run Code Online (Sandbox Code Playgroud)