我正在运行一个使用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"}
Run Code Online (Sandbox Code Playgroud)
我的Ansible机器上安装了'boto'.
问题:Playbook任务中引用的所有Ansible模块是否实际都在远程主机上运行?
我添加了安装'python-pip'和'boto'的任务,但似乎boto应该在我的Ansible服务器上运行.我觉得我在这里做错了什么.
以下是我在远程主机上安装pip/boto的任务,这导致在运行route53模块时不会出现更多错误:
- name: Install Pip
apt: name=python-pip state=present
- name: Install boto
pip: name=boto
Run Code Online (Sandbox Code Playgroud)
模块远程执行.虽然这只是事实的一半.许多模块都带有动作插件.这些操作插件在本地运行并稍后调用其模块组件(或其他模块).
例如,template模块实际上是一个动作插件,它在本地呈现模板,然后调用复制模块.
遗憾的是,如果不查看源代码,您无法知道什么是模块以及什么是动作插件.文档甚至没有提到动作插件确实存在...
你可以在这里找到所有核心动作插件.正如您所看到的,没有route53插件,因此这确实是一个模块,因此可以远程运行.
为什么你在安装boto后仍然得到这个错误我无法解释.我只能建议你查看源代码并尝试在没有Ansible的情况下重现问题.
这几个import语句在远程计算机上运行时没有错误.
import boto
import boto.ec2
from boto import route53
from boto.route53 import Route53Connection
from boto.route53.record import Record, ResourceRecordSets
from boto.route53.status import Status
Run Code Online (Sandbox Code Playgroud)
Udondan的答案涵盖了某些模块如何具有本地组件以及远程操作,但是对于一般用途,您需要知道的是对于与远程服务(例如所有云模块)而非远程主机进行交互的这些模块您最好将它们作为本地操作来强制Ansible在本地运行模块,而不是在当前剧本/角色定位的远程主机上运行。
您可以通过local_action在任务定义中使用如下代码轻松地做到这一点:
- name: Retrieve DNS record
local_action:
module: route53_facts
query: record_sets
hosted_zone_id: '{{ route53_hosted_zone_id }}'
...
register: dns_records
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2040 次 |
| 最近记录: |