1.playbook简介
Playbook与ad-hoc相比,是一种完全不同的运用
playbook是一种简单的配置管理系统与多机器部署系统的基础,且非常适合于复杂应用的部署
playbook中可以编排有序的执行过程,甚至于做到在多组机器间
来回有序的执行特别指定的步骤,并且可以同步或异步的发起任务
使用playbook可以方便的重用这些代码,可以移植到不同的机器上面
playbook才是ansible真正强大之处
2.playbook语法
playbook由YMAL语言编写,以下为playbook常用到的YMAL格式:
(1)文件的第一行应该以"—"三个连字符开始,表明YMAL文件的开始。
(2)在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
(3)YMAL中的列表元素以”-”开头然后紧跟着一个空格,同一个列表中的元素应该保持相同的缩进:
(4)一个字典是由一个简单的 键: 值 的形式组成(这个冒号后面必须是一个空格),字典也可以使用缩进形式来表示
**
主机与用户
---
- 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 #定义任务名
执行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 #检查生效的主机
3.编写playbook实现自动安装服务
(1)由于yml文件语法的要求,我们先编写一个特定的vim,一个tab等于两个空格
可以参考这这两个配置文件
vim /etc/vimrc (vim效果)
vim /usr/share/vim/vimfiles/template.spec
pwd
vim .vimrc
autocmd FileType yaml setlocal ai ts=2 sw=2 et
开始编写yml文件
1:安装并开启httpd服务
vim /home/devops/ansible/apache/install.yml
---
- hosts: test ##定义主机或组
tasks: ##定义任务
- name: install apache ##输入任务名称,并且使用具体模块来执行具体任务
yum: ##此处位置是具体模块
name: httpd ##服务为httpd
state: present ##安装
- name: start apache
service:
name: httpd
state: started ##开启
给test组里面的主机server2安装httpd服务并且开启服务
语法检测:
ansible-playbook apache/install.yml --syntax-check
-C:做测试(并没有真正的跑程序)
ansible-playbook -C apache/install.yml
查看文件的内容
ansible-playbook apache/install.yml --list-hosts
查看文件的任务
ansible-playbook apache/install.yml --list-tasks
开始运行:
ansible-playbook apache/install.yml
server2查看:
ps ax | grep httpd
2: 编写playbook实现修改配置文件,并且加入触发器
将本地发布文件copy到server2的默认发布目录下,
开启防火墙,设置防火墙策略,进行访问
---
- hosts: test
tasks:
- name: install apache
yum:
name: httpd
state: present
- name: start apache
service:
name: httpd
state: started
enabled: yes ##加入开机自启
##将本地发布文件copy到server2的默认发布目录下,必须有index.html文件看截图
- name: create index.html
copy:
src: index.html
dest: /var/www/html/index.html
##开启防火墙
- name: start firewalld
service:
name: firewalld
state: started
enabled: yes
##设置防火墙策略(在策略中设置允许httpd来进行访问)
- name: config firewalld
firewalld:
service: http
state: enabled
permanent: yes ##永久开启
immediate: yes ##立即开启
##本地进行访问
- hosts: localhost
become: false
tasks:
- name: test apache
uri:
url: http://172.25.78.2
return_content: yes ##返回访问的结果
注意:此位前面使用doc方式,调用uri模块
可以成功推
3:端口变更的访问
(1)
将server2apache的主配置文件scp到本地
cd /home/devops/ansible
scp server2:/etc/httpd/conf/httpd.conf apache/
成功
cat hosts
cd apache/
mv httpd.conf httpd.conf.j2 ##模版
vim httpd.conf.j2
42 Listen {
{ http_port }} ##使用变量模式
vim apache/install.yml
---
- hosts: test
tasks:
- name: install apache
yum:
name: httpd
state: present
- name: config apache
template: ##此模块可以解析下面的变量
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: restart apache ##触发器
- name: start apache
service:
name: