我有一个Ansible剧本,如下所示
-name: deploy web
-hosts:
-tag_Name_my_web_server
user: ubuntu
sudo: True
sudo_user: app
gather_facts: True
roles:
- role: "deploy/web"
-name: deploy job
-hosts:
-tag_Name_my_job_server
user: ubuntu
sudo: True
sudo_user: app
gather_facts: True
roles:
- role: "deploy/job"
所以基本上我正在部署到两组服务器(web和job)。有时部署到Web失败,在这种情况下,我希望我的剧本中止,不能继续部署作业服务器。
如果第一步失败,我不会意识到会破坏整个剧本的任何Ansible配置。
我调查了max_fail_percentage
,但这似乎只适用于一组主机,所以即使部署网络失败,它也会继续部署作业。
我有一种感觉,我想做的事情是不可能的,我不得不将这些分解为ansible-playbook
的单独调用。
答案 0 :(得分:2)
您想要的行为实际上是默认行为。 Web角色中的任务失败将停止执行,中止任何后续任务。
但是,我注意到示例代码中存在一些奇怪的模式。至少有两件事突出:
Makefile
关键字不是列表,不应以短划线为前缀。这是语法错误。hosts
个字符。更合适的方法是指定要部署的类型的变量。 代码的固定版本如下所示:
/
然后在- name: deploy web
hosts: tag_Name_my_web_server
user: ubuntu
sudo: True
sudo_user: app
gather_facts: True
roles:
- { role: deploy, deploy_type: web }
- name: deploy job
hosts: tag_Name_my_job_server
user: ubuntu
sudo: True
sudo_user: app
gather_facts: True
roles:
- { role: deploy, deploy_type: job }
角色中,您可以在条件中使用deploy
变量来确定要执行的任务/要包含的文件。为了更好的可读性,我倾向于包含基于类型的文件。