Ansible脚本模块可能在使用sudo时在stdout中添加前导换行符。为什么?

时间:2019-05-06 17:52:27

标签: ansible

我的脚本如下:

#!/bin/bash
if lscpu | grep 'CPU max MHz' >/dev/null 2>&1; then
        cpu_speed=$(lscpu | grep 'CPU max MHz' | cut -d':' -f2 | awk '{print $1}')
else
        cpu_speed=$(lscpu | grep 'CPU MHz' | cut -d':' -f2 | awk '{print $1}')
fi
echo -ne "${cpu_speed}"

它将在输出中添加换行符,如下所示:

"stdout": "\r\n4000.0000",

即使我的脚本文件为空,它仍会在stdout中添加换行符,如下所示:

"stdout": "\r\n"

我的模块如下:

- name: Get Processor Speed
  script: files/get_cpu_speed.sh
  register: cpu_speed_output
  become: yes

因此,如您所见,它确实是sudo。

如果ansible脚本命令中常见的换行符是常见的,但我没有尝试。

那么,在我看来,是什么导致领先优势?

调试输出如下:

ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=testuser -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/c4ee167dc2 -tt myserver1 '/bin/sh -c '"'"'sudo -H -S  -p "[sudo via ansible, key=epollvusfsfrfsfsfsfmrxdcida] password: " -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-epollvusfsfrfsfsfsfmrxdcida;  /home/testuser/.ansible/tmp/ansible-tmp-1557164925.73-152013190475693/get_cpu_speed.sh'"'"'"'"'"'"'"'"' && sleep 0'"'"''

1 个答案:

答案 0 :(得分:2)

我无法重现该行为。如果我完全按照显示的方式运行您的代码,则看不到任何前导换行符。无论如何,都有一个简单的解决方法。而不是参考:

cpu_speed_output.stdout

您可以参考:

cpu_speed_output.stdout.strip()

strip()方法将删除任何前导或尾随空格。