Ansible未从所有主机的依赖项角色执行处理程序 安装程序

Ansible未从所有主机的依赖项角色执行处理程序 安装程序,ansible,dependencies,ansible-2.x,ansible-role,ansible-handlers,Ansible,Dependencies,Ansible 2.x,Ansible Role,Ansible Handlers,我有几个角色,它们声明角色依赖关系,有时使用它们所依赖的角色的处理程序。我的设置的简化版本如下所示(这是head inventory**/*.yml的输出,它显示了所有路径名和文件的完整内容): 问题 我的问题是,我希望两台服务器都执行基本处理程序。但很明显,它在server2上被跳过。如果我将-v添加到ansible命令,我会得到一条毫无帮助的注释,跳过:[server2]=>{“changed”:false,“skip_reason”:“条件结果为false”} 同样让我困惑的是,基本角色似

我有几个角色,它们声明角色依赖关系,有时使用它们所依赖的角色的处理程序。我的设置的简化版本如下所示(这是
head inventory**/*.yml
的输出,它显示了所有路径名和文件的完整内容):

问题 我的问题是,我希望两台服务器都执行基本处理程序。但很明显,它在server2上被跳过。如果我将
-v
添加到ansible命令,我会得到一条毫无帮助的注释,
跳过:[server2]=>{“changed”:false,“skip_reason”:“条件结果为false”}

同样让我困惑的是,基本角色似乎被包含了两次,而每个服务器分别跳过了角色的一个或另一个包含

问题:
  • 是否有任何方法可以确保正确地触发处理程序
编辑

  • 处理程序没有被触发是一个bug还是在某个地方记录了该行为
/编辑

小问题
  • 是否有任何方法可以声明依赖项,使其不会产生许多包含项,这些包含项仅由一台服务器拾取,而被所有其他服务器忽略,尽管其他服务器将通过其自身的依赖项在其他点包含相同的角色?当我有更多的服务器和角色时,这会导致许多跳过的任务。(看完后我怀疑没有)
  • 是否有其他方法可以使用ansible处理角色依赖项和处理程序?我在阅读后想出了这个设置
旁注
我希望避免使用中描述的
group_by
技术,或者更一般地说,仅针对服务器的正确子集在他们自己的剧本中执行每个角色,因为我有很多服务器,我想通过使用
策略:free

来加速剧本的运行,所以我强烈建议你在所有任务上添加
名称
,这样你就可以遵循哪个是哪个,而不是一堆(毫无帮助的)说
command
@Jack在我最初的剧本中我这样做了,但是对于帖子,我尽可能地减少了代码,使最后的帖子稍微短一点。另外:每个任务都以其角色作为前缀,在本例中,每个角色只有一个任务,因此它应该是唯一的。将剧本拆分为两个剧本似乎是唯一的选择。任务的顺序是相同的。角色数据库正在跳过服务器1,角色应用程序正在跳过服务器2。将剧本拆分为两个剧本并并行运行与“策略:免费”相同。@VladimirBotka您的意思是在shell脚本中并行运行它们吗?与使用ansible的两个剧本的线性执行相比,这将减少执行时间。但这两个剧本的输出将是混合的,并且结尾的统计数据将不会合并,并且可能会在较长时间运行的剧本输出之间的终端回卷中位于更高的位置。或者有解决办法吗?@Lucas:是的,我的意思是并行运行它们,例如在shell脚本中。处理混合输出的一个选项是为每个剧本设置专用。我强烈建议您在所有任务上设置
name
,这样您就可以遵循哪个是哪个,而不是一堆(毫无帮助的)说
command
@Jack在我最初的剧本中我这样做了,但是对于帖子,我尽可能地减少了代码,使最后的帖子稍微短一点。另外:每个任务都以其角色作为前缀,在本例中,每个角色只有一个任务,因此它应该是唯一的。将剧本拆分为两个剧本似乎是唯一的选择。任务的顺序是相同的。角色数据库正在跳过服务器1,角色应用程序正在跳过服务器2。将剧本拆分为两个剧本并并行运行与“策略:免费”相同。@VladimirBotka您的意思是在shell脚本中并行运行它们吗?与使用ansible的两个剧本的线性执行相比,这将减少执行时间。但这两个剧本的输出将是混合的,并且结尾的统计数据将不会合并,并且可能会在较长时间运行的剧本输出之间的终端回卷中位于更高的位置。或者有解决办法吗?@Lucas:是的,我的意思是并行运行它们,例如在shell脚本中。处理混合输出的一个选项是为每个剧本设置专用的。
==> inventory <==
[app]
server1 ansible_host=192.168.2.113
[db]
server2 ansible_host=192.168.2.153

==> playbook.yml <==
- hosts: all
  roles:
    - { role: app, when: "inventory_hostname in groups['app']" }
    - { role: db,  when: "inventory_hostname in groups['db']"  }

==> roles/app/handlers/main.yml <==
- name: app handler
  command: echo app handler

==> roles/app/meta/main.yml <==
dependencies: [base]

==> roles/app/tasks/main.yml <==
- command: /bin/true
  notify: [app handler, base handler]

==> roles/base/handlers/main.yml <==
- name: base handler
  command: echo base handler

==> roles/base/tasks/main.yml <==
- command: /bin/true

==> roles/db/handlers/main.yml <==
- name: db handler
  command: echo db handler

==> roles/db/meta/main.yml <==
dependencies: [base]

==> roles/db/tasks/main.yml <==
- command: /bin/true
  notify: [db handler, base handler]
PLAY [all] **********************************************************************

TASK [Gathering Facts] **********************************************************
ok: [server1]
ok: [server2]

TASK [base : command] ***********************************************************
skipping: [server2]
changed: [server1]

TASK [app : command] ************************************************************
skipping: [server2]
changed: [server1]

TASK [base : command] ***********************************************************
changed: [server2]

TASK [db : command] *************************************************************
skipping: [server1]
changed: [server2]

RUNNING HANDLER [base : base handler] *******************************************
skipping: [server2]
changed: [server1]

RUNNING HANDLER [app : app handler] *********************************************
changed: [server1]

RUNNING HANDLER [db : db handler] ***********************************************
changed: [server2]

PLAY RECAP **********************************************************************
server1                    : ok=5    changed=4    unreachable=0    failed=0   
server2                    : ok=4    changed=3    unreachable=0    failed=0