Ansible 角色任务失败 docker 群节点加入

Ansible roles task failing docker swarm node join

我在加入工作节点和管理器节点时遇到问题。但是我在加入集群中的工作人员时遇到了系统问题。

docker_worker_token 设置为另一台主机。

host1:
    - name: Get the worker join-token.
      shell: docker swarm join-token -q worker
      with_items:
        - "{{ groups['manager'] }}"
      register: docker_worker_token

host2:

    - name: join node to the cluster
      shell: docker swarm join --token {{ hostvars[item]['docker_worker_token'] }} {{ managerip }}:2377
      with_items:
        - "{{ groups['manager'] }}"

我得到的错误是这样的。

failed: [188.166.30.64] (item=188.166.17.148) => {"changed": true, "cmd": "docker swarm join --token {'msg': u'All items completed', 'changed': True, 'results': [{u'changed': True, u'end': u'2016-09-10 13:42:11.439043', '_ansible_no_log': False, u'stdout': u'SWMTKN-1-34rdkhgb6ij6njvzdnutvbt8ee3crelm5as7dm7c7y7s03nvr3-9m0c8vp9hjb84ne90etapxec5', '_ansible_item_result': True, 'item': u'188.166.17.148', u'delta': u'0:00:00.016042', u'cmd': u'docker swarm join-token -q worker', u'stderr': u'', u'rc': 0, 'invocation': {'module_name': u'command', u'module_args': {u'warn': True, u'executable': None, u'_uses_shell': True, u'_raw_params': u'docker swarm join-token -q worker', u'removes': None, u'creates': None, u'chdir': None}}, 'stdout_lines': [u'SWMTKN-1-34rdkhgb6ij6njvzdnutvbt8ee3crelm5as7dm7c7y7s03nvr3-9m0c8vp9hjb84ne90etapxec5'], u'start': u'2016-09-10 13:42:11.423001', u'warnings': []}]} 188.166.17.148:2377", "delta": "0:00:00.060083", "end": "2016-09-10 13:42:24.251326", "failed": true, "item": "188.166.17.148", "rc": 1, "start": "2016-09-10 13:42:24.191243", "stderr": "\"docker swarm join\" requires exactly 1 argument(s).\nSee 'docker swarm join --help'.\n\nUsage: docker swarm join [OPTIONS] HOST:PORT\n\nJoin a swarm as a node and/or manager", "stdout": "", "stdout_lines": [], "warnings": []}

现在我如何编写 {{ hostvars[item]['docker_worker_token'] }} 以便我可以从 hostvars 中获取令牌信息。

输出中的 cmd 值给了你一个提示:

{{ hostvars[item]['docker_worker_token'].results[0].stdout }}

但我几乎可以肯定,您在任务 将节点加入集群 以及设置 docker_worker_token 变量的任务中无缘无故地使用了 with_items ?所以你最终在你的变量中有不必要的 results 层。