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

lon*_*nix 6 ansible

这是我的 ansible 角色:

/roles
  /foo
    /tasks
      main.yml             <----- I want to split this
Run Code Online (Sandbox Code Playgroud)

main.yml文件是非常大的,所以我想将它拆分成多个文件,并呼吁他们在序列。

/roles
  /foo
    /tasks
      run-this-first.yml            <--- 1st
      run-this-last.yml             <--- last
      run-this-second.yml           <--- 2nd
Run Code Online (Sandbox Code Playgroud)

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

Arb*_*zar 18

你可以这样做include_tasks

/roles
  /foo
    /tasks
      main.yml
      run-this-first.yml            <--- 1st
      run-this-last.yml             <--- last
      run-this-second.yml           <--- 2nd
Run Code Online (Sandbox Code Playgroud)

正如你可以看到,还有main.yml里面tasks的目录和您main.yml只需包含此:

---
- include_tasks: run-this-first.yml
- include_tasks: run-this-second.yml
- include_tasks: run-this-last.yml
Run Code Online (Sandbox Code Playgroud)


joj*_*ojo 9

您基本上有两种方法(准确地说是两个内置模块)来实现这一目标。两种方法显示的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
    
    Run Code Online (Sandbox Code Playgroud)
  • 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
    
    Run Code Online (Sandbox Code Playgroud)

请注意,根据有关角色的 ansible 文档,import_tasks建议使用模块。

上面例子中的区别实际上只是include_tasks/import_tasks。但是,您使用的模块会影响任务的导入方式include_tasks,导入任务以动态方式导入,而import_tasks导入任务则以静态方式导入。

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