2016-04-01 3 views
0

в моей игре i ssh на хост и выполнение нескольких ролей, однако, если я не скомпилирую ssh в экземпляр, следующий включит перенос независимо, id хотел бы выйти/сбой, когда - build не удалось выполнитьВыход на сбой ssh ​​

вот пример,

FYI - app_ec2 создает экземпляр на АМС и устанавливает хост, 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

Можете ли вы предоставить образец вывода и содержимое build.yml? – user2599522

+0

- хозяева: "{{}} роль" серийный номер: 1 gather_facts: истинный Sudo: да any_errors_fatal: истинный max_fail_percentage: 0 vars_files: - "вары/{{ENV}}/common.vars" - "Vars/server.vars" роли: - по умолчанию - перезапустить - awscli - cloudwatch бревна - нтп - Java - кот - NewRelic - newrelic_apm - "{{}} роль" - app_liquibase - restart – James

+0

Я не вижу ничего плохого в том, что вы опубликовали. Я немного упростил это [здесь] (https://gist.github.com/serialdoom/77e271410ea0ab2e2e3b242c5bc9e6fb), поэтому я могу проверить его и его провал для меня. Можете ли вы предоставить примерный выход? – user2599522

ответ

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" 

И вы можете использовать этот обходной путь:

  • Выполнить некоторые Playbook на текущем хосте (-c локальный == локальное соединение)
  • Позвоните по номеру внутри некоторого блока, который подключается к удаленному хосту, и если блок не работает, повторите попытку.

PS:

анзибль playbooks следует использовать Идемпотентность концепцию:

Концепция команды должны применяться только тогда, когда они нуждаются в быть применены, что изменится, и что лучше описать желаемое состояние системы , а не процесс перехода к этому состоянию. Как аналог, путь от Северной Каролины в Соединенных Штатах до Калифорнии связан с вождением очень длинного пути на запад, но если бы я был вместо этого в Анкоридж, Аляска, проехавший долгий путь на запад, уже не правильный путь , чтобы добраться до Калифорния. Ресурсы Ansible, такие как вы, чтобы сказать «поместите меня в California», а затем решите, как туда добраться. Если вы уже были в Калифорнии, ничего не должно произойти, и это позволит вам это знать. ничего не нужно менять.

Смежные вопросы