退出ssh失败

时间:2016-04-01 10:50:21

标签: ansible ansible-playbook ansible-2.x

在我的游戏中我ssh到一个主机并执行许多角色,但是如果我没有ssh到实例中,那么下一个包括继续,无论如何,id就像退出/失败时 - 构建无法执行

这是一个例子,

FYI - app_ec2在AWS上创建一个实例并设置主机build.yml然后将配置应用于此实例并启动用户此实例以创建AMI然后创建ASGroup

---
- hosts: localhost
  connection: local
  serial: 1
  gather_facts: true
  any_errors_fatal: true
  max_fail_percentage: 0
  vars_files:
    - "vars/security.vars"
    - "vars/{{ env }}/common.vars"
    - "vars/server.vars"
  roles:
    - app_ec2

- include: build.yml
- include: launch-asg.yml

build.yml:

- hosts: "{{ role }}"                                                                                                                                                                                              
  serial: 1
  gather_facts: true
  sudo: yes
  any_errors_fatal: true
  max_fail_percentage: 0
  vars_files:
    - "vars/{{ env }}/common.vars"
    - "vars/server.vars"
  roles:
    - default
    - restart
    - awscli
    - cloudwatch-logs
    - ntp
    - java
    - tomcat
    - newrelic
    - newrelic_apm
    - "{{role}}"
    - app_liquibase
    - restart

1 个答案:

答案 0 :(得分:0)

我建议使用Ansible Blocks

 tasks:
  - block:
      - debug: msg='i execute normally'
      - command: /bin/false
      - debug: msg='i never execute, cause ERROR!'
    rescue:
      - debug: msg='I caught an error'
      - command: /bin/false
      - debug: msg='I also never execute :-('
    always:
      - debug: msg="this always executes"

您可以使用此解决方法:

  • 在当前主机上运行一些剧本(-c local == local connection)
  • 呼叫 在一些块内运行ansible连接到远程主机,如果 阻止重试失败。

PS:

Ansible剧本应该使用Idempotency概念:

  

只有在需要时才应用更改命令的概念   要应用,并且最好描述所需的状态   一个系统,而不是如何进入该状态的过程。作为类比,   从美国北卡罗来纳州到加利福尼亚的路径   涉及开很长的路西,但如果我是在   阿拉斯加州的安克雷奇,向西行驶不再是正确的方式   去加州。 Ansible的资源就像你说“把我放进去   加州“然后决定如何到达那里。如果你已经在   加利福尼亚,没有什么需要发生,它会让你知道它   不需要改变任何东西。