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


16

我正在研究几本Ansible剧本,以启动一个新的服务器实例。为了成功启动服务器,我需要按照特定的顺序运行大约15种不同的剧本。

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

有没有更聪明/更好的方法来使用母版剧本来做到这一点,如果是的话,它会是什么样子(欣赏示例)。

我可以写一本完整的剧本,但有些剧本先以root身份运行,然后以sudo用户身份运行。


2
在主要剧本中使用include docs.ansible.com/ansible/playbooks_roles.html
c4f4t0r

1
要处理以root用户然后以sudo用户身份运行的情况,可以使用功能-将become:零件放在每个块的末尾。您可能需要创建一个新播放,以将连接用户从root用户切换到sudo用户。
RichVel

Answers:


15

构建许多子剧本,并通过include语句将其汇总。

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

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


2
您能否详细说明答案的最后一部分?您所说的“剧本应该始终是一个封闭的过程”是什么意思。?
Mike Vella

1
有没有办法使用正则表达式指定所有剧本?例如:- include : books/*.yml
blueskin '17

8
看起来include已弃用。docs.ansible.com/ansible/latest/playbooks_reuse.html我认为这import_playbook: foo是正确的方法,但是我并不超级有经验。
安德鲁(Andrew)

11

对于较新版本的Ansilbe,您可以构建许多子剧本并通过import_playbook语句进行汇总:

---
- import_playbook: A-systemd-networkd.yml
- import_playbook: B-fail2ban-ssh.yml
- import_playbook: C-enable-watchdog.yml
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.