Модуль Docker_swarm - параметр join_token для ansible не работает - PullRequest
0 голосов
/ 04 октября 2019

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

  - name: Init a new swarm with default parameters
    docker_swarm:
      state: present
      advertise_addr: "{{ manager_ip }}:2377"
    register: rezult
    when: "ansible_default_ipv4.address == '{{ manager_ip }}'"


  - name: Add nodes
    docker_swarm:
      state: join
      advertise_addr: "{{ manager_ip }}"
      join_token: rezult.swarm_facts.JoinTokens.Worker
      remote_addrs: "{{ manager_ip }}:2377"
    when: "ansible_default_ipv4.address != '{{ manager_ip }}'"

В него входит менеджер роя с "manager_ip" --extra-var, но он не работает в«задача добавления узлов» с этой ошибкой:

fatal: [vm2]: FAILED! => {"changed": false, "msg": "Can not join the Swarm Cluster: 500 Server Error: Internal Server Error (\"invalid join token\")"}

, если я помещу «{{}}» вокруг «rezult.swarm_facts.JoinTokens.Worker» после join_token, я получаю это:

fatal: [vm2]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'swarm_facts'\n\nThe error appears to be in '/home/ansible/docker-ansible/docker.yml': line 47, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n  - name: Add nodes\n    ^ here\n"}

Если я добавлю сообщение отладки для rezult.swarm_facts.JoinTokens.Worker, я получу правильный токен:

ok: [opensuse1] => {
    "msg": "SWMTKN-1-5p7brhxxz4gzu716t78tt5woj7h6aflq0kdwvzwlbbe7ct0ba7-e59bg0t79q67ogd61ydwxc5yq"
}

и если я использую этот токен вручную с помощью команды docker swarm join на сервереЯ хочу объединить с менеджером это работает. Таким образом, переменная имеет правильное значение, и связь между узлами работает. Но я просто не могу заставить join_token работать. Я использую ANSI 2.8.5 с Python 2.7.5.

Я знаю, что могу использовать модуль оболочки, но я не хочу этого делать.

1 Ответ

0 голосов
/ 08 октября 2019

Я думаю, что проблема здесь от rezult.swarm_facts.JoinTokens.Worker. В отладочной информации это выглядит как "msg": "SWMTKN-1-5p7...", но опция join_token: из конфигурации Ansible ожидает, что это будет простой токен без дополнительных оболочек как "msg": и т. Д.

...