Ansible playbook链错误处理

时间:2015-07-24 21:21:21

标签: ansible ansible-playbook

我有一个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的单独调用。

1 个答案:

答案 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变量来确定要执行的任务/要包含的文件。为了更好的可读性,我倾向于包含基于类型的文件。