Ansible模块是在本地运行还是在远程主机上运行?
我正在运行一个Ansible playbook,该playbook使用了路由53模块,并收到一个错误,说我需要安装“boto”:Ansible模块是在本地运行还是在远程主机上运行?,ansible,Ansible,我正在运行一个Ansible playbook,该playbook使用了路由53模块,并收到一个错误,说我需要安装“boto”: TASK [dns : Retrieve DNS record] *********************************************** fatal: [10.13.25.12]: FAILED! => {"changed": false, "failed": true, "msg": "boto required for this mo
TASK [dns : Retrieve DNS record] ***********************************************
fatal: [10.13.25.12]: FAILED! => {"changed": false, "failed": true, "msg": "boto required for this module"}
我的Ansible机器上确实安装了“boto”
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
问题:Playbook任务中引用的所有Ansible模块是否都在远程主机上运行?
我添加了安装“pythonpip”和“boto”的任务,但似乎boto应该在我的Ansible服务器上运行。我觉得我在这里做错了什么
以下是我在远程主机上安装pip/boto的任务,这些任务不会导致route53模块运行中出现更多错误:
- name: Install Pip
apt: name=python-pip state=present
- name: Install boto
pip: name=boto
模块是远程执行的。虽然这只是事实的一半。许多模块都带有动作插件。这些操作插件在本地运行,稍后调用其模块组件(或其他模块) 例如,
模板
模块实际上是一个动作插件,它在本地呈现模板,然后调用复制模块
不幸的是,如果不查看源代码,您就无法知道什么是模块,什么是动作插件。文档甚至没有提到动作插件确实存在
你可以找到所有的核心动作插件。正如您所见,没有route53插件,因此这实际上是一个模块,因此可以远程运行
我无法解释为什么在安装boto后仍然出现此错误。我只能建议你,不负责任地再现问题
这几个导入语句在远程计算机上运行时不会没有错误
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
介绍一些模块如何具有本地组件和远程操作,但对于一般用途,您需要知道的是,对于这些与远程服务交互的模块(例如所有您最好将其作为一个服务器运行,以强制Ansible在本地运行模块,而不是在playbook/角色当前针对的远程主机上运行模块,而不是在远程主机上运行
通过在任务定义中使用local\u action
,您可以轻松做到这一点,如下所示:
- name: Retrieve DNS record
local_action:
module: route53_facts
query: record_sets
hosted_zone_id: '{{ route53_hosted_zone_id }}'
...
register: dns_records
我可能说错话了。现在我在远程机器上运行这些任务来安装pip和两者,一切都很好。这是有关远程/本地执行的有趣信息。虽然我想还有一层需要注意的复杂性。你和@ydaetskcoR都有很好的答案,但我接受了这个答案,因为它更直接地解决了这个问题。尽管他的回答很好,因为它谈到了“如何”的问题。Ansible任务在(明确)指定的主机上运行;如果您指定了远程主机,它们将在远程主机上运行,但是如果您指定了localhost,它们将在localhost上运行。回答得很好。因为他的回答更直接地回答了问题,所以给了它一个向上投票而不是“接受”,但你的回答也很有帮助。