如何在没有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目标也支持此模块。