Ansible模块是在本地运行还是在远程主机上运行?

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

我正在运行一个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 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上运行。回答得很好。因为他的回答更直接地回答了问题,所以给了它一个向上投票而不是“接受”,但你的回答也很有帮助。