版权声明:本文为黄海兵(haibing.org)原创文章,转载请附上本文链接。
本文永久链接:http://haibing.org/699

以前一直使用ansible1.9的版本,最近升级到2.8版本了,发现有挺多问题的。

1、没有了-S -R参数
以前要使用su切换的话,使用-S -R就可以切换

#ansible test -S -R root -m shell -a 'ls'

升级到2.8之后,可以使用如下命令:
一是指定用户

#ansible test --become-user=root -m shell -a 'ls'

一是指定方法

#ansible test --become-method=su -m shell -a 'ls'

转载本站文章请注明出处:黄海兵haibing.org

2、对客户端的Python版本的要求
ansible升级到2.8之后,执行ansible命令时,一些远程服务器会返回错误:

#ansible test -m shell -a 'ls'
172.28.x.x | FAILED! => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "module_stderr": "Shared connection to 172.28.x.x closed.\r\n",
    "module_stdout": "  File \"/tmp/.ansible/ansible-tmp-1559785199.8916569-71635849890810/AnsiballZ_command.py\", line 40\r\n    with open(module, 'wb') as f:\r\n            ^\r\nSyntaxError: invalid syntax\r\n",
    "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
    "rc": 1
}

这是因为远程服务器的Python版本小于2.6。
转载本站文章请注明出处:黄海兵haibing.org

解决办法有两个:
一是升级服务器的Python,可使用ansible的raw模块来进行升级Python的操作,raw不依赖于Python。
二是降低ansible的版本,ansible版本只要低于2.4即可正常使用。(推荐使用)
卸载ansible:

#pip uninstall ansible

安装低于2.4的版本:

#pip install ansible==2.3.3.0