一、Playbook简介
Playbook 是由一个或多个play组成的列表,主要功能是将task定义好的角色归并为一组进行统一管理,也就是通过Ansible的模板将多个play组织在一个Playbook中运行。
二、Playbook格式
- YMAL中的列表元素以"-“开头然后紧跟着一个空格,后面为元素内容。就像这样- host。即”-"后面要增加一个空格。
- 同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。
- playbook中hosts,variables,roles,tasks等对象的表示方法都是键值中间以”:”分隔,":“后面还要增加一个空格。即”:"后面要增加一个空格。
- 文件以.yml后缀。
三、编写playbook
[devops@server4 ansible]$ vim playbook.yml
#写入:
- hosts: prod
tasks:
- name: install httpd #安装httpd服务
yum:
name: install
state: persent
- name: start httpd
service:
name: httpd
state: started
[devops@server4 ansible]$ ansible-playbook
playbook.yml --syntax-check
#检测语法,显示没有问题
[devops@server4 ansible]$ ansible-playbook playbook.yml --list-tasks
playbook: playbook.yml
play #1 (prod): prod TAGS: []
tasks:
install httpd TAGS: []
start httpd TAGS: [] #显示要执行的任务
[devops@server4 ansible]$ ansible-playbook playbook.yml #执行
(rpm -q --scripts httpd 查看软件安装时都做了什么)
[devops@server4 ansible]$ vim playbook.yml
#写入:
---
- hosts: test
tasks:
- name: install httpd
yum:
name: httpd
state: present
- name: configure http
copy:
src: httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: root
group: root
mode: 644
notify: restart httpd
- name: start httpd
service:
name: httpd
state: started
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
[root@server5 ~]# scp /etc/httpd/conf/httpd.conf server4:/home/devops/ansible/
[devops@server4 ansible]$ ansible-playbook playbook.yml #执行
四、加防火墙的httpd
[devops@server4 ansible]$ vim playbook.yml
#写入:
- name: start httpd and firewalld #更改的内容
service:
name: "{{item}}"
state: started
loop:
- httpd
- firewalld
- name: configure firewalld #新增的内容
firewalld:
service: http
permanent: yes
immediate: yes
state: enabled
[devops@server4 ansible]$ ansible-playbook playbook.yml #执行
[devops@server4 ansible]$ vim playbook.yml
#写入:
---
- hosts: webserver
tasks:
- name: install httpd
yum:
name: httpd
state: present
- name: copy index.html
copy:
src: files/index.html
dest: /var/www/html/index.html
- name: configure http
copy:
src: files/httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: root
group: root
mode: 644
notify: restart httpd
- name: start httpd and firewalld
service:
name: "{{item}}"
state: started
loop:
- httpd
- firewalld
- name: configure firewalld
firewalld:
service: http
permanent: yes
immediate: yes
state: enabled
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
- hosts: localhost
become: no
tasks:
- name: test httpd
uri:
url: http://172.25.28.6
status_code: 200
[devops@server4 ansible]$ mkdir files
[devops@server4 ansible]$ cd files/
[devops@server4 files]$ echo www.westos.org > index.html
[devops@server4 files]$ cd ..
[devops@server4 files]$ cp httpd.conf files/
[devops@server4 ansible]$ vim inventory
#写入:
localhost
[test]
172.25.28.5
[prod]
172.25.28.6
[webserver:children]
test
prod
[devops@server4 ansible]$ ansible-playbook playbook.yml #执行