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