【发布时间】:2021-07-07 14:47:35
【问题描述】:
我有一个巨大的剧本,其中调用了多个剧本。它看起来像这样:
cat global_playbook.yml
---
- hosts: server150
tasks:
- include_tasks: folder/playbook1.yml
vars:
...
- include_tasks: folder/playbook2.yml # I'm trying to start from here.
vars:
...
tags: test
- include_tasks: folder/playbook3.yml
vars:
...
... and so on
有时,当我运行它时,它会失败。而且我似乎无法让它从特定位置开始。
我正在尝试从folder/playbook2.yml 开始。我试着做:
ansible-playbook global_playbook.yml -start-at-task="folder/playbook2.yml"
ansible-playbook global_playbook.yml -start-at-task="**task within playbook2**"
ansible-playbook global_playbook.yml --tags="test"
但没有任何工作。
- 我无法直接运行 playbook,因为如本线程开头的示例所示,变量位于全局 playbook 中。当我在每个剧本中都有变量时,它就行不通了。他们也没有定义主机。
- 我知道我可以使用
--step,所以它会询问我要运行哪个任务,但它为此运行了太多的剧本。更何况,因为我用的是include_tasks,所以我同意后它不会告诉我任务是什么!
当使用调用其他 playbook 的 playbook 时,是否可以从特定点开始?还是从失败的地方继续?
先谢谢了!
【问题讨论】:
-
也许你可以使用标签:stackoverflow.com/questions/23945201/…
-
你为什么要把它分成几个剧本?
-
从技术上讲,您只有一个剧本,其中包含多个任务列表。您可以在几个可以单独调用的剧本中转换所有这些内容,并最终保留一个可以使用
import_playbook运行所有剧本的一体化剧本。关于--start-at-task,您在示例中使用的是动态包含。 Ansible 无法事先知道包含在包含文件中的任务,因此它无法工作。如果可能,使用静态导入可能会使这成为可能。 -
感谢您的回复,所以使用
import_playbook会使其成为静态导入吗?使用它时,我可以从全局剧本控制剧本将在其上运行的主机吗?这是我最初最关心的问题。
标签: ubuntu automation ansible