yaml语言
通过yaml编写剧本,完成web的部署,配置,启动的全过程。ansible服务器(master)
清理一下环境
ansible all -m yum -a 'name=httpd state=removed' -o
准备配置文件
yum install -y httpd
创建文件夹(存放httpd配置文件和剧本)
mkdir apache
cd apache
把配置文件拷进来
cp -rf /etc/httpd/conf/httpd.conf .
更改配置文件监听8080端口
vim httpd.conf
Listen 8080
编写剧本(注意空格与缩进)
vim apache.yaml
- hosts: host2
tasks:
- name: install apache packages
yum: name=httpd state=present
- name: copy apache conf
copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
- name: ensure apache is running
service: name=httpd state=started enabled=yes
测试语法是否有误
[root@ansible apache]# ansible-playbook apache.yaml --syntax-check
playbook: apache.yaml
执行
[root@ansible apache]# ansible-playbook apache.yaml
PLAY [host2] *******************************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************
ok: [host2]
TASK [install apache packages] *************************************************************************************************
ok: [host2]
TASK [copy apache conf] ********************************************************************************************************
ok: [host2]
TASK [ensure apache is running] ************************************************************************************************
ok: [host2]
PLAY RECAP *********************************************************************************************************************
host2 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
打开浏览器测试是否成功
如果配置文件发生变化(Listen 9090)
再次执行剧本,命令成功,但是配置不会生效,所以要增加处理程序。设置触发器。
再次执行,生效
Role-角色扮演
意义
roles是在ansible中,playbooks的目录组织结构。将代码或文件进行模块化,成为roles的文件目录组织结构,易读,代码可重用,层次清晰。
利用role远程部署nginx并配置
需要的目录结构
nginx 角色名
files 普通文件
handlers 触发器程序
tasks 主任务
templates 金甲模板(有变量的文件)
vars 自定义变量
创建所需的环境
mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p
touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml
echo "hello world" > roles/nginx/files/index.html
yum install -y nginx && cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2
编写任务
vim roles/nginx/tasks/main.yaml
---
- name: install epel-release packge
yum: name=epel-release state=latest
- name: install nginx packge
yum: name=nginx state=latest
- name: copy index.html
copy: src=index.html dest=/usr/share/nginx/html/index.html
- name: copy nginx.conf template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: restart nginx
- name: make sure nginx service running
service: name=nginx state=started enabled=yes
#准备配置文件
vim roles/nginx/templates/nginx.conf.j2
{{ ansible_processor_cores }}内部变量,查看内核数
默认先调用后copy
#自定义变量(可写可不写)
vim roles/nginx/vars/main.yaml
worker_connections:10000#最大连接数
编写处理程序
vim roles/nginx/handlers/main.yaml
- name: restart nginx
service: name=nginx state=restarted
vim roles/site.yaml
- hosts: host3
roles:
- nginx
实施
cd roles
ansible-playbook site.yaml --syntax-check #测试语法是否有误
ansible-playbook site.yaml #实施剧本
验证host3
成功!