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

时间:2016-05-06 18:18:35

标签: ansible

我正在运行使用 route53 模块的Ansible剧本,并收到错误消息,说明我需要' boto'安装:

TRISB &= ~(1 << 3); //Clear bit RB3/CCP1 in TRISB, makes PORTB3/CCP1 output.

我确实有&#39; boto&#39;安装在我的Ansible机器上。

问题:Playbook任务中引用的所有Ansible模块是否实际都在远程主机上运行?

我添加了安装&#39; python-pip&#39;并且&#39; boto&#39;,但似乎boto应该在我的Ansible服务器上运行。我觉得我在这里做错了什么。

以下是我在远程主机上安装pip / boto的任务,这导致在运行route53模块时不会出现更多错误:

CCPMX: CCP1 Pin Selection bit

2 个答案:

答案 0 :(得分:6)

远程执行模块。虽然这只是事实的一半。许多模块都带有动作插件。这些操作插件在本地运行并稍后调用其模块组件(或其他模块)。

例如,template模块实际上是一个动作插件,它在本地呈现模板,然后调用复制模块。

不幸的是,如果不查看源代码,您无法知道什么是模块以及什么是动作插件。文档甚至没有提到动作插件确实存在......

您可以找到所有核心动作插件here。正如您所看到的,没有route53插件,所以这确实是一个模块,因此可以远程运行。

为什么在安装boto后仍然会出现此错误我无法解释。我只能建议你look at the source并尝试在没有Ansible的情况下重现问题。

这些导入语句在远程计算机上运行时没有错误。

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

答案 1 :(得分:5)

Udondan's answer涵盖了一些模块如何具有本地组件以及远程操作,但对于一般用途,您需要知道的是,对于与远程服务交互的这些模块(例如所有{{}} 3}}}而不是远程主机,最好将这些作为cloud modules运行,以强制Ansible在本地运行模块,而不是在playbook /角色当前所针对的远程主机上运行。

您可以在任务定义中使用local_action轻松完成此操作:

- name: Retrieve DNS record
  local_action:
    module: route53_facts
    query: record_sets
    hosted_zone_id: '{{ route53_hosted_zone_id }}'
    ...
  register: dns_records