dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:161回复:0

ansible 使用循环完成重复性任务

楼主#
更多 发布于:2018-07-10 15:49
目标
学习在 ansible-playbook 模式,使用循环完成重复性任务。

要点
ansible-playbook 配置文件
1. 使用 synchronize 模块,进行文件同步,详细参考这里
2. 使用 with_items 模块,进行文件(夹)拷贝。

示例
1. 先来看下没有使用循环的 playbook “剧本文件”
cat sync-1.yml
---
- hosts: node1
  tasks:
    - name: rancher-nfs
      synchronize:
        mode: pull
        src: "/var/lib/rancher/volumes/rancher-nfs"
        dest: "/data/backup/node1/"

    - name: node1-aof
      synchronize:
        mode: pull
        src: "/var/lib/docker/volumes/smln_rds-data_569fb"
        dest: "/data/backup/node1/"

- hosts: node3
  tasks:
    - name: node3-aof
      synchronize:
        mode: pull
        src: "/var/lib/docker/volumes/scfs_redis-data_9ef00"
        dest: "/data/backup/node3/"

    - name: node3-sign
      synchronize:
        mode: pull
        src: "/var/lib/docker/volumes/smln_sign-data_19978"
        dest: "/data/backup/node3/"

2. 使用循环方式的 playbook “剧本文件”
cat sync-2.yml
---
- hosts: node1
  tasks:
    - name: sync node1
      synchronize: mode=pull src=\{{ item.src }\} dest=\{{ item.dest }\}
      with_items:
        - { src: "/var/lib/rancher/volumes/rancher-nfs", dest: "/data/backup/node1/" }
        - { src: "/var/lib/docker/volumes/smln_rds-data_569fb", dest: "/data/backup/node1/" }

- hosts: node3
  tasks:
    - name: sync node3
      synchronize: mode=pull src=\{{ item.src }\} dest=\{{ item.dest }\}
      with_items:
        - { src: "/var/lib/docker/volumes/scfs_redis-data_9ef00", dest: "/data/backup/node3/" }
        - { src: "/var/lib/docker/volumes/smln_sign-data_19978", dest: "/data/backup/node3/" }

注意: 上面的 play-book 配置文件,去掉 \{\} 中的反斜杠。

3. 执行任务
ansible-playbook sync-2.yml PLAY [node1]
...省略
TASK [node3] **********************************************************************************************************************************
changed: [node3] => (item=/var/lib/docker/volumes/scfs_redis-data_9ef00)
changed: [node3] => (item=/var/lib/docker/volumes/smln_sign-data_19978)

PLAY RECAP ************************************************************************************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0  
node3                      : ok=2    changed=1    unreachable=0    failed=0  

小结
这两个“剧本文件” 功能上是完全相同的,但是对比就会发现使用循环方式内容更加简洁,对于重复性任务使用循环方式更适合

参考
http://www.ansible.com.cn/docs/playbooks_loops.html#standard-loops
Ansible synchronize 模块
#
游客

返回顶部