问题标签 [ansible-handlers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
53835 浏览

ansible - 如何在 Ansible 中执行任务之前强制处理程序运行?

我有一个应该在指定 IP 上配置的剧本,然后连接到这个应用程序来配置里面的东西。

我有一个问题:我在应用程序配置中更改了任何内容后需要重新启动应用程序,如果我不重新启动应用程序,则连接失败(没有连接,因为应用程序对具有新 IP 地址的新配置一无所知)我试图访问)。

我目前的剧本:

configure_app如果在执行“更改应用程序中的数据”之前发生更改,我需要强制处理程序运行。

0 投票
1 回答
1532 浏览

ansible - 使用 group_by 时,Ansible 不会看到处理程序

我曾经有一个简单的剧本(类似这样的东西),我在我的所有机器(基于 RH 和 Debian)上运行以更新它们,并为每台更新的机器运行一个脚本(通知处理程序)。

最近我尝试测试一个名为 的新模块,因此我将首先收集事实并根据那里将主机分组为密钥,然后我希望在密钥的所有主机上运行 yum update而group_by不是使用when条件运行是 PackageManager_yum ,参见剧本示例:yum updateansible_distribution == "CentOS"ansible_pkg_mgr

这是我得到的错误信息,

提前致谢。

0 投票
1 回答
3277 浏览

ansible - Ansible 未在其处理程序中检测角色默认变量

ansible 是否将角色默认变量传递给同一角色中的处理程序?

这是有问题的剧本的一小段摘录:

角色层次结构

这是文件内容

gunicorn/defaults/main.yml

gunicorn/handlers/main.yml

完成/任务/main.yml

剧本.yml

AFAIK 一切看起来都很好。但是,我在剧本执行期间收到此错误

失败的!=> {"failed": true, "msg": "字段 'args' 的值无效,似乎包含一个未定义的变量。错误是:'gu_log' 未定义\n\n错误似乎是已在 '/roles/gunicorn/handlers/main.yml': 第 3 行第 3 列,但可能\n位于文件中的其他位置,具体取决于确切的语法问题。\n\n违规行似乎是:\n\ n\n- 名称:重新启动 Gunicorn\n ^ 此处\n"}

在 Ubuntu 12.04 LTS 上使用 Ansible 2.2

这是创建所有目录并演示我的问题的 techraf 脚本的修改版本

输出

PLAY [部署]


任务 [设置] ********************************************** ************************ 好的:[本地主机]

任务 [测试处理程序] ************************************************ **************致命:[本地主机]:失败!=> {"failed": true, "msg": "字段 'args' 的值无效,似乎包含一个未定义的变量。错误是:'gu_log' 未定义\n\n错误似乎是已在“/rtindru-test/roles/finalize/tasks/main.yml”:第 2 行第 3 列,但可能\n位于文件中的其他位置,具体取决于确切的语法问题。\n\n违规行似乎是:\n\n---\n- name: Test Handlers\n ^ here\n"} 重试,使用:--limit @/rtindru-test/playbook.retry

播放回顾 ************************************************ ************************ 本地主机:正常=1 更改=0 无法访问=0
失败=1

0 投票
4 回答
16024 浏览

ansible - 只为整个剧本运行一次 Ansible 处理程序

我想在整个剧本中只运行一次处理程序。

我尝试在 playbook 文件的以下内容中使用 include 语句,但这导致处理程序运行多次,每次播放一次:

这是 handlers/main.yml 的内容:

以下是通知处理程序的任务之一的示例:

我怎样才能让剧本只为整个剧本执行一次处理程序?

0 投票
1 回答
1320 浏览

syntax - Ansible 通知语法问题 - 名称 ^ 任务中未检测到操作

我不确定我在这里缺少什么。

Ansible 2.1.2.0

Python 2.7.5

CentOS Linux 版本 7.2.1511(核心)

剧本文件如下所示:

角色的(netdata)main.yml 看起来像:

处理程序通知通知程序,它的主文件如下所示:

那么,为什么 Ansible 会给我以下错误?

0 投票
2 回答
2166 浏览

ansible - 无论任务失败都运行处理程序?

我有一个 Ansible 角色,它具有以下任务

即,当create goss directories运行时,它会触发处理clean程序

由于我的模块的性质,我希望clean处理程序始终运行,即使角色中的其他任务失败。根据我的粗略测试,如果run tests失败,则永远不会调用处理程序,并且临时文件会留在目标机器上。

无论任务中发生了什么,我的角色是否有办法强制 Ansible 运行此处理程序?

0 投票
1 回答
3797 浏览

ansible - 使用 if 语句的 Ansible 处理程序

我有一个需要在 centos 7 和 centos 6 上运行的 apache 剧本。我希望根据分发主要版本触发处理程序。我有一个处理程序调用restart apache on 7和另一个处理程序restart apache on 6

我的handlers/main.yml长相是这样的

我尝试在我的中执行以下操作,tasks/main.yml但似乎遇到了与通知脚本有关的语法问题。

关于如何编写通知语句以实现我的目标的任何线索?

0 投票
1 回答
1367 浏览

ansible - Ansible 的处理程序依赖项

我有一个配置/etc/network/interfaces.d/ethX. 它具有通过通知调用的处理程序“重启接口”。

但是,在该接口上侦听的程序很少,如果我更改了该接口的配置中的任何内容,则应该重新启动。

通常我可以发送notify到配置应用程序的角色的重新启动处理程序,但这里有一个问题:配置接口的角色是一个相当通用的角色,可以从不同的剧本和不同的应用程序角色一起调用。我无法notify对这些角色的处理程序进行硬编码,但是,尽管如此,我想重新启动所有“依赖”该接口应用程序。

Ansible 是否具有某种“订阅”通知功能?我知道 Chef 可以,那么 Ansible 也可以这样做吗?我认为的其他方式是来自接口配置角色的某种“软通知”,如果没有这样的处理程序,它不会失败。

有任何想法吗?

0 投票
1 回答
502 浏览

ansible - Ansible 处理程序读取本地事实

我有一个 Ansible 剧本,可以在一组服务器中安装可变数量的应用程序。要安装应用程序,必须运行许多顺序任务,并且由于可能有多个应用程序,我循环通过它们with_items:

我还以这样的方式注册本地事实中的任何更改,如果在应用程序 A 上执行三个任务,则标记应用程序 A。

我遇到了处理程序的问题。它应该读取这些本地事实并重新启动任何已标记的应用程序,但我未能实现这一点。我的处理程序只是跳过,但调试显示带有标志的本地事实。

我的剧本与此类似:

我需要帮助的处理程序如下。它正在跳过“重新启动应用程序”任务:

最后我的group_vars

0 投票
1 回答
771 浏览

nginx - 使用 Ansible 升级已安装软件包的正确方法是什么

假设我有下一个简单的 Ansible 剧本:

如您所见,我首先升级已安装的 APT 包,然后才确保我拥有最新的 Nginx 版本。问题是如果 Nginx 有更新,它将安装在第一个任务中,如果是这样,第二个任务将不会被标记为已更改,并且不会触发处理程序。这是真的吗?还是 Ansible 足够聪明,仅在第一个任务中升级 Nginx 时才以某种方式触发此句柄?

我想知道这个案例的最佳实践。有没有比在升级所有已安装软件包的任务之前移动所有单独的安装任务(应该在其更改时触发处理程序)更好的方法?

谢谢!