【问题标题】:Rename roles/rolename/tasks/main.yml to rolename.yml in Ansible在 Ansible 中将 roles/rolename/tasks/main.yml 重命名为 rolename.yml
【发布时间】:2016-10-31 12:25:43
【问题描述】:

默认情况下,Ansible 在 main.yml 中查找角色的任务。我有太多 main.yml 文件,我想将其重命名为 rolename.yml 或更独特的名称。如何更改 Ansible 的默认行为以使用 rolename.yml 而不是 tasks/main.yml?

【问题讨论】:

    标签: ansible


    【解决方案1】:

    正如布鲁斯已经指出的那样,这是硬编码的。但我也有这种行为的问题,因为我的 IDE 在选项卡中显示文件名,而我曾经有一个名为“main.yml”的无数选项卡。

    我的标准设置是有两个文件:

    • main.yml
    • 角色名称.yml

    main.yml 中只是一个 include 任务到 role-name.yml。除了这个包括我处理标签,因为我希望我的所有角色都用他们的名字来标记。

    ---
    
    - include: role-name.yml
      tags: role-name
    
    ...
    

    【讨论】:

    • 这里也有类似的方法 - main.yml 包括我的“我实际上可以仅基于文件名看到我正在处理的内容”yaml 文件。鉴于 main.yml 中除了指向更好命名文件的路径之外没有列出其他代码,除了初始创建之外,它们永远不会更改,因此永远不会混淆。
    • 最佳选项(没有修补 Ansible)我见过,这对我来说很奇怪,这个包含是相对于角色目录,而不是 main.yml 文件。你有什么技巧可以让 ./vars/main.yml 不那么笨吗?
    • 我使用了完全相同的方法(我认为是独立发明的,虽然可能我读了这条评论并忘记了),但不幸的是,标签应用程序因 Ansible 2.5+ 的新 include_tasks 方法而中断。跨度>
    • 如果你想要基于角色的标签名称,这个插件是标签问题的解决方法:gist.github.com/rkrzr/f5387167fa7b4869e2dca8b713879562
    【解决方案2】:

    不幸的是,没有办法做到这一点。 main.yml 这个名字被硬编码到 ansible 源代码中。 (如果你真的很在意,请在this file 中寻找函数_resolve_main。)

    角色任务将始终位于文件 roles/<rolename>/tasks/main.yml 中,变量位于 roles/<rolename>/vars/main.yml 中,等等。因为每个文件所在的路径提供了角色名称和文件用途的完整详细信息,所以真的没有需要从 main.yml 更改名称。你最终会得到像roles/<rolename>/tasks/<rolename>.yml 这样的东西,这是多余的。

    这一切都记录在 Ansible 的 Best Practices 文档中。

    【讨论】:

    • 为什么不能以roles/<rolename>/tasks.yml 这样的路径结束? IMO,能够使用这种简化会很好。有什么隐藏的陷阱吗?
    • "... 确实没有必要从 main.yml 更改名称..." - 您错过了重点,许多编辑器仅在选项卡上显示文件名。因此,如果我打开了十几个 ansible 文件,我就有十几个标签具有相同的名称。当然,我可以将鼠标悬停在选项卡上以查看路径,或者我可以在每个文件的顶部添加注释,注明角色和类型,但这比实际需要的要痛苦得多。
    【解决方案3】:

    作为一种解决方法,可以方便地将命名为 rolename_tasks.yml 的符号链接到 main.yml...

    【讨论】:

      猜你喜欢
      • 2021-03-24
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 2019-01-19
      • 2021-04-05
      • 2021-10-16
      相关资源
      最近更新 更多