【问题标题】:Ansible roles. Default valuesAnsible 角色。默认值
【发布时间】:2016-09-22 21:12:53
【问题描述】:

我在文档中找不到答案,也找不到示例:是否可以在 role/defaults/ 中命名文件而不是 main.yml?我的意思是,main.yml 是具有默认值的文件的唯一有效名称吗?

【问题讨论】:

    标签: ansible


    【解决方案1】:

    根据本文档的声音;

    http://docs.ansible.com/ansible/playbooks_roles.html#roles

    角色只是围绕“包含”指令的自动化,如所述 上面,并且真的不包含除了一些额外的魔法 改进了引用文件的搜索路径处理。然而, 这可能是一件大事!

    这为每个角色“x”指定以下行为:

    如果 roles/x/tasks/main.yml 存在,将添加其中列出的任务 看戏

    如果角色/x/handlers/main.yml 存在,则列出处理程序 其中将被添加到游戏中

    如果角色/x/vars/main.yml 存在, 其中列出的变量将被添加到剧本中

    如果 roles/x/defaults/main.yml 存在,其中列出的变量将是 添加到游戏中

    如果角色/x/meta/main.yml 存在,任何角色 其中列出的依赖项将添加到角色列表中(1.3 及更高版本)任何副本、脚本、模板或包含任务(在角色中) 可以引用角色/x/{files,templates,tasks}/ 中的文件(目录取决于 在任务中),而不必相对或绝对地引导它们

    问:我的意思是,main.yml 是具有默认值的文件的唯一有效名称吗?
    答:听起来只有当你是希望 ansible 自动为该角色加载某些 var_files 并自动 include 任务文件。

    问:是否可以命名文件
    答:是的,这只是意味着在剧本中您必须使用 include 指令并明确指出它到唯一的任务文件名。

    例子:

    - name: Do role
      hosts: localhost
      tasks:
      - include: roles/operations/tasks/installProgram.yml
    

    【讨论】:

    • 如果我将默认文件命名为role/defaults/a.yml,然后将其与include 语句一起包含在我的任务中(不确定是否可能),它真的会是默认吗?它会被覆盖吗? Ansible 是如何知道这个 include 的优先级必须低于常规 var 的?
    • 这里是 Ansible 新手。仍在学习,所以不太确定评论,我的歉意。我认为当您使用 include 语句时,它只是意味着“嘿运行那个 yml 脚本”,它没有引用文本中提到的所有角色魔法,比如自动变量加载。
    【解决方案2】:

    正如您在 cmets 中所说,可以在 roles/my_role/defaults/ 下调用任何其他文件。问题是像roles/my_role/defaults/anything_else.yml 这样的文件永远不会默认加载。即使您可以使用include_vars 加载它,它也会获得high precedence of included vars (18/22)

    不过,从 Ansible 2.6 开始,您可以使用目录 main 代替 main.yml 文件!

    通过这样做,您可以通过将变量拆分为roles/my_role/defaults/main/something.ymlroles/my_role/defaults/main/anything_else.yml、……来实现目标。

    更多详情请见this StackOverflow answer

    但实际上这个功能还没有记录(我刚刚创建了一个issue about that)。

    【讨论】:

      【解决方案3】:

      默认情况下,Ansible 将在角色/目录中查找任务、变量、处理程序等。角色/默认只是他们文档中提供的一个示例。您可以根据自己的需要以不同的方式构建角色。例如,我的设置是这样的;

      roles/windows/<somerole>/tasks/main.yml
      roles/linux/<somerole>/tasks/main.yml
      

      main.yml 是运行 playbook 时唯一会自动加载的文件(“默认”)。如果您出于某种原因想要指定另一个文件名,则需要使用 include 函数并如上所述指向您的文件。

      Best Practices”指南提供了对目录结构的一些深入了解。

      【讨论】:

        猜你喜欢
        • 2017-02-26
        • 2015-05-21
        • 1970-01-01
        • 1970-01-01
        • 2017-05-08
        • 2017-05-02
        • 1970-01-01
        • 2019-08-06
        • 1970-01-01
        相关资源
        最近更新 更多