定位来自先前命令结果的主机列表

时间:2019-05-16 16:22:56

标签: ansible

我有一本针对我清单中的主机列表的剧本。 大多数任务都针对那些主机。 但是其中之一需要确定从先前命令中检索到的主机的列表。

例如,当我尝试定位docker swarm集群上的所有节点时:

- name: get nodes ip
  command: >
      NODE_LIST="" && for NODE in $(docker node ls --format '{{.Hostname}}'); do NODE_LIST=$NODE_LIST"$(docker node inspect --format '{{.Status.Addr}}' "${NODE}"),"; done && echo $NODE_LIST
  register: nodes_list
  failed_when: no

- hosts: nodes_list
  tasks:
   - copy:
       src: data/
       dest: "{{ service.data }}"

不幸的是,这样做会导致错误:

  

在任务中未检测到任何操作。这通常表示拼写错误的模块   名称或错误的模块路径

我想ansible期待着另一个任务,在这里,而不是另一个任务列表。 由于我对ansible相当陌生,所以我不知道该如何执行。

有什么主意吗?

编辑:遵循评论建议,以下是适用于我的解决方案:

- name: get docker version
  shell: >
      NODE_LIST="" && for NODE in $(docker node ls \-\-format {{ '{{' }}.Hostname{{ '}}' }}); do NODE_LIST=$NODE_LIST"$(docker node inspect \-\-format {{ '{{' }}.Status.Addr{{ '}}' }} "${NODE}"),"; done && echo ${NODE_LIST%?}
  register: nodes_list
  failed_when: no

- name: Add previously retrieved node list to groups
  add_host:
    name: '{{ nodes_list.stdout }}'
    groups: nodes

- name: copy (for example) some data into each nodes
  copy:
    src: {{source_folder }}
    dest: "{{ deploy.data_path }}"
    owner: "{{ user.name }}"
    group: "{{ user.group }}"
    mode: u=rwx,g=rx,o=r
  delegate_to: "{{ item }}"
  with_items: "{{ nodes_list.stdout.split(',') }}"

0 个答案:

没有答案