如何使用 Ansible 按顺序运行多个剧本?

如何使用 Ansible 按顺序运行多个剧本?

我正在开发几个 Ansible 剧本来启动一个新的服务器实例。我需要按特定顺序运行大约 15 个不同的剧本才能成功启动服务器。

我最初的想法是编写一个 shell 脚本,ansible-playbook playbook_name.yml该脚本针对我需要运行的每个剧本执行并复制一个条目。

是否有更智能/更好的方法来使用主剧本来做到这一点,如果有的话它会是什么样子(欢迎提供示例)。

我可以编写一个完成所有功能的单一剧本,但有些剧本首先以 root 身份运行,然后以 sudo 用户身份运行。

答案1

构建许多子剧本并通过包含语句将它们聚合起来。

- include: playbook-one.yml
- include: playbook-two.yml

如果您的剧本必须按顺序运行,并且所有剧本都是强制性的,请构建一个主剧本并包含带有任务的文件。剧本应始终是一个封闭的过程。

答案2

对于较新版本的 Ansible,您可以构建许多子剧本并通过 import_playbook 语句将它们聚合起来:

---
- import_playbook: A-systemd-networkd.yml
- import_playbook: B-fail2ban-ssh.yml
- import_playbook: C-enable-watchdog.yml

答案3

从:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/import_playbook_module.html

- hosts: localhost
  tasks:
    - debug:
        msg: play1

- name: Include a play after another play
  import_playbook: otherplays.yaml

相关内容