gpt4 book ai didi

Ansible 角色依赖项 - 安装但不运行(尚未) - 如何?

转载 作者:行者123 更新时间:2023-12-03 19:25:04 30 4
gpt4 key购买 nike

我希望我的角色可重用且独立。为了可重用,每个角色都按照“单层抽象”范式进行重点工作。这导致了许多小的“原子”角色,在它们之上构建了多层协调角色以提供更复杂的抽象。

为了自包含,每个角色都应该声明它对其他角色的依赖关系。我不希望这种依赖关系与顶级剧本紧密绑定(bind)(例如,通过综合 playbook/roles/requirements.yml )。一个角色应该完全负责管理(声明)它所依赖的角色。这很容易通过 abc_role/meta/main.yml 完成。在“依赖项”数组中有合适的整数。

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

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

根据 https://github.com/ansible/ansible/issues/35905 “允许角色依赖不被执行”——我的这个愿望有一些公认的值(value)。不幸的是,#35905 的评论/对话没有提供直接的解决方案或缓解措施(我能找到)。

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

于是我脑补了血,诅咒了我的原生质血统,终于衍生出log(deps^tags)作为 {42} 的幂集 - 瞧! (见下面我的自拍答案。)

最佳答案

只需增强 abc_role/meta/main.yml 的每个元素〜“依赖项:”与“标签:[从不]”

这正是我想要的:

  • 角色可以声明它们所依赖的子角色并使它们可用(即从它们来自和安装的任何地方拉下来)
  • 但不强制执行声明序列中的所述子角色作为依赖角色的“预任务”。

  • 对于“我想看一个实际例子”的人群——
    ===== 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

    编辑:实际上,这在实践中并不完全奏效。

    它确实像描述的那样工作,但是当通过显式标记(例如,从剧本中)选择父角色时,父角色的依赖数组中列出的子角色 执行,尽管有一个“标签:[never]”元素。

    我仍在尝试通过摆弄标签或以某种方式对其进行操作来恢复我的方法,并且当我有明确的答案时会更新此帖子。与此同时,我想澄清我发现和描述的解决方案的(非常)严重限制——并且(希望永恒)也许会从我们的社区得到更好的答案......

    重新编辑

    在使用大量标签组合 对角色依赖项数组进行各种撞击后,我的头脑重新焕发了活力。加 通过阅读一些 Ansible 资源,我放弃了我的追求。

    一年多以前,@bcoca(我认为是 Ansible 的贡献者之一)说“安装但不执行”元关键字将是一个不错的选择,但从那时起功能请求就没有任何吸引力。闻起来像死鱼(意思是:这不太可能完成)。

    所以,它回到了(非常烦人的)“用所有传递所需的角色来膨胀剧本的 requirements.yml”方法,然后只处理随之而来的代码维护疯狂。这是做事的一种丑陋的方式,但至少它可以工作。

    关于Ansible 角色依赖项 - 安装但不运行(尚未) - 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57581363/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com