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

nul*_*tek 27 ansible ansible-playbook

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

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

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

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

小智 26

构建许多子剧本并通过 include 语句聚合它们。

- include: playbook-one.yml
- include: playbook-two.yml
Run Code Online (Sandbox Code Playgroud)

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

  • 看起来 `include` 已被弃用。http://docs.ansible.com/ansible/latest/playbooks_reuse.html 我认为 `import_playbook: foo` 是正确的方法,但我不是很有经验。 (11认同)
  • 你能详细说明你答案的最后一部分吗?“剧本应该始终是一个封闭的过程”是什么意思。? (3认同)
  • @MikeVella“剧本应该始终是一个封闭的过程”本质上意味着每个剧本应该是独立的并且应该是独立完成的。playbook-a 中的任何内容都不应该依赖于 playbook-b 或必须依赖于 playbook-b。尽可能将它们放在一起。 (2认同)

Pet*_*nna 25

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

---
- import_playbook: A-systemd-networkd.yml
- import_playbook: B-fail2ban-ssh.yml
- import_playbook: C-enable-watchdog.yml
Run Code Online (Sandbox Code Playgroud)


小智 5

来自: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
Run Code Online (Sandbox Code Playgroud)