如何在没有Python的情况下使用Ansible托管节点
时间:2020-01-09 10:34:03 来源:igfitidea点击:
如果我们还记得在实验室环境设置的前提条件,我已经提到,Python是一个强制性的前提条件,能够与Ansible一起工作。
现在不一定,但我们确实有一个解决方法,可以在没有Python的情况下使用Ansible托管节点。
在本演示中,我从"server2"中删除了python,现在我尝试从这个托管节点收集"正常运行时间":
[ansible@controller ~]$ ansible server2 -m shell -a uptime [WARNING]: No python interpreters found for host server2 (tried ['/usr/bin/python', 'python3.7', 'python3.6', 'python3.5', 'python2.7', 'python2.6', '/usr/libexec/platform-python', '/usr/bin/python3', 'python']) server2 | FAILED! => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "module_stderr": "Shared connection to server2 closed.\r\n", "module_stdout": "/bin/sh: /usr/bin/python: No such file or directory\r\n", "msg": "The module failed to execute correctly, you probably need to set the interpreter.\nSee stdout/stderr for the exact error", "rc": 127 }
正如预期的那样,命令执行失败,因为它"找不到有效的解释器"。要"克服这些挑战",可以使用"raw"模块:
例如,这里我们使用"raw"模块来获取远程托管节点的正常运行时间:
[ansible@controller ~]$ ansible server2 -m raw -a uptime server2 | CHANGED | rc=0 >> 07:14:38 up 1:50, 2 users, load average: 0.00, 0.00, 0.00 Shared connection to server2 closed.
但是,我们学习到的python模块的现有语法对于原始模块"不起作用"。
根据原始模块的官方ansible文件:
执行一个低级且脏的SSH命令,而不是通过模块子系统。
这是有用的,只应在少数情况下进行。一种常见的情况是在没有默认安装python的系统上安装python。另一种是与任何设备(如没有安装任何Python的路由器)通信。在任何其他情况下,使用shell或者命令模块都更合适。
给定给"raw"的参数直接通过配置的远程shell运行。
如果可用,则返回标准输出、错误输出和返回代码。
此模块不支持"handler"更改。
这个模块不需要在远程系统上使用python,就像脚本模块一样。
Windows目标也支持此模块。