playbook由YMAL语言编写,以下为playbook常用到的YMAL格式:
---
# 一个美味水果的列表
- Apple
- Orange
- Mango
一个字典是由一个简单的 键: 值 的形式组成(这个冒号后面必须是一个空格):
---
# 一位职工的记录
name: Example Developer
job: Developer
skill: Elite
字典也可以使用缩进形式来表示, 如果你喜欢这样的话:
---
# 一位职工的记录
{name: Example Developer, job: Developer, skill: Elite}
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
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
[root@ansible ansible]# ansible-playbook -C apache.yml
当yal文件中未指定执行主机,可以使用limit进行指定;当文件和命令行指定不同主机时,以文件中指定的主机优先!!!
Gathering Facts 采集数量
明等性,检测是否执行过,相同状态一致不执行
---
- hosts: server2 //指定主机组,可以是一个或多个组,逗号分隔。
remote_user: root //指定远程主机执行的用户名
---
- hosts: webservers
remote_user: root
become: yes //切换用户运行
become_user: mysql //指定sudo用户为mysql
Play的主体部分是task列表
,task列表中的各任务按次序逐个在hosts中指定的主机上执行
,即在所有主机上完成第一个任务后再开始第二个任务。如果一个host执行task失败,整个tasks都会回滚。tasks:
- name: install apache //定义任务名
所有主机上完成第一个任务后再开始第二个任务。如果一个host执行task失败,整个tasks都会回滚。
tasks:
- name: install apache
yum: name=httpd state=present
也可以写成以下格式:
- name: "启动apache服务"
service:
name: httpd
state: started
tasks:
- name: disable selinux
command: /sbin/setenforce 0
tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand
ignore_errors: True //返回值如果不为0,就会报错,tasks停止。
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开始运行
将node1的httpd.conf复制到ansible主机端
检测语法并执行
此处发现未执行,因为ansible端和node1端的配置文件相同,可以使用md5sum
进行校验
ansible端修改监听端口为8080
此时md5sum
校验码已经改变!!!
重新执行yml文件,发现改变,
node1和node2端的httpd.conf中的端口已经修改为8080, 但是未生效!!!
重新修改yaml文件,
---
- hosts: test
tasks:
- name: install apache
yum:
name: httpd
state: present
- name: config apache
copy:
src: httpd.conf
dest: /etc/httpd/conf/httpd.conf
notify: restart apache
- name: start apache
service:
name: httpd
state: started
handlers: %在发生改变时执行的操作
- name: restart apache
service:
name: httpd
state: restarted
修改本地的conf文件中的端口为8000,执行yaml文件
测试:
访问8000端口成功
完成脚本,要求自动配置软件仓库并安装启动ftp,允许匿名用户访问
repo.yml
用 playbook 剧本的方式在安装 dns 服务,维护 westos.org 的域,在这个域中有三个网址,www.westos.org 对应的 ip 是 172.25.28.28,bbs.westos.org 对应的是 westosa.westos.org 对应的 ip 是 172.25.28.100 和 172.25.28.200