我可以在剧本中导入或包含 pre_tasks 或 post_tasks 吗?

huh*_*how 7 ansible

有几个剧本,我想向这些剧本添加相同的 pre_tasks 和 post_tasks 。所以我将 import_tasks 添加到剧本中。看起来像这样

---
- hosts: central
  tasks:
  - import_tasks: pre_tasks.yml
  roles:
  - do_something
  become: no
Run Code Online (Sandbox Code Playgroud)

但我得到了这个错误

错误!包含的任务文件必须包含任务列表

如何将 pre_tasks 导入到剧本中,或者是否有更好的方法将 pre_tasks/post_tasks 应用于多个剧本?

Ana*_*yal 4

您可以在 playbook 中导入 pre_tasks 或 post_tasks。

这是一个例子,其中我们有 playbook.yml 和 common.yml - 如果我们想将 common.yml 包含到 playbook.yml 中,那么这个例子展示了如何正确构建文件:

剧本.yml

- hosts: haproxy  
  pre_tasks: 
  - name: Import common tasks
    import_tasks: 'common.yml'

  tasks:  
  - debug:
      msg: 'Hello from playbook.yml'
Run Code Online (Sandbox Code Playgroud)

common.yml(这是错误的,如果从问题中的脚本调用,将会重现您的错误)

pre_tasks:
  - debug: 
      msg: 'Hello from common.yml'
Run Code Online (Sandbox Code Playgroud)

common.yml(正确的导入结构)

- debug: 
    msg: 'Hello from common.yml'
Run Code Online (Sandbox Code Playgroud)

所以关键是不要 在包含的文件中包含pre_tasksor指令。post_tasks这样做会产生与您提到的相同的错误