Linux下Ansible Playbooks的简单使用—搭建httpd服务(三)

续我的上篇博文:https://mp.csdn.net/postedit/88871287。即Ansible已经部署好

 

 

一、Playbook简介

 

Playbook 是由一个或多个play组成的列表,主要功能是将task定义好的角色归并为一组进行统一管理,也就是通过Ansible的模板将多个play组织在一个Playbook中运行。

 

二、Playbook格式

 

playbook由YMAL语言编写。YAML参考了其他多种语言,包括:XML、C语言、Python、Perl等。MAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。以下为playbook常用到的YMAL格式。

  • .yml文件,开头习惯上以"---"开头。但是"---"也可以不写。
  • YMAL中的列表元素以"-"开头然后紧跟着一个空格,后面为元素内容。就像这样- host。即"-"后面要增加一个空格。
  • 同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。
  • playbook中hosts,variables,roles,tasks等对象的表示方法都是键值中间以”:”分隔,":"后面还要增加一个空格。即":"后面要增加一个空格。
  • 剧本以.yml后缀。

 

三、Playbook的核心元素

 

Playbook本身由以下各部分组成:
(1)Hosts:运行指定任务的目标主机;
(2)Tasks:任务,即调用模块完成的操作;
(3)Variables:变量;
(4)Templates:模板;
(5)Handles:处理器,当某条件满足时,触发执行的操作;
(6)Roles:角色

 

四、编写,并运行“安装httpd服务,拷贝httpd服务的配置文件httpd.conf,开启httpd服务“的playbook

 

1、编写“安装httpd服务,拷贝httpd服务的配置文件httpd.conf,开启httpd服务“的playbook文件

[root@server1 ~]# cd /etc/ansible/   #递归创建/etc/ansible/playbooks/httpd目录,以便存放httpd.yml文件。其中目录的名字及地方任意给,httpd.yml文件的名字也是任意给,只要保证文件以".yml"结尾即可
[root@server1 ansible]# mkdir playbooks
[root@server1 ansible]# cd playbooks/
[root@server1 playbooks]# mkdir httpd
[root@server1 playbooks]# cd httpd/
[root@server1 httpd]# vim httpd.yml
---
# httpd部署
- hosts: server2
  remote_user: root   #利用root用户的身份(这句也可以不写,因为执行该文件的用户是谁,默认就是适用男谁的身份)
  tasks:
    - name: install httpd   #安装httpd服务
      yum: name=httpd state=present

    - name: config httpd   #拷贝httpd服务的配置文件httpd.conf
      copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
      notify: restart httpd   #启动触发器

    - name: start httpd   #启动httpd服务
      service: name=httpd state=started

  handlers:   
    - name: restart httpd   #编辑触发器。这里name的名字必须和notify后面的名字相同。
      service: name=httpd state=restarted
#因为server1上可能没有httpd.conf文件,所以需要先将server2上的httpd.conf文件拷贝到server1上(server2上的httpd.conf文件来源于之前使用Ansible的yum模块安装的httpd服务生成的配置文件)
[root@server2 ~]# scp /etc/httpd/conf/httpd.conf server1:/etc/ansible/playbooks/httpd

 

2、运行“安装httpd服务,拷贝httpd服务的配置文件httpd.conf,开启httpd服务“的playbook文件

[root@server1 httpd]# ls
httpd.conf  httpd.yml
[root@server1 httpd]# ansible-playbook httpd.yml --syntax-check   #检查httpd.yml文件是否有语法错误。值的注意的是:执行该命令的目录下必须有http.yml文件。
[root@server1 httpd]# ansible-playbook httpd.yml --list-hosts   #列出httpd.yml文件中的所写的针对的主机的主机名。值的注意的是:执行该命令的目录下必须有http.yml文件。
[root@server1 httpd]# ansible-playbook httpd.yml --list-tasks   #列出httpd.yml文件中的所写的任务列表。值的注意的是:执行该命令的目录下必须有http.yml文件。
[root@server1 httpd]# ansible-playbook httpd.yml   #运行httpd.yml文件

  • 在server2端查看,httpd服务是否已经开启,httpd服务是否已经安装

 


当运行.yml文件失败时,会在当前目录下生成文件.retry文件,将其直接删除即可。


 

#也可以指定从哪个具体的任务开始执行
[root@server1 httpd]# ansible-playbook httpd.yml --start-at-task="start httpd"   #指定从start httpd这个任务开始往后执行

 

3、从2的运行结果图中,我们可以看到,并没有触发触发器。这是因为httpd.conf文件就是从server2端拷贝到server1端的,所以从server1端拷贝到server2端,并没有导致sever2端的httpd.conf文件的改变,所以不会触发触发器。

下面我们首先来证明一下httpd.conf文件没有改变,然后再手动改变httpd.conf文件来触发触发器。

 

<1>证明httpd.conf文件没有改变

[root@server1 httpd]# ls
httpd.conf  httpd.yml
[root@server1 httpd]# md5sum httpd.conf   #查看server1端的httpd.conf文件的md5值
f5e7449c0f17bc856e86011cb5d152ba  httpd.conf
[root@server2 ~]# md5sum /etc/httpd/conf/httpd.conf   #查看server2端的httpd.conf文件的md5值
f5e7449c0f17bc856e86011cb5d152ba  /etc/httpd/conf/httpd.conf

#结论
我们可以看到server1端和server2端的httpd.conf文件的md5值相同,所以表明httpd.conf文件没有改变

 

<2>手动改变httpd.conf文件来触发触发器

[root@server1 httpd]# vim httpd.conf 
42 Listen 8080   #将端口改为8080
[root@server1 httpd]# md5sum httpd.conf   #再次查看httpd.conf文件的md5值,发现md5值发生改变
04e9239e7bd5d5b9b85864226d60eee5  httpd.conf
[root@server1 httpd]# ansible-playbook httpd.yml    #再次运行httpd.yml文件

  • 在server2端查看,httpd服务的端口是否已经修改为8080

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值