Ansible:如何在循环中使用register

时间:2015-09-15 03:47:24

标签: loops ansible

ansible version 1.9.1

cat files.yml

tasks:
  - name: stat files
    stat: path=~/{{ item }}
    register: {{ item }}.stat
    with_items:
      - foo.zip
      - bar.zip

  - name: copy files
    copy: src=~/{{ item }} dest=/tmp/{{ item }}
    register: {{ item }}.result
    when: {{ item }}.stat.stat.exists == False
    with_items:
      - foo.zip
      - bar.zip

- name: unzip files
  shell: cd /tmp/ && unzip -o {{ item }}
  when: {{ item }}.result|changed == True
  with_items:
    - foo.zip
    - bar.zip

错误:加载YAML脚本时出现语法错误

若然,怎么样?

1 个答案:

答案 0 :(得分:1)

首选方法是使用synchronize模块。 来自ansible文档(http://docs.ansible.com/ansible/synchronize_module.html#synopsis

  

这是rsync的包装器。当然,您可以使用命令操作自己调用rsync,但您还必须添加相当数量的样板选项和主机事实。您仍然可能需要通过命令或shell直接调用rsync,具体取决于您的用例。同步操作意味着可以轻松地使用rsync执行常见操作。它不提供对rsync的全部功能的访问,但确实使大多数调用更容易遵循。

以下是一个例子:

- name: Sync files
  synchronize: src=some/relative/path dest=/some/absolute/path