自动化运维工具ansible实战第二章(初识编排神器playbook)
Posted Linux蛋蛋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维工具ansible实战第二章(初识编排神器playbook)相关的知识,希望对你有一定的参考价值。
ansible执行任务的两种模式
ad-hoc模式: ad-hoc 模式(点对点模式),ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于 bash 中的一句 shell即上一章讲解的模式为ad-hoc.
playbook模式:被称为剧本模式,playbook 通过多个 tasks 集合完成一类功能,如 Web 服务的安装部署、数据库服务器的批量备份等。可以简单地把 playbook 理解为通过组合多条 ad-hoc 操作的配置文件。
如图所示的流程
playbook特点
1.0易度的编排语言-YAML
2.0适合配置管理和应用部署
3.0非常适合部署复杂的工作
开始实战
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
1.0编写一个nginx部署yml文件,并用ansible部署到web组,并测试结果
1.1 编写nginx文件
mkdir ansible-nginx &&cd ansible-nginx
cat nginx.yml
---
- hosts: web #指定标签组
vars:
hello: Ansible #定义变量
tasks:
- name: "配置nginx源"
yum_repository:
name: nginx
description: nginx repo
baseurl: http://nginx.org/packages/centos/7/$basearch/
gpgcheck: no
enabled: 1
- name: "安装nginx"
yum:
name: nginx
state: latest
- name: "编写虚拟主机的配置文件"
copy:
src: ./site.conf
dest: /etc/nginx/conf.d/site.conf
- name: "创建虚拟主机目录"
file:
dest: /var/www/html
state: directory
- name: "启动nginx"
service:
name: nginx
state: started
- name: "测试nginx页面"
shell: echo "hello {{hello}}" > /var/www/html/index.html
#引用变量{{}}表示
#测试nginx.yml文件是否有问题
ansible-playbook nginx.yml --syntax-check #测试语法
1.12 编写虚拟主机配置文件,注意同级目录
cat site.conf
server {
listen 88;
server_name www.baidu.com;
location / {
root /var/www/html;
index index.html index.htm;
}
}
1.2 开始用ansible将nginx部署到web组
ansible-playbook nginx.yml
刚才编写的六个任务都在ansible主机上执行成功了,测试结果也都ok
1.3用handlers对yml文件实现任务控制,不改变的文件不执行操作
cat test.conf
server {
listen 80;
server_name www.test.com;
location / {
root /var/www/html;
index index.html index.htm;
}
}
#curl 192.168.1.21:80 -H “Host:www.test.com” 测试
1.31 默认配置
cat ng.yml
---
- hosts: web #指定主机组
gather_facts: no #不收集目标主机的信息
remote_user: root #指定用户
tasks:
- name: copy nginx config file #拷贝nginx配置文件
copy:
src: test.conf
dest: /etc/nginx/conf.d
- name: restart nginx
service: name=nginx state=reloaded #重启nginx
1.32 增加handlers配置
cat ng.yml ca’t
---
- hosts: web #指定主机组
gather_facts: no #不收集目标主机的信息
remote_user: root #指定用户
tasks:
- name: copy nginx config file #拷贝nginx配置文件
copy:
src: test.conf
dest: /etc/nginx/conf.d
notify: restart nginx #此任务执行才会执行“restart nginx”命名的任务
handlers:
- name: restart nginx
service: name=nginx state=reloaded #重启nginx
ansible-playbook ng.yml
绿色表示没有执行,黄色表示执行成功,说明handlers实现了tasks任务的控制,不执行上一个任务,下一个任务可以控制不执行
1.4 tags给每个任务打标签,打完标签后可以选择指定过滤的指定的任务执行或者不执行
#单独执行这两个任务
ansible-playbook nginx.yml --tags "install,echo"
#过滤这两个任务,执行剩下的任务
ansible-playbook nginx.yml --skip-tags “install,echo”
1.5 用debug检查变量是否引用正确
ansible-playbook nginx.yml --tags echo
输出变量值为ansible
1.6 实战部署tomcat
mkdir /root/tomcat_install && cd /root/tomcat_install
cat tomcat.yml
---
- hosts: web
gather_facts: no
vars:
tomcat_version: 8.5.61
tomcat_install_dir: /usr/local
tasks:
- name: "安装 jdk1.8"
yum: name=java-1.8.0-openjdk state=present
- name: "下载 tomcat"
get_url: url=http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v{{tomcat_version}}/bin/apache-tomcat-{{tomcat_version}}.tar.gz dest=/tmp
- name: "解压 tomcat"
unarchive:
src: /tmp/apache-tomcat-{{tomcat_version}}.tar.gz
dest: "{{tomcat_install_dir}}"
copy: no #yes表示拷贝本地的,no表示拷贝目标主机上的文件
- name: "启动tomcat"
shell: cd {{tomcat_install_dir}} &&
mv apache-tomcat-{{tomcat_version}} tomcat8 &&
cd tomcat8/bin && nohup ./startup.sh &
两台机器分别完成了tomcat的自动部署,playbook简单应用至此完成
以上是关于自动化运维工具ansible实战第二章(初识编排神器playbook)的主要内容,如果未能解决你的问题,请参考以下文章