【问题标题】:Run a specific playbook运行特定的剧本
【发布时间】: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


【解决方案1】:

这完全取决于您使用多个剧本的原因。现在,我建议您考虑改用roles 的可能性。但是您可以将变量存储在文件中并使用 -e 选项将它们传递给 Ansible,如下所示:

ansible-playbook -i hosts --limit server150 -e @my-var-file.yml folder/playbook2.yml

另一种选择是使用host_vars 目录,因此变量属于该特定主机。

在我看来,当我们在同一个剧本中拥有松散耦合的任务时,标签是一种方便的资源。例如:我们有一个实现 MySQL 数据库和 SMB/CIFS 服务器来存储和共享其备份文件的剧本。因此,您只能运行这些剧本部分中的每一个部分。

【讨论】:

    猜你喜欢
    • 2022-08-12
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多