Как работники Docker Swarm выполняют самопроверку?

#docker #docker-swarm

#docker #docker-swarm

Вопрос:

У меня возникли проблемы с проверкой, присоединился ли рабочий узел docker swarm к swarm в Ansible.

 - name: Check if Worker has already joined
  shell: docker node ls
  register: swarm_status
  ignore_errors: true

- name: Join Swarm
  shell: shell: docker swarm join --token {{ hostvars[groups['leader'][0]]['worker_token']['stdout'] }} {{ hostvars[groups['leader'][0]]['ec2_public_ip']['stdout'] }}:2377
  when: swarm_status.rc != 0
  run_once: true
  

Это не работает, так как swarm_status всегда будет отображаться ошибка, поскольку работник не может проверить себя.

Спасибо.

Ответ №1:

Редактировать: вы можете проверить с узла менеджера с помощью docker_node_info. Отладьте файл json, чтобы найти необходимую информацию:

     - name: Docker Node Info
      docker_node_info:
        name: worker
      register: worker_status

    - name: Debug
      debug:
        msg: "{{ worker_status }}"
  

Затем используйте json-запрос для фильтрации результатов с помощью jmespath

     - name: 
      debug:
        msg: "{{ worker_status | json_query('nodes[*].Spec.Role')}}"
  

Вывод:

 worker