# 复杂的playbook
## 逐台主机执行
升级负载均衡时,需要逐台进行,以实现恢复升级。
### serial语句
一般来说,当task失败时,ansible会停止执行失败的那台主机上的任务。
```
- name: upgrade packages on servers behind load balance
hosts: localhost
serial: 1
max_fail_percentage: 25
tasks:
......
```
> 这里超过25%失败
## 只执行一次
比如数据库备份,在多台主机只只需要选出一台进行备份。
### run\_once语句
```
- name:run database migrations
command: /opt/run_migrations
run_once: true
```
# 过滤
## default 过滤器
指定变量的默认值
```
“HOST”: "{{ database_host | default('localhost') }}"
```
## 文件路径过滤器
处理包含控制主机文件系统的文件路径。
```
basename # 文件路径中的文件名
dirname # 文件路径中的目录
expanduser # 将文件路径中 ~ 替换为文件路径
realpath # 处理符号链接后的文件实际路径
```
## [自定义过滤插件](https://coding.net/u/echohiyang/p/ansible_plugins/git)
- 目录
- ansible基础
- ansible简介
- ansible安装和测试
- ansible配置文件
- yaml在ansible中的用法
- inventory
- 变量与facts
- when语句
- handler模块
- 大杂烩
- ansible模块
- copy模块
- cron模块
- debug模块
- django_manage模块
- file模块
- git模块
- hostname模块
- lineinfile模块
- mysql_user模块
- mysql_db模块
- pip模块
- selinux
- setup模块
- shell 和 command模块
- stat模块
- supervisorctl
- systemd
- timezone
- unarchive模块
- user模块
- wait_for
- yum和service模块
- 其他模块或者方法
- 其他
- 报错处理
- playbooks
- 复杂的playbook
- 循环
- roles