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
层。
我在加入工作节点和管理器节点时遇到问题。但是我在加入集群中的工作人员时遇到了系统问题。
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
层。