我有 3 个 ansible 剧本。
my_ansible
├── hosts
├── play1.yaml
├── play2.yaml
├── play3.yaml
└── roles
├── role1
├── role2
└── role3
主办方
[play1]
host1
[play2]
host2
[play3]
host3
现在,当我跑步时play3
,我想play2(role2)
一直跑host2
下去。play1(role1)
host1
我检查了一下,角色依赖,但这适用于同一主机,意味着,如果我添加role-dependency
和role3
,role1
那么role2
这两个角色将对抗host3
。
我想确保,仅play1
在 上运行host1
、仅play2
在 上运行、仅在 上运行。host2
play3
host3
我尝试寻找playbook
依赖关系,但还没有成功。
如果有更好的方法来解决这个问题,那么我也愿意尝试这种方法。
答案1
我想实现此目的的最简单方法是创建一个主剧本并在其中定义剧本的顺序。
可以将剧本包含在主剧本中。[...] 列出的每个剧本中的剧本和任务将按照列出的顺序运行,就像直接在这里定义它们一样。
为了实现该play3
运行play2
,play1
我们只需要定义一个这样的主剧本:
---
- import_playbook: play3.yml
- import_playbook: play2.yml
- import_playbook: play1.yml
答案2
不确定我是否理解,但我认为你的问题是你不想在没有先运行 play2 和 play1 的情况下运行 play3?
我不知道如何强制执行这一点,但我可以想到一些方法使其更方便。
首先,只需将所有三个剧本放入一个文件中,然后当您运行其中一个剧本时,就会运行它们全部。如果您偶尔想运行 play1 而不运行 play2 和 play3,请使用标签。使用标签,您可以让 play1 和 play2 具有 play3 标签,这样您就不会意外运行 play3 而不运行 play1 和 play2。
我通常将 ansible-playbook 命令放入脚本文件中,这样我就不必记住它了。如果您喜欢这样做,您可以让脚本启动三个播放。当您的同事不太了解 ansible 时,这尤其有用。例如,我创建了一个名为的文件,run.sh
其中包含:
ansible-playbook -i hosts myplay.yaml $@
bash$@
用于添加任何参数,因此我可以执行./run.sh -t play1
类似的事情。
希望有帮助!