ansible Playbooks运用

一、ansible Playbook 简单介绍。
ansible可以使用普通命令的方式管理主机,如果服务器数量多的话,配置信息比较多,一个一个的敲出来就有点繁琐了,还容易出错,这时可以使用ansible playbook 编写剧本,从而实现更加简便的方式实现任务处理的自动化与流程化。
playbook其实就像shell脚本一样,脚本是由多个命令组成,而playbook由多个任务,多个模块组成一个完整的流程控制集合。
二、基本语法书写。
Playbook主要有以下四部分构成:
target:定义将要执行playbook的远程主机组
variable:定义playbook运行时需要使用的变量
task :定义将要在远程主机上执行的任务列表
handler:定义task执行完成以后需要调用的任务
下面是一个很基本的剧本(Playbook又称为剧本)

---
- hosts: web
  remote_user: root
  tasks:
    - name: install httpd
      yum: name=httpd state=installed
    - name: add index file
      copy: src=/root/index.html dest=/var/www/html/index.html
    - name: start service
      service: name=httpd state=started enabled=yes

解析如下:

---  #三个杠表示剧本文件的开头
- hosts: web #执行任务的主机列表,这里是给web主机组
  remote_user: root  #远程执行用户
  tasks:  #任务的开始
    - name: install httpd  #每一个tasks必须有一个名称name,可以理解为一个标记,执行时可以看到
      yum: name=httpd state=installed  #使用yum模块执行安装http的功能
    - name: add index file
      copy: src=/root/index.html dest=/var/www/html/index.html #使用copy模块复制主页文件
    - name: start service
      service: name=httpd state=started enabled=yes  #使用service模块开启服务

其中要注意:
同级的缩进要对齐,hosts,remote_user,tasks 就是同级
每一个模块都使用key=value格式如remote_user: root 冒号后面有空格
remote_user: root 对应 key: value 如果不明白key=value 就记住模块后面等于值,写的时候冒号加空格
三、剧本的使用
ansible-playbook -C inshttp.yml
ansible-playbook(命令) -C(选项) inshttp.yml(剧本文件) 一般直接命令加文件也可以
-C选项 可以检查语法是否有问题,不真实执行。
在这里插入图片描述
可以看到:ok =4 说明语法没问题 chenged=0 说明没有做改变。
下面使用ansible-playbook inshttp.yml 执行一下
在这里插入图片描述
可以看到有三处改变。
如果没问题被控端会安装好http,拷贝文件,并开启服务。
这里是被控端的截图:在这里插入图片描述
在这里插入图片描述
这就是一个最基本的使用了。
四、Handlers的使用
handler:定义task执行完成以后需要调用的任务
handlers能用到什么地方呢?
举例:如果配置文件需要修改,比如现在要修改index.html的内容,修改过后再次执行,那么ansible会把新的文件拷贝过去,但是不会重启服务,我们的修改就没有意义了。这时可以使用handlers。
handler由 notify和handlers组成,notify位置的任务执行那么会调用handlers里的任务,下面是一个修改文件后执行重启的例子。

---
- hosts: web
  remote_user: root
  tasks:
    - name: install httpd
      yum: name=httpd state=installed
    - name: add index file
      copy: src=/root/index.html dest=/var/www/html/index.html
      notify: restart httpd #notify这里的任务如果执行,就会触发下面handlers模块的restart httpd 任务,这里notify仅监控添加文件这一段
    - name: start service
      service: name=httpd state=started enabled=yes
  handlers:#这里的任务可以有多个
    - name: restart httpd
      service: name=httpd state=restarted

这里修改了文件内容:
在这里插入图片描述
在这里插入图片描述
执行后可以看到文件修改并重启了。
五、tags标签的使用
tags用于让用户选择运行或略过playbook中的部分代码。

- hosts: web
  remote_user: root
  tasks:
    - name: install mem
      yum: name=memcached state=installed
      tags: insmem #这里为任务添加了一个标签,可以选择仅执行此任务
    - name: add index file
      copy: src=/root/index.html dest=/var/www/html/index.html
      tags: addfile#这里也是
      notify: restart httpd
    - name: start service
      service: name=httpd state=started enabled=yes
      tags: staservice #这里也是
  handlers:
    - name: restart httpd
      service: name=httpd state=restarted

ansible-playbook -t insmem inshttp.yml 仅执行insmem标签的任务其他任务忽略,也可以同时执行多个标签,逗号隔开。
在这里插入图片描述
六、变量的使用
变量的三种定义方式:
1,hosts文件中定义
在 /etc/ansible/hosts文件中定义filename变量,值是aaa.
在这里插入图片描述
下面使用变量查看效果
在这里插入图片描述
ansible-playbook a.yml 会报一下警告:这个警告的意思是现在使用的shell模块创建文件,推荐使用file模块

在这里插入图片描述
执行后效果如下:
在这里插入图片描述
2,在剧本文件中定义
插入了以下两行:

vars:
  - filename: bbb

在这里插入图片描述
执行效果如下:
在这里插入图片描述

ansible-playbook -e 'filename=ccc' a.yml
-e 指定变量

执行效果如下
在这里插入图片描述
以上就是3种定义变量的方式了。
七、templates的使用
templates的作用就是根据变量动态生成不同的文件,templates文件必须放于templates目录下,
templates目录要和剧本文件同一个位置。
下面提一个需求,默认安装好http是监听了本机所有ip,现在要求监听自己的指定ip。
为了看出效果,这里准备两个http服务器。
ansible web -m setup 是ansible的一个模块,执行后可以看到每个机器的各种信息。
ansible web -m setup|grep address 可以使用过滤,找到ip地址对应的变量
可以看到变量address对应了ip地址
知道了ip的变量后开始创建templates模板、
首先在剧本文件相同位置创建一个名为templates的目录、
然后将模板文件拷贝到这下面

mkdir templates   
cp /etc/httpd/conf/httpd.conf templates/httpd.conf.j2

hosts添加变量
在这里插入图片描述
然后修改模板文件
vim templates/httpd.conf.j2
在这里插入图片描述
下面修改剧本:
在这里插入图片描述
这里一般配合Handlers使用,修改后重启
ansible-playbook a.yml
执行后结果:
192.168.43.20的配置文件如下:
在这里插入图片描述
192.168.43.31的配置文件如下:
在这里插入图片描述
下面是一个模板拷贝后重启的写法:

---
- hosts: web
  remote_user: root
  tasks:
    - name: copy file
      template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
      notify: restart httpd
 
  handlers:
    - name: restart httpd
      service: name=httpd state=restarted
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值