学习目标:
学习内容:
迭代with_items
迭代:当有需要重复性执行的任务时,可以使用迭代机制
- 对迭代项的引用,固定变量名 “item”
- 要在task中使用with_items给定要迭代的元素列表
- 列表格式:字符串 字典
[root@zabbix_server ansible]# cat testitem.yml
---
- hosts: all
remote_user: root
tasks:
- name: create file
file: name=/home/myscripts/{{ item }} state=touch
when: ansible_hostname == "zabbix_agent2"
with_items:
- file1
- file2
- file3
[root@zabbix_server ansible]# ansible-playbook testitem.yml
PLAY [all] **************************************************************************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************************************************************
ok: [172.28.102.130]
ok: [172.28.102.131]
TASK [create file] ******************************************************************************************************************************************************************************************
skipping: [172.28.102.131] => (item=file1)
skipping: [172.28.102.131] => (item=file2)
skipping: [172.28.102.131] => (item=file3)
changed: [172.28.102.130] => (item=file1)
changed: [172.28.102.130] => (item=file2)
changed: [172.28.102.130] => (item=file3)
PLAY RECAP **************************************************************************************************************************************************************************************************
172.28.102.130 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.28.102.131 : ok=1 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
[root@zabbix_server ansible]# ansible all -m shell -a 'ls /home/myscripts'
172.28.102.130 | CHANGED | rc=0 >>
file1
file2
file3
hostname.sh
newfile
172.28.102.131 | CHANGED | rc=0 >>
hostname.sh
newfile
迭代子嵌套变量
[root@zabbix_server ansible]# ansible 172.28.102.130 -m shell -a 'getent passwd'|tail -3
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1001:1001::/home/user2:/bin/bash
user3:x:1002:1002::/home/user3:/bin/bash
[root@zabbix_server ansible]# ansible 172.28.102.130 -m shell -a 'getent group'|tail -3
g1:x:1000:
g2:x:1001:
g3:x:1002
template for if
roles
ansible自1.2版本引入的新特性,用于层次性、结构化的组织playbook。roles能够根据层次型结构装载变量,tasks以及handlers等,要使用roles只需要在playbook中使用include指令即可,简单来讲,roles就是分别通过变量,文件,任务,模块及处理器放置与单独的目录中,并可以便捷的include他们的一种机制,角色一版用于主机构建服务的场景中,但也可以用于构建守护进程等场景中,
复杂场景:建议使用roles,代码复用度高
- 变更指定主机或主机组
- 如命名不规范维护和传承成本大
- 某些功能需多个playbook,通过include即可实现
角色(roles):角色集合
roles/
mysql/
httpd/
nginx/
memcached/
roles目录结构
安装nginx的样例
[root@zabbix_server ansible]# ll
total 36
-rw-r--r-- 1 root root 19984 Apr 28 21:36 ansible.cfg
-rw-r--r-- 1 root root 1232 Apr 30 10:27 hosts
-rw-r--r-- 1 root root 1016 Apr 27 11:24 hosts.bak
-rw-r--r-- 1 root root 59 May 2 16:00 nginx_role.yml
drwxr-xr-x 3 root root 4096 May 2 16:03 roles
[root@zabbix_server ansible]# tree roles/
roles/
└── nginx
├── tasks
│ ├── group.yml
│ ├── main.yml
│ ├── restart.yml
│ ├── start.yml
│ ├── template.yml
│ ├── user.yml
│ └── yum.yml
└── templates
└── nginx.conf.j2
3 directories, 8 files
[root@zabbix_server ansible]# pwd
/etc/ansible
[root@zabbix_server tasks]# cat group.yml
- name: create group
group: name=nginx gid=80
[root@zabbix_server tasks]# cat user.yml
- name: create user
user: name=nginx uid=80 group=nginx system=yes shell=/sbin/nologin
[root@zabbix_server tasks]# cat yum.yml
- name: install package
yum: name=nginx
[root@zabbix_server tasks]# cat start.yml
- name: start service
service: name=nginx state=started enabled=yes
[root@zabbix_server tasks]# cat main.yml
- include: group.yml
- include: user.yml
- include: yum.yml
- include: template.yml
- include: start.yml
[root@zabbix_server tasks]# cat template.yml
- name: copy template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
学习产出:
提示:这里统计学习计划的总量
例如:
- 技术笔记 2 遍
- CSDN 技术博客 3 篇
- 习的 vlog 视频 1 个