目录
一、playbook
1 简介
2 playbook语法
3 playbook示例
检测语法
列出任务
列出tag
指定执行主机
执行yaml文件
4 playbook基础
主机与用户
Tasks 列表
一、playbook
1 简介
Playbook与ad-hoc相比,是一种完全不同的运用。
playbook是一种简单的配置管理系统与多机器部署系统的基础,且非常适合于复杂应用的部署。
playbook中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤,并且可以同步或异步的发起任务。
使用playbook可以方便的重用这些代码,可以移植到不同的机器上面。
playbook才是ansible真正强大之处。
2 playbook语法
playbook由YMAL语言编写,以下为playbook常用到的YMAL格式:
文件的第一行应该以"—"三个连字符开始,表明YMAL文件的开始。
在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
YMAL中的列表元素以”-”开头然后紧跟着一个空格,同一个列表中的元素应该保持相同的缩进:
一个字典是由一个简单的 键: 值 的形式组成(这个冒号后面必须是一个空格):
name: Example Developer
job: Developer
skill: Elite
字典也可以使用缩进形式来表示
{name: Example Developer, job: Developer, skill: Elite}
3 playbook示例
yaml 以缩进
进行判断
autocmd FileType yaml setlocal ai ts=2 sw=2 et
setlocal ##设定当前文件
ai ##自动退格对齐 auto indent
ts ##tab建长度为2空格 tabstop=2
sw ##缩进长度为2 shiftwidth=2
et ##把tab键变成空格 expandtab
设定一个tab=2个空格
vim apache.yml
Playbook的核心组件:
name 可选,建议使用多用于说明
hosts 受控主机列表
tasks 任务
用与选择执行部分代码
- hosts: test 单独主机/ 组 /多个组 /all都可
tasks:
- name: install apache 任务1
yum:
name: httpd
state: present
- name: start apache 任务2
service:
name: httpd
state: started
检测语法
[root@ansible ansible]# ansible-playbook --syntax-check apache.yml
列出任务
列出tag
当前未设定标签
指定执行主机
当yal文件中未指定执行主机,可以使用limit进行指定;当文件和命令行指定不同主机时,以文件中指定的主机优先!
执行yaml文件
Gathering Facts 采集数量
明等性,检测是否执行过,相同状态一致不执行
4 playbook基础
主机与用户
- hosts: server2 //指定主机组,可以是一个或多个组,逗号分隔。
remote_user: root //指定远程主机执行的用户名
---
- hosts: webservers
remote_user: root
become: yes //切换用户运行
become_user: mysql //指定sudo用户为mysql
Tasks 列表
Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。如果一个host执行task失败,整个tasks都会回滚。
每一个task必须有一个名称name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。
tasks:
- name: install apache //定义任务名
- 定义一个task,常见的格式:”module: options” 例如:
tasks:
- name: install apache
yum: name=httpd state=present
也可以写成以下格式:
- name: "apache"
service:
name: httpd
state: started
- Ansible的自带模块中,command模块和shell模块无需使用key=value格式:
tasks:
- name: disable selinux
command: /sbin/setenforce 0
- 使用 command 和 shell 时,我们需要关心返回码信息:
tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand
ignore_errors: True //返回值如果不为0,就会报错,tasks停止。
- 执行playbook
ansible-playbook apache.yml
ansible-playbook apache.yml --syntax-check //检查yaml文件的语法是否正确
ansible-playbook apache.yml --list-task //检查tasks任务
ansible-playbook apache.yml --list-hosts //检查生效的主机
ansible-playbook apache.yml --start-at-task="start apache"
//指定从某个task开始运行
检查生效的主机