我正在运行一个使用 route53 模块的Ansible playbook并收到错误消息,说我需要安装'boto':
TASK [dns : Retrieve DNS record] ***********************************************
fatal: [10.13.25.12]: FAILED! => {"changed": false, "failed": true, "msg": "boto required for this module"}
我的Ansible机器上安装了'boto' .
Question: Do all Ansible modules cited in Playbook tasks actually run on the remote host machine?
我添加了安装'python-pip'和'boto'的任务,但似乎boto应该在我的Ansible服务器上运行 . 我觉得我在这里做错了什么 .
以下是我在远程主机上安装pip / boto的任务,这导致在运行route53模块时不会出现更多错误:
- name: Install Pip
apt: name=python-pip state=present
- name: Install boto
pip: name=boto
2 回答
模块远程执行 . 虽然这只是事实的一半 . 许多模块都带有动作插件 . 这些操作插件在本地运行并稍后调用其模块组件(或其他模块) .
例如,
template
模块实际上是一个动作插件,它在本地呈现模板,然后调用复制模块 .遗憾的是,如果不查看源代码,您无法知道什么是模块以及什么是动作插件 . 文档甚至没有提到动作插件确实存在...
你可以找到所有核心动作插件here . 正如您所看到的,没有route53插件,因此这确实是一个模块,因此可以远程运行 .
为什么你在安装boto后仍然得到这个错误我无法解释 . 我只能建议你look at the source并尝试在没有Ansible的情况下重现问题 .
这几个import语句在远程计算机上运行时没有错误 .
Udondan's answer介绍了一些模块如何具有本地组件以及远程操作,但对于一般用途,您需要知道的是,对于与远程服务(例如所有cloud modules)交互的这些模块而不是远程主机最好将这些作为local action运行,以强制Ansible在本地运行模块,而不是在playbook /角色当前所针对的远程主机上运行 .
您可以在任务定义中使用
local_action
轻松完成此操作,如下所示: