跳到主要内容

ansible任务控制-循环语句with_items

ansible任务控制-循环语句with_items使用场景为当我们要对某一些任务需要批量处理,例如重启服务,如果使用原先的service模块是只能写一个服务的,再比如使用copy或者template模块拷贝文件或目录,单个模块只能拷贝一个文件,这个时候就需要用到循环了

使用示例

使用示例1,使用service模块同时重启2个服务

编辑yml文件

cat > task_with_items.yml EOF
- hosts: devops01
tasks:
- name: restart nginx mysql
service:
name:
"{{ item }}"
state:
restarted
with_items:
- nginx
- mysqld
EOF

执行yml文件

$ ansible-playbook task_with_items.yml 

PLAY [devops01] ****************************************************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************************************************
ok: [devops01]

TASK [restart nginx mysql] *****************************************************************************************************************************
changed: [devops01] => (item=nginx)
changed: [devops01] => (item=mysqld)

PLAY RECAP *********************************************************************************************************************************************
devops01 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

使用示例2,批量创建多个用户和组

编辑yml文件

cat > task_with_items_adduser.yml EOF
- hosts: devops01
tasks:
- name: add user1-5 group1-5
user:
name:
"{{ item.username }}"
groups:
"{{ item.groupname }}"
state:
present
with_items:
- { username: 'user1', groupname: 'root' }
- { username: 'user2', groupname: 'root' }
- { username: 'user3', groupname: 'root' }
- { username: 'user4', groupname: 'root' }
- { username: 'user5', groupname: 'root' }
EOF

执行yml文件

$ ansible-playbook task_with_items_adduser.yml 

PLAY [devops01] ****************************************************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************************************************
ok: [devops01]

TASK [add user1-5 group1-5] ****************************************************************************************************************************
changed: [devops01] => (item={u'username': u'user1', u'groupname': u'root'})
changed: [devops01] => (item={u'username': u'user2', u'groupname': u'root'})
changed: [devops01] => (item={u'username': u'user3', u'groupname': u'root'})
changed: [devops01] => (item={u'username': u'user4', u'groupname': u'root'})
changed: [devops01] => (item={u'username': u'user5', u'groupname': u'root'})

PLAY RECAP *********************************************************************************************************************************************
devops01 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0