Ansible角色依赖项-安装但不';还没跑——怎么跑?

Ansible角色依赖项-安装但不';还没跑——怎么跑?,ansible,dependencies,ansible-role,Ansible,Dependencies,Ansible Role,我希望我的角色是可重用和自包含的。为了便于重用,每个角色都按照“单一抽象级别”的范式完成一项重点工作。这就产生了许多小的“原子”角色,在这些角色的基础上构建了多个协调角色层,以提供更复杂的抽象 为了自包含,每个角色都应该声明其对其他角色的依赖关系。我不希望这种依赖关系紧密地绑定到顶级剧本(例如,通过综合playbook/roles/requirements.yml)。角色应该完全负责管理(声明)它所依赖的角色。这可以通过abc_role/meta/main.yml在“dependencies”数

我希望我的角色是可重用和自包含的。为了便于重用,每个角色都按照“单一抽象级别”的范式完成一项重点工作。这就产生了许多小的“原子”角色,在这些角色的基础上构建了多个协调角色层,以提供更复杂的抽象

为了自包含,每个角色都应该声明其对其他角色的依赖关系。我不希望这种依赖关系紧密地绑定到顶级剧本(例如,通过综合
playbook/roles/requirements.yml
)。角色应该完全负责管理(声明)它所依赖的角色。这可以通过
abc_role/meta/main.yml
在“dependencies”数组中使用合适的entires轻松完成

一切都很好-除了Ansible Tower不仅从公共或私有(自定义)存储库中提取外部依赖角色,它还运行该角色。Tower在预作业中执行“拉外部角色”,该预作业递归地跟踪所有依赖项,并将它们收集到playbook的“角色”目录中。这是在启动作业模板本身之前的100%。Ansible本身也使用相同的依赖项声明作为角色的“预任务”序列,但没有使用角色进行任何协调的好处。这是“可供以后使用”功能和“先执行某些任务”功能的不幸合并

想要将这两个功能分开的一个简单原因是,我可以拥有一个可用的角色(即,它是从任何地方安装的),但只能根据动态主机值有条件地执行它。(即使可以将角色的任务流放入“dependencies[]”中,这些项似乎也不符合“when:”条件节。因此,依赖项的条件就不存在了。)

正如“允许不执行角色依赖关系”——我的这个愿望有一些公认的价值。不幸的是,35905的评论/对话没有提供直接的解决方案或缓解措施(我可以找到)

但我真的想要一个具有我想要的属性的解决方案。是的,我想要我想要的


所以我狠狠地砸了我的头,诅咒了我的原生质祖先,最后得到了
log(deps^tags)
作为{42}-et瞧!(见下面我的自拍答案。)

只需增强
abc_role/meta/main.yml
~“依赖项:”的每个元素,并使用“标记:[从不]”

这正是我想要的:

  • 角色可以声明它们所依赖的子角色,并使其可用(即从它们来自和安装的任何位置下拉)
  • 但不强制执行声明序列中的所述子角色作为从属角色的“预任务”
对于“我想看一个真实的例子”人群-

====abc\u角色/meta/main.yml=====
银河信息:
#无聊的东西被省略了。。。
依赖项:
-src:ssh://git@repos-galore.example.com/projectum/subrollio.git
scm:git

标记:[从不]#不确定您遇到了哪些问题导致了您的编辑。这在Ansible 2.9.13中非常有效。标签:从不对我不起作用。无论何时,角色都会运行。但是,
when:false
似乎确实有效(包括使用
--标记时)
===== abc_role/meta/main.yml =====

galaxy_info:
  # boring stuff elided...

dependencies: 
  - src: ssh://git@repos-galore.example.com/projectum/subrollio.git
    scm: git
    tags: [never]   # <<<=== This is the key bit
 _______________ 
<  AWX 6.1.0.0  >
 --------------- 
        \   ^__^
         \  (oo)\_______
            (__)      A )\/\
                ||----w |
                ||     ||

                            Ansible 2.8.2