Ansible как проверить и дождаться, пока docker будет запущен и запущен на нескольких хостах?

#docker #ansible

#docker #ansible

Вопрос:

В моей задаче Ansible я перезапускаю docker:

 - name:  restarting docker on all the nodes 
  command: systemctl restart docker
  become: yes
  

После этого как я могу проверить и дождаться, пока docker не будет запущен и запущен, а затем перейти к следующим задачам?

Комментарии:

1. Используйте service модуль, а не команду оболочки.

2. Спасибо за предложение, но с помощью service module помогает ли ждать, пока docker будет запущен и запущен?

Ответ №1:

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

 - name: wait for docker service
      service:
        name: docker
        state: started 
      register: docker_service
      until: docker_service.status.ActiveState == "active"
      retries: 10
      delay: 20
  

Комментарии:

1. Последняя версия ansible и docker возвращает: {«msg»: «Условная проверка ‘docker_service.status. Сбой ActiveState == «активный». Ошибка была: ошибка при оценке условного (docker_service.status. ActiveState == «активный «): ‘dict object’ не имеет атрибута ‘status'»}

Ответ №2:

Это сработало для меня:

 - name: Wait for service 'docker' to be running
  service_facts:
  register: sfax
  until: "sfax.ansible_facts.services.docker.state == 'running'"
  retries: 10
  delay: 5
  

Ответ №3:

Вы можете попробовать с

https://docs.ansible.com/ansible/latest/collections/ansible/builtin/service_facts_module.html amp;

https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#retrying-a-task-until-a-condition-is-met

Что-то вроде этого:

 - name: Wait for service 'docker' to be running
  service_facts:
  until: "(ansible_facts.services | selectattr('name', 'docker')).state == 'running'"
  retries: 10
  delay: 5

  

Комментарии:

1. Я попытался использовать вышеуказанную задачу, но получил эту ошибку: The conditional check '(ansible_facts.services | selectattr('name', 'docker')).state == 'running''' failed. The error was: template error while templating string: unexpected char u"'" at 80. String: {% if (ansible_facts.services | selectattr('name', 'docker')).state == 'running'' %} True {% else %} False {% endif %}

2. Да, в until: строке была опечатка. '' В конце должно быть просто ' . Я это исправил.

3. Я попробовал обновленный, но он терпит неудачу с The conditional check '(ansible_facts.services | selectattr('name', 'docker')).state == 'running'' failed. The error was: error while evaluating conditional ((ansible_facts.services | selectattr('name', 'docker')).state == 'running'): 'generator object' has no attribute 'state'