ansible自动化运维(3)——编写ansible的playbook文件

以下所有的实验来都是在redhat7.3上


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      #检查生效的主机
# ansible-playbook a.yml --start-at-task="启动apache服务"     #指定从某个task开始运行

Playbook核心元素

Hosts 执行的远程主机列表
Tasks 任务集
Varniables 内置变量或自定义变量在playbook中调用
Templates 模板,可替换模板文件中的变量并实现一些简单逻辑的文件
Handlers 和 notity 结合使用,由特定条件触发的操作,满足条件方才执行,
否则不执行
tags 标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible
具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其
确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可
以通过tags跳过此些代码片断

在上一个实验以及实验环境下继续操作编写playbook文件

3.编写playbook实现自动安装服务

(1)由于yml文件语法的要求,我们先编写一个特定的vim,一个tab等于两个空格

[devops@server5 ~]$ pwd
/home/devops
[devops@server5 ~]$ vim .vimrc   #将tab键设置成两个空格的缩进
autocmd  FileType yaml  setlocal ai ts=2 sw=2 et

在这里插入图片描述
在这里插入图片描述
(2)开始编写yml文件

[devops@server5 ansible]$ pwd
/home/devops/ansible
[devops@server5 ansible]$ vim playbook.yml 

---
- hosts: web   给web组里面的主机server3安装httpd服务并且开启服务
  tasks:
    - name: install apache   #安装apache
      yum:
        name:
          - httpd
          - php
        state: present

    - name: start apache  #开启apache
      service:
        name: httpd
        state: started

    - name: config firewalld  #设置firewalld的配置文件
      firewalld:
        service: http   # 通过ansible将server6上的httpd服务加入防火墙策略
        permanent: yes
        state: enabled
[devops@server5 ansible]$ ansible-playbook --syntax-check playbook.yml    #检测语法格式
[devops@server5 ansible]$ ansible-playbook --list-hosts playbook.yml      #检测主机
[devops@server5 ansible]$ ansible-playbook --list-tasks playbook.yml	   检测所有任务
[devops@server5 ansible]$ ansible-playbook playbook.yml  #执行脚本文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(5)在server6上查看,是否安装成功
在这里插入图片描述
成功安装

##开启两个服务httpd和firewalld

[devops@server5 ansible]$ vim playbook.yml 
 12       service:				
 13         name: "{{ item }}"  
 14         state: started
 15       loop:             #loop循环关键字
 16         - httpd
 17         - firewalld
[devops@server5 ansible]$ ansible-playbook playbook.yml

在这里插入图片描述
在这里插入图片描述
#在server6上进行验证
在这里插入图片描述

4.编写playbook实现修改apache配置文件,并且加入触发器

[devops@server5 apache]$ vim playbook.yml 
 11     - name: config apache
 12       copy:
 13         src: httpd.conf
 14         dest: /etc/httpd/conf/httpd.conf

在这里插入图片描述
在这里插入图片描述

#以server1上apache/目录下的文件为模板,给server3复制一份,
[devops@server5 ansible]$ scp server6:/etc/httpd/conf/httpd.conf .
httpd.conf                                    100%   11KB  11.5KB/s   00:00 
[devops@server5 ansible]$ ls
ansible.cfg  httpd.conf  inventory  playbook.yml
#准备server5上的文件
[devops@server5 ansible]$ mkdir apache   #是为了看起来没有那么凌乱,便于查询
[devops@server5 ansible]$ ls
ansible.cfg  apache  inventory
[devops@server5 ansible]$ mv httpd.conf playbook.yml apache/
[devops@server5 ansible]$ cd apache/
[devops@server5 apache]$ ls

在这里插入图片描述

[devops@server5 ansible]$ ansible-playbook apache/playbook.yml   #建立了目录,需要以这种形式推送;

在这里插入图片描述
在这里插入图片描述

其实server6上已经有了配置文件,这里只是想体现一个这个功能
使用md5sum进行验证,查看server5和server6的配置一样

#server5
[devops@server5 apache]$ md5sum  httpd.conf 
f5e7449c0f17bc856e86011cb5d152ba  httpd.conf
#server6
[root@server6 ~]# cd /etc/httpd/conf
[root@server6 conf]# md5sum  httpd.conf
f5e7449c0f17bc856e86011cb5d152ba  httpd.conf

在这里插入图片描述
在这里插入图片描述
从图中可以看出成功;
为了更好的验证,在server5上修改httpd.conf

[devops@server5 apache]$ vim httpd.conf 
Listen 8080
[devops@server5 ansible]$ ansible-playbook apache/playbook.yml
[devops@server5 apache]$ md5sum  httpd.conf
04e9239e7bd5d5b9b85864226d60eee5  httpd.conf

在这里插入图片描述
在这里插入图片描述
#开始执行脚本文件,并且配置文件的md5sum
在这里插入图片描述
#在server6上验证httpd的md5sum与server5是一样的

[root@server6 conf]# md5sum  httpd.conf
04e9239e7bd5d5b9b85864226d60eee5  httpd.conf

在这里插入图片描述

##但是发现server6的http的端口还是80端口并没有该为8080
在这里插入图片描述

为了上述问题加入触发器以及触发条件

[devops@server5 apache]$ pwd
/home/devops/ansible/apache
[devops@server5 apache]$ vim playbook.yml 
 15       notify: restart apache    #触发条件
 31   handlers:					#触发器
 32     - name: restart apache
 33       service:
 34         name: httpd
 35         state: restarted
[devops@server5 ansible]$ ansible-playbook apache/playbook.yml

在这里插入图片描述
在这里插入图片描述
#执行脚本文件
在这里插入图片描述
执行成功,验证发现server6上的端口确实改变了,这就实现了修改配置文件
在这里插入图片描述
再次验证,将sever5上的8080端口该为80
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
##添加变量,并且Template生成目标文件,copy 无法对配置文件进行修改,将80端口加入到yml文件中
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
#template模板生成目标文件,可以进行修改,拷贝apache文件
在这里插入图片描述
#我们发现server5和server6的md5sum是不一样的,且server6的md5sum并没有改变,是因为在server5上的yml文件设置的端口还是80端口,因此server6保持不变
在这里插入图片描述
在这里插入图片描述
##可以进行验证
将其变量端口该为8080;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
##将apache的配置文件该为ip:port静态方式

定义变量

[web]
172.25.70.6 http_host=172.25.70.6

在这里插入图片描述
#在模板文件中引用变量

# vim httpd.conf.j2
Listen  {{ http_host }}:{{http_port}}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
##将主机设置为webserver

在这里插入图片描述
开始执行
在这里插入图片描述
在这里插入图片描述

#在server7上进行验证
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
##将yml文件中的8080变量改为80,再进行执行脚本文件(这里就不展示了),server6和server7的端口都会变为80端口,还原主机文件
在这里插入图片描述

##将apache的配置文件该为ip:port的动态方式
#查看web组主机的详细信息
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

#将server6上的172.25.70.6:80改为80
在这里插入图片描述在这里插入图片描述
#开始执行脚本文件
在这里插入图片描述在这里插入图片描述
#在server6进行查看验证,发现80已经被改为了172.25.70.6:80

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

5.将远程配置进行域名解析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
#在server6进行验证
在这里插入图片描述


以下所有的实验来都是在redhat7.5上


6.获得远端服务器的主机信息,并存储在指定的文件下

ansible web -m setup | less:获取web组所有主机的所有信息

[wxh@server5 ansible]$ vim hostinfo.j2
主机名:{{ ansible_facts['hostname'] }}
IP地址:{{ ansible_facts['default_ipv4']['address'] }}
空闲内存:{{ ansible_facts['memfree_mb'] }}MB
内核版本:{{ ansible_facts['kernel'] }}
磁盘根分区大小:{{ ansible_facts['devices']['dm-0']['size'] }}GB

[wxh@server5 ansible]$ vim info.yml 

---
- hosts: webserver
  tasks:
    - name: create hosts info message
      template:
        src: hostinfo.j2
        dest: /tmp/info

#查看主机信息
在这里插入图片描述

#1编写主机信息
在这里插入图片描述
在这里插入图片描述
#2编写执行文件
在这里插入图片描述
在这里插入图片描述
#3编写主机信息
在这里插入图片描述
在这里插入图片描述
#4执行
在这里插入图片描述
在这里插入图片描述
#在server6和server7的信息验证
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值