1. 简介
Ansible提供了Playbook、Roles的功能来更方便的组织批量执行的操作,一般Playbook由以下几部分组成:
--- # 语法规定首行需要写
- hosts: webservers # 定义执行主机/组
vars:
# 定义变量
tasks:
# 定义tasks
handlers:
# 定义触发器
2. 常用选项
- 指定并行执行的进程数:-f, --forks, 默认是5
ansible-playbook -i hosts deploy_lnmp.yml --forks=10
- 检查语法:--syntax-check
ansible-playbook -i hosts deploy_lnmp.yml --syntax-check
- 测试playbook,并不真正执行:--check
ansible-playbook -i hosts deploy_lnmp.yml --check
- 列出执行的主机列表:--list-hosts
ansible-playbook -i hosts deploy_lnmp.yml --list-hosts
- 限制指定的主机:--limit
ansible-playbook -i hosts deploy_lnmp.yml --limit 192.168.44.154
- 列出可执行的tags:--list-tags
ansible-playbook -i hosts deploy_lnmp.yml --list-tags
- 指定执行的tag:--tags
ansible-playbook -i hosts deploy_lnmp.yml --tags TAG_NAME
- 跳过指定的tags:--skip-tags
ansible-playbook -i hosts deploy_lnmp.yml --skip-tags "second ping","third ping"
- 列出可执行的tasks:--list-tasks
ansible-playbook -i hosts deploy_lnmp.yml --list-tasks
- 从指定的task执行:--start-at-task
ansible-playbook -i hosts deploy_lnmp.yml --start-at-task "task name"
- 按步执行,需要手动确认:--step
ansible-playbook -i hosts deploy_lnmp.yml --step
- 指定执行用户、特权:
--become-method BECOME_METHOD 默认sudo,可以通过ansible-doc -t become -l列出其它选项
--become-user BECOME_USER 指定执行用户,默认root
-K, --ask-become-pass 询问特权账号密码
-b, --become 指定执行用户,一般visudo需要设置特权用户NOPASSWORD
3. 触发操作
在Playbook中通过在tasks中定义的notify触发在handlers块下定义的执行流程,使用场景如:当nginx的配置被改变时,可以通过notify触发执行重启nginx的操作。使用handlers通常注意以下几点:
- 每个handler的名字必须是唯一的,并且只有被notify时(&配置被改变)才会执行
- 如果一个handler被notify了多次,其只会在Playbook的最后执行一次
- 如果一个playbook在运行到handlers之前失败了,则handler不会被执行
- 如果需要在中途执行handler操作,需要meta来实现
下面是一段配置示例:
---
- name: Verify apache installation
hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: Ensure apache is at the latest version
ansible.builtin.yum:
name: httpd
state: latest
- name: Write the apache config file
ansible.builtin.template:
src: /srv/httpd.j2
dest: /etc/httpd.conf
notify:
- Restart apache
- name: Ensure apache is running
ansible.builtin.service:
name: httpd
state: started
handlers:
- name: Restart apache
ansible.builtin.service:
name: httpd
state: restarted
在一个task中notify多个handler
- name: Template configuration file
ansible.builtin.template:
src: template.j2
dest: /etc/foo.conf
notify:
- Restart memcached
- Restart apache
handlers:
- name: Restart memcached
ansible.builtin.service:
name: memcached
state: restarted
- name: Restart apache
ansible.builtin.service:
name: apache
state: restarted