Как убедиться, что ansible playbook работает полностью

Я запускаю эту независимую книгу:

---
- hosts: localhost
  remote_user: root

  tasks:
   - name : update system
     apt : update_cache=yes    

   - name : install m4
     apt : name=m4 state=present

   - name : install build-essential
     apt : name=build-essential state=present 

   - name : install gcc
     apt : name=gcc state=present

   - name : install gfortran
     apt : name=gfortran state=present

   - name : install libssl-dev
     apt : name=libssl-dev state=present

   - name : install python-software-properties
     apt : name=python-software-properties state=present

   - name : add sage ppa repo
     apt_repository: repo='ppa:aims/sagemath'

   - name : update system
     apt : update_cache=yes

   - name : install dvipng
     apt : name=dvipng state=present

   - name : install sage binary
     apt : name=sagemath-upstream-binary state=present

   - name : invoke create_sagenb script
     command: /usr/bin/screen -d -m sudo /root/databases-and-datamining-iiith/python-scripts/create_sagenb -i -y

   - name : invoke start_sage script
     command: /usr/bin/screen -d -m sudo /root/databases-and-datamining-iiith/python-scripts/start_sage -i -y

Этот плейбук дает сбой во время выполнения задачи "install build-essential" и останавливается с ошибкой, запрашивающей запуск dpkg --configure -a. Как я могу убедиться, что playbook снова запускается после этой ошибки, выполнив команду

dpkg --configure -a

сначала, а затем переходите к другим задачам.


person apurv    schedule 31.08.2015    source источник


Ответы (1)


Ansible вообще идемпотент. Это означает, что вы можете просто снова запустить свой плейбук после решения проблемы без конфликтов.

Это не всегда правда. Если у вас есть более сложная игра и выполнение задач в зависимости от результата другой задачи, это может легко сломаться, и неудачная задача приведет вас в состояние, которое не так просто исправить с помощью Ansible. Но это не относится к поставленным вами задачам.

Если вы хотите ускорить процесс и пропустить все задачи и/или хосты, которые не сработали, вы можете работать с --limit и/или --start-at-task:

Когда playbook дает сбой, вы можете заметить, что Ansible показывает сообщение, содержащее команду, которая позволит вам ограничить воспроизведение хостами, на которых произошел сбой. Поэтому, если только 1 хост вышел из строя, вам не нужно запускать playbook на всех хостах:

ansible-playbook ... --limit @/Users/your-username/name-of-playbook.retry

Чтобы начать с конкретной задачи, вы можете использовать --start-at-task. Поэтому, если ваша книга не справилась с задачей «установить сборку», вы можете начать снова с правой этой задачи и пропустить все предыдущие задачи:

ansible-playbook ... --start-at-task="install build-essential"

Кстати, модуль apt оптимизирован для работы с циклами. Вы можете ускорить свою игру, объединив задачи в одну подходящую задачу:

  tasks:
   - name: Install packages that we need for need for apt_repository
     apt: update_cache=yes  
          name={{ item }}
          state=present 
          cache_valid_time=3600
     with_items:
       - python-software-properties
       - python-software-properties-common

   - name: add sage ppa repo
     apt_repository: repo='ppa:aims/sagemath'

   - name: Install packages
     apt: update_cache=yes  
          cache_valid_time=3600
          name={{ item }}
          state=present 
     with_items:
       - m4
       - build-essential
       - gcc
       - gfortran
       - libssl-dev
       - dvipng
       - sagemath-upstream-binary
person udondan    schedule 31.08.2015