自动化运维工具——Ansible学习(二)

目录

一、handlers和notify结合使用触发条件

1.新建httpd.yml文件

2.复制配置文件到ansible的files目录中

3.卸载被控机已安装的httpd

4.执行httpd.yml脚本

5.更改httpd.conf配置文件

6.使用handlers

7.重新执行httpd.yml脚本

8.检查被控机的端口号是否改变

9.handlers也可以触发多个

二、tags

1.通过指定标签来执行特定的动作

2.停止httpd服务

3.检查是否成功停止

4.执行启动服务的tags

5.重新检查服务是否启动

6.也可以针对多个标签执行脚本

7.多个动作对应一个标签tags

三、playbook中变量的使用

1.定义1个变量

(1)编写脚本

(2)启动脚本时对脚本中的变量进行赋值

(3)检查程序是否成功安装、服务是否成功开启

2.定义2个变量

(1)编写脚本

(2)执行脚本

(3)查看程序是否安装成功

(4)卸载程序

3.在脚本内部给变量赋值

(1)编写脚本

(2)执行脚本

(3)检查程序是否成功安装

(4)卸载程序

4.在主机清单中给脚本定义变量


一、handlers和notify结合使用触发条件

Handlers

        是task列表,这些task与前述的task的task并没有本质上的不同,用于当关注的资源发生变化时,才会采取一定的操作。

        Notify此action可用于在每个play的最后被触发,这样可避免多次有改变发生时每次都执行指定的操作,仅在所有的变化发生完成后一次性地执行指定操作。在notify中列出的操作成为handler,也即notify中调用handler中定义的操作。

例如:更新配置文件,重新启动playbook,系统不会重启服务。

1.新建httpd.yml文件

[root@ansible145 ansible]# vim httpd.yml---
- hosts: websrvsremote_user: roottasks:- name: install httpd packageyum: name=httpd- name: copy conf filecopy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes- name: start serviceservice: name=httpd state=started enabled=yes

2.复制配置文件到ansible的files目录中

[root@ansible145 ansible]# ll /etc/httpd/conf/httpd.conf 
-rw-r--r--. 1 root root 11753 May 30 21:49 /etc/httpd/conf/httpd.conf[root@ansible145 ansible]# cp /etc/httpd/conf/httpd.conf files/[root@ansible145 ansible]# tree
.
├── files
│   ├── httpd.conf
│   ├── index.html
│   └── test.html
├── file.yml
├── hello2.yml
├── hello.yml
├── host.sh
└── selinux

3.卸载被控机已安装的httpd

检查端口号,80端口已开启,需要卸载httpd

卸载命令

[root@ansible145 ansible]# ansible all -m yum -a 'name=httpd state=absent'

检查被控机的80端口已消失

4.执行httpd.yml脚本

# 检查语法
[root@ansible145 ansible]# ansible-playbook -C httpd.yml# 语法没问题再执行脚本
[root@ansible145 ansible]# ansible-playbook -C httpd.yml

被控机已成功安装并启动httpd服务,80端口已启动

[root@ansible145 ansible]# ansible websrvs -m shell -a 'ss -ntl | grep :80'
192.168.22.142 | CHANGED | rc=0 >>
LISTEN     0      128         :::80                      :::*                  
192.168.22.141 | CHANGED | rc=0 >>
LISTEN     0      128         :::80                      :::* 

5.更改httpd.conf配置文件

修改端口号为8080

[root@ansible145 ansible]# vim ./files/httpd.conf

再次执行httpd.yml后,检查80端口号,依然还在启动,没有变为8080

6.使用handlers

因此,当我们修改程序的配置文件时,重新执行ansible脚本需要重启服务,变为最新的配置和服务,此时,就需要用到handlers。

---
- hosts: websrvsremote_user: roottasks:- name: install httpd packageyum: name=httpd- name: copy conf filecopy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yesnotify: restart service  # 标记改变的任务,名字要与handlers下的name一一对应# 告诉handlers,当配置文件发生改变时,执行handlers下面的重启服务任务- name: start serviceservice: name=httpd state=started enabled=yeshandlers: # 当上面的某个或某些任务改变时,执行下面的任务- name: restart serviceservice: name=httpd state=restarted

更改主控机的配置文件,因为第二次执行脚本时,更改后的配置文件8080端口已经复制到被控机上了,如果不更改,就相当于配置文件没有变。

[root@ansible145 ansible]# vim ./files/httpd.conf

7.重新执行httpd.yml脚本

[root@ansible145 ansible]# ansible-playbook httpd.yml 

8.检查被控机的端口号是否改变

端口号改变,服务成功重启!

9.handlers也可以触发多个

- hosts: websrvsremnte user: roottasks:- name: add group nginxtags: useruser: name=nginx state=present- name: add user nginxuser: name=nginx state=present group=nginx- name: Inslall Ngiixyum: name=nginx state=present- name: configcopy: src=/root/contig.txt dest=/etc/nginx/nginx.confnotify:- Restart Nginx- Check Nginx Processhandlers:- name: Restart Nginxservice: name=nginx state=restarted enabled=yes- name: Check Nginx processshell: killall -0 nginx > /tmp/nginx.log

二、tags

1.通过指定标签来执行特定的动作

---
- hosts: websrvsremote_user: roottasks:- name: install httpd packageyum: name=httpdtags: inshttpd- name: copy conf filecopy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yesnotify: restart service- name: start serviceservice: name=httpd state=started enabled=yestags: rshttpdhandlers:- name: restart serviceservice: name=httpd state=restarted

2.停止httpd服务

[root@ansible145 ansible]# ansible websrvs -m service -a 'name=httpd state=stopped'

3.检查是否成功停止

4.执行启动服务的tags

[root@ansible145 ansible]# ansible-playbook -t rshttpd httpd.yml

5.重新检查服务是否启动

6.也可以针对多个标签执行脚本

# 卸载httpd
[root@ansible145 ansible]# ansible websrvs -m yum -a 'name=httpd state=absent'# 检查是否成功卸载
[root@ansible145 ansible]# ansible websrvs -m shell -a 'rpm -q httpd'# 执行多个tags
[root@ansible145 ansible]# ansible-playbook -t inshttpd,rshttpd httpd.yml # 启动的服务为默认的80端口
[root@ansible145 ansible]# ansible websrvs -m shell -a 'ss -ntl | grep :80'
192.168.22.141 | CHANGED | rc=0 >>
LISTEN     0      128         :::80                      :::*                  
192.168.22.142 | CHANGED | rc=0 >>
LISTEN     0      128         :::80                      :::* 

7.多个动作对应一个标签tags

脚本:

---
- hosts: websrvsremote_user: roottasks:- name: install httpd packageyum: name=httpdtags: httpd- name: copy conf filecopy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yesnotify: restart service- name: start serviceservice: name=httpd state=started enabled=yestags: httpdhandlers:- name: restart serviceservice: name=httpd state=restarted
# 卸载httpd
[root@ansible145 ansible]# ansible websrvs -m yum -a 'name=httpd state=absent'# 检查是否成功卸载
[root@ansible145 ansible]# ansible websrvs -m shell -a 'rpm -q httpd'# 执行tags
[root@ansible145 ansible]# ansible-playbook -t httpd httpd.yml # 启动的服务为默认的80端口
[root@ansible145 ansible]# ansible websrvs -m shell -a 'ss -ntl | grep :80'
192.168.22.141 | CHANGED | rc=0 >>
LISTEN     0      128         :::80                      :::*                  
192.168.22.142 | CHANGED | rc=0 >>
LISTEN     0      128         :::80                      :::* 

查看标签:

[root@ansible145 ansible]# ansible-playbook httpd.yml --list-tagsplaybook: httpd.ymlplay #1 (websrvs): websrvs	TAGS: []TASK TAGS: [httpd]

三、playbook中变量的使用

使用变量可以对不同的被控机进行不同的操作。

ansible websrvs -m setup | grep ansible_fqdnansible websrvs -m setup | grep ansible_hostnameansible websrvs -m setup -a 'filter=ansible_fqdn'ansible websrvs -m setup -a 'filter=ansible_hostname'ansible websrvs -m setup -a 'filter=ansible_*'ansible websrvs -m setup -a 'filter=*address'ansible websrvs -m setup -a 'filter=ansible_all_ipv4_addresses'ansible websrvs -m setup -a 'filter=ansible_eth0'

1.定义1个变量

(1)编写脚本

vim app.yml---
- hosts: appsrvsremote_user: roottasks:- name: install  packageyum: name={{ pkname }}- name: start serviceservice: name={{ pkname }} state=started enabled=yes

(2)启动脚本时对脚本中的变量进行赋值

[root@ansible145 ansible]# ansible-playbook -e 'pkname=vsftpd' app.yml

(3)检查程序是否成功安装、服务是否成功开启

2.定义2个变量

(1)编写脚本

---
- hosts: appsrvsremote_user: roottasks:- name: install  packageyum: name={{ pkname1 }}- name: install  packageyum: name={{ pkname2 }}

(2)执行脚本

[root@ansible145 ansible]# ansible-playbook -e 'pkname1=httpd pkname2=memcached' app.yml 

(3)查看程序是否安装成功

(4)卸载程序

[root@ansible145 ansible]# ansible appsrvs -m shell -a 'yum -y remove httpd memcached vsftpd'

3.在脚本内部给变量赋值

上面两个脚本都是在命令行对脚本中的变量进行赋值的,我们也可以在脚本内部给变量赋值。

(1)编写脚本

---
- hosts: appsrvsremote_user: rootvars:- pkname1: httpd- pkname2: vsftpdtasks:- name: install  packageyum: name={{ pkname1 }}- name: install  packageyum: name={{ pkname2 }}

(2)执行脚本

[root@ansible145 ansible]# ansible-playbook app.yml 

(3)检查程序是否成功安装

(4)卸载程序

[root@ansible145 ansible]# ansible appsrvs -m shell -a 'yum -y remove httpd vsftpd'

4.在主机清单中给脚本定义变量

[root@ansible145 ansible]# vim /etc/ansible/hosts

vim hostname.yml---
- hosts: websrvsremote_user: roottasks:- name: set hostnamehostname: name=www{{ http_port }}.test.com

执行脚本

# 检查语法
[root@ansible145 ansible]# ansible-playbook -C hostname.yml # 执行脚本
[root@ansible145 ansible]# ansible-playbook hostname.yml# 查看websrvs主机名是否成功更改
[root@ansible145 ansible]# ansible websrvs -a 'hostname'
192.168.22.141 | CHANGED | rc=0 >>
www81.test.com
192.168.22.142 | CHANGED | rc=0 >>
www82.test.com

上面的修改主机名的脚本中,www{}test.com部分是公用的,也可以对其进行修改

修改/etc/ansible/hosts文件

修改脚本

vim hostname.yml---
- hosts: websrvsremote_user: roottasks:- name: set hostnamehostname: name={{ nodename }}{{ http_port }}.{{ domainname }}

执行脚本后查看主机名,已经被成功修改

注意:如果在上述地方都设置后,在命令行对变量进行重新赋值,则命令行的优先级最高

[root@ansible145 ansible]# ansible-playbook -e 'nodename=web domainname=example.com' hostname.yml 

普通变量的优先级比分组的公共变量的优先级高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26688.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 设计模式——装饰者模式

目录 1.概述2.结构3.案例实现3.1.抽象组件3.2.具体组件3.3.抽象装饰3.4.具体装饰3.5.测试 4.优缺点5.使用场景6.JDK 源码解析——BufferedWriter7.装饰者模式和静态代理的比较 1.概述 (1)我们先来看一个快餐店的例子:快餐店有炒面、炒饭这些…

【DC-DC】AP5193 DC-DC宽电压LED降压恒流驱动器 LED电源驱动IC

产品 AP5193是一款PWM工作模式,高效率、外围简单、内置功率MOS管,适用于4.5-100V输入的高精度降压LED恒流驱动芯片。最大电流2.5A。AP5193可实现线性调光和PWM调光,线性调光脚有效电压范围0.55-2.6V.AP5193 工作频率可以通过RT 外部电阻编程来设定&…

怎么自学网络安全?遇到问题该怎么解决?

趁着今天下班,我花了几个小时整理了下,非常不易,希望大家可以点赞收藏支持一波,谢谢。 我的经历: 我 19 年毕业,大学专业是物联网工程,我相信很多人在象牙塔里都很迷茫,到了大三大…

Kafka学习笔记(高级篇)

目录 高级功能 高效读写 涉及技术 ZooKeeper 自定义拦截器 监控 延迟消费 一些改进手段 高级功能 高效读写 涉及技术 高吞吐量:Kafka 每秒可以处理数百万消息。这是因为 Kafka 消息的处理是以批处理(Batching)的方式来完成的&…

SpringBoot+Vue的学生选课管理系统

1. 技术栈 前端:Vue ElementUI Axios后端:Spring BootMyBatis Plus Jwt MysqlSwagger 2. 系统设计 该系统主要分为五个模块,分别是:学生管理、教师管理、课程管理、开课表管理以及学生成绩管理 角色分为学生、教师、管理员&…

如何搭建自己的图床(GitHub版)

文章目录 1.图床的概念2.用GitHub创建图床服务器2.1.新建仓库2.2.生成Token令牌2.3.创建img分支和该分支下的img文件夹(可选) 3.使用PicGo软件上传图片3.1 下载PicGo软件3.2配置PicGo3.3用PicGo实现上传 4. Typora实现自动上传5.免费图片网站 前言: 如果没有自己的服…

Xshell配置以及使用教程

目录 一、Xshell介绍 二、安装Xshell 三、使用Xshell连接Linux服务器 一、Xshell介绍 Xshell 分为免费版和专业版,是一款远程连接虚拟机系统的 SSH 客户机软件; Xshell免费版官网下载地址:家庭/学校免费 - NetSarang Websitehttps://www…

半小时漫画计算机

ISBN: 978-7-121-41557-9 作者:刘欣(码农翻身) 绘画:刘奕君 页数:210页 阅读时间:2023-06-03 推荐指数:★★★★★ 以漫画的形式来讲解计算机的基础知识, 主要涉及到CPU、内存、网络…

“layui助力博客管理升级!用增删改查功能打造优质博客体验“

目录 引文1.前置条件2.数据接口2.1 UserDao(CRUD)2.2 R工具类 3.HTML 结构3.1 主界面的HTML3.2 用户的查询所有界面的HTML3.3 新增修改通用的的HTML 4.JavaScript 代码4.1 用户的CRUD javaScript 代码(userManage)4.2 新增修改的javaScript代码(userEdit) 5. 运行截图总结 引文…

kubernetes中特定域名使用自定义DNS服务器出现的解析异常

故障发生背景: 租户反馈生产业务服务连接到中间件的时候,偶尔会有连接失败的情况,然后我们查看对应组件服务正常,手动请求组件服务也显示正常,让租户查看业务服务日志发现报错无法解析对应的域名,我们手动是…

【雕爷学编程】Arduino动手做(163)---大尺寸8x8LED方格屏模块7

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

laravel6.x文档阅读手册

laravel中文文档6.x 目录 一、入门指南 安装 服务器要求 安装 Laravel Laravel 使用 Composer 来管理项目依赖。因此,在使用 Laravel 之前,请确保你的机器已经安装了 Composer。 通过 Laravel 安装器 首先,通过使用 Composer 安装 Lara…