我正在开发几个 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