Ank*_*rni 4 python jinja2 ansible ansible-playbook
所以我有一种情况,我正在使用ansible在机器上执行shell命令以获取一些有关标准输出的信息。我正在register
将其结果记录到变量中my_info
并my_info
使用print 进行打印debug
,我看到其结果\n
附加了它(Ansible已附加\ n。Linux上的同一命令不附加\ n“)。当我在my_info
in模板中使用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)
我们如何从这个输出中删除空格或可能改变模板,以便不打印新行。
在raw_module的文档中,它要求仅在特定情况下使用它:
执行低级且脏的SSH命令,而不通过模块子系统。这很有用,只应在两种情况下进行。第一种情况是将其安装
python-simplejson
在较旧的(Python 2.4及更低版本)主机上,因为它需要依赖于运行模块,因为几乎所有核心模块都需要它。另一个人正在与没有安装任何Python的任何设备(例如路由器)说话。在任何其他情况下,使用shell
或command
模块更为合适。赋予raw的参数直接通过配置的远程Shell运行。
因此,我使用raw
和shell
模块测试了简单的回显调用:
- 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)
并且,您可以看到输出的差异。
您可以使用Jinja2的内置过滤器来实现此目的。具体来说,请使用trim
,例如:
- debug: msg='{{ my_info.stdout | trim}}'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5261 次 |
最近记录: |