Ansible 使用循环完成重复性任务
2018-07-10 by dongnan
目标
学习在 ansible-playbook
模式,使用循环完成重复性任务。
要点
ansible-playbook 配置文件
- 使用
synchronize
模块,进行文件同步,详细参考这里。 - 使用
with_items
模块,进行文件(夹)拷贝。
举个栗子
不使用循环
先来看下没有使用循环的 playbook “剧本文件”
---
- 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/"
使用循环
使用循环方式的 playbook “剧本文件”
---
- 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/" }
执行 playbook 任务
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
小结
这两个 playbook
剧本文件功能上是完全相同的,但是对比就会发现使用循环方式内容更加简洁,对于重复性任务使用循环方式更适合。