将ansible角色的任务拆分为多个文件

问题描述 投票:0回答:2

这是我的角色:

/roles
  /foo
    /tasks
      main.yml             <----- I want to split this

main.yml
文件很大,所以我想把它分成多个文件,然后依次调用。

/roles
  /foo
    /tasks
      run-this-first.yml            <--- 1st
      run-this-last.yml             <--- last
      run-this-second.yml           <--- 2nd

如何调用这些文件,以及如何确保它们按顺序运行?

ansible
2个回答
35
投票

你可以用

include_tasks
来做到这一点:

/roles
  /foo
    /tasks
      main.yml
      run-this-first.yml            <--- 1st
      run-this-last.yml             <--- last
      run-this-second.yml           <--- 2nd

您可以注意到,

main.yml
目录中还有
tasks
,而您的
main.yml
只包含以下内容:

---
- include_tasks: run-this-first.yml
- include_tasks: run-this-second.yml
- include_tasks: run-this-last.yml

10
投票

您基本上有两种方法(准确地说是两个内置模块)来实现这一目标。两种方法显示的都是您的

tasks/main.yml
文件的外观:

  • include_tasks
    模块

    ---
    - name: First tasks
      ansible.builtin.include_tasks:
        file: run-this-first.yml
    - name: second tasks
      ansible.builtin.include_tasks:
        file: run-this-second.yml
    - name: Last tasks
      ansible.builtin.include_tasks:
        file: run-this-last.yml
    
  • import_tasks
    模块

    ---
    - name: First tasks
      ansible.builtin.import_tasks:
        file: run-this-first.yml
    - name: second tasks
      ansible.builtin.import_tasks:
        file: run-this-second.yml
    - name: Last tasks
      ansible.builtin.import_tasks:
        file: run-this-last.yml
    

请注意,根据有关角色的 ansible 文档,建议采用

import_tasks
模块。

上述示例的区别实际上只是

include_tasks/import_tasks
。 但是,您使用的模块将影响如何导入任务,因为
include_tasks
以动态方式导入任务,而
import_tasks
以静态方式导入任务。

可以在官方有关重用工件的指南中找到两种方法的比较此处,并且您可以在同一指南中此处阅读有关何时可能想要使用哪个模块的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.