我正在尝试使用 Ansible 创建一个剧本,其中包含不同的剧本作为其任务之一。
澄清一下,该剧本旨在部署 Linux 服务器,其中步骤之一是克隆 git 存储库。
导入它时(我尝试使用import_tasks
、include_tasks
、import_playbook
和include_playbook
),Ansible 返回以下错误:
ERROR! conflicting action statements: hosts, gather_facts
果然,当我编辑 git playbook 并远程该hosts
语句时,导入工作没有问题。
然而,git 克隆也意味着独立运行(以保持所述存储库同步),因此hosts
也必须包含该指令。
我本质上正在寻找一种导入剧本任务的方法,使用导入剧本的主机而不是导入剧本的主机。
我可以简单地从 git playbook 中删除主机指令并通过其他一些 playbook 调用它,但我想知道是否有更简单的方法,或者也许我只是缺少正确的语法。
有没有一种简单的方法可以在没有主机的情况下导入剧本的任务?
谢谢!
答案1
hosts:
并且gather_facts:
只能存在于剧的最顶层。
你应该
- 将您的剧本编写为连接到目标服务器的角色
- 删除冲突的语句并
delegate_to:
在包含剧本任务时使用。