Ansible自动化运维中剧本角色(roles)来完成apache服务操作

 

🏡作者主页:点击! 

🐧Linux基础知识(初学):点击!

🐧Linux高级管理防护和群集专栏:点击!

🔐Linux中firewalld防火墙:点击!

Ansible自动化运维:点击!

⏰️创作时间:2024年8月8日8点8分


目录

1.编写YAML

2.执行剧本

2.测试结果

4.修改端口号8888

1.编写剧本(角色)

目录介绍

files:

tasks:

handlers:

templates:

编写脚本

总结


在现代IT运维中,自动化已经成为提升效率和降低错误率的关键手段。Ansible作为一种强大的自动化工具,通过剧本(Playbooks)和角色(Roles)使得复杂的配置管理变得简单而高效。本文将探讨如何利用Ansible的角色功能来实现Apache服务的自动化管理。我们将通过定义角色结构、编写剧本以及执行相关操作,展示如何轻松部署和管理Apache Web服务器,从而提高运维工作的灵活性和可维护性。无论是在开发环境还是生产环境,通过Ansible,我们都能实现快速、可靠的服务部署与管理。

 

以下分开来讲解首先就是 单独的步骤 最后才是使用定义角色目录的方式来完成一整套流程操作

1.编写YAML

实现要求

1.安装apache

2.修改端口号为8080

3.启动apache服务

vim a.yaml
---
- hosts: webremote_user: roottasks:- name: install httpdyum:name: httpdstate: presenttags:- aaa
​- name: change apache portshell: sed -i 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conftags:- bbb
​- name: start apacheservice:name: httpdstate: startedenabled: yestags:- ccc
...

1.剧本结构
hosts:

指定了目标主机组为web,即所有在该组中的主机将会执行此剧本中的任务。

remote_user:

设置为root,表示以root用户身份连接目标主机,确保有足够的权限执行安装和配置操作。

2.任务列表
install httpd:

使用yum模块安装Apache HTTP服务器(httpd)。
state: present确保httpd包被安装。
tags: aaa允许在执行时通过标签选择性地运行此任务。


change apache port:

使用shell模块执行命令,修改Apache配置文件,将监听端口从80改为8080。
这个步骤是为了避免与其他服务的端口冲突。
tags: bbb同样允许通过标签选择性地执行此任务。


start apache:

使用service模块启动Apache服务,并设置为开机自启。
state: started确保服务正在运行,enabled: yes确保服务在系统启动时自动启动。
tags: ccc便于通过标签选择性地执行此任务。

使用ansible-playbook 来检测语法是否有问题

​
[root@localhost ~] ansible-playbook --syntax-check a.yaml 
​
playbook: a.yaml

2.执行剧本

确认无误之后执行

ansible-playbook a.yaml

2.测试结果

回到客户端检测是否成功的下载了httpd和修改了端口号以及启动服务

systemctl status httpd
netstat -nultp | grep httpd
tcp6       0      0 :::8080                 :::*                    LISTEN      3039/httpd

可以看到端口号确实为8080.

4.修改端口号8888

单独的修改端口号,大家都知道修改完成之后不会立即生效,需要重启服务或者重载才生效。

以下实验就成功的解决了找个问题

注意!之前我们用sed把80端口修改为8080 现在需要修改sed语句 8080修改为8888

编写脚本

---
- hosts: webremote_user: roottasks:- name: change apache portshell: sed -i 's/Listen 8080/Listen 8888/' /etc/httpd/conf/httpd.confnotify: restart httpd server
​handlers:- name: restart httpd serverservice:name: httpdstate: restarted
...

检测语法

[root@localhost ~]# ansible-playbook --syntax-check a.yaml 
​
playbook: a.yaml
[root@localhost ~]# ansible-playbook a.yaml

执行脚本

遇到问题先不要慌张一个个去排查,查看apache的报错日志

我发现是我这台主机的Selinux没有关闭导致无法启动成功

关闭重启以下即可解决成功

1.编写剧本(角色)

创建好所需文件夹

mkdir -p /etc/ansible/roles/apache/{files,tasks,handlers,templates}

目录介绍

files:

存放静态文件,如配置文件、脚本或其他需要直接复制到目标主机的文件。 这些文件可以在剧本中通过 copy 或 template 模块进行引用。

tasks:

用于定义具体的任务,这些任务是剧本的核心部分。 通常会有一个 main.yml 文件,里面列出所有需要执行的操作,如安装软件、修改配置等。

handlers:

存放处理程序(handlers),这些是特殊的任务,仅在被其他任务触发时执行,例如在配置文件更改后重启服务。 也通常会有一个 main.yml 文件来定义这些处理程序。

templates:

用于存放Jinja2模板文件,这些模板可以动态生成配置文件。 在剧本中可以使用 template 模块渲染这些模板,并将结果复制到目标主机。

这是整体的文件夹结构树(主要看roles下的目录文件夹)

[root@localhost ansible]# tree
.
├── ansible.cfg
├── hosts
├── httpd.yml
└── roles└── apache├── file├── handlers│   └── main.yml├── tasks│   └── main.yml└── templates

我们进入tasks目录编辑main.yml

以下是完整路径

vim /etc/ansible/roles/apache/tasks/main.yml
---
- name: install apache  # 安装 Apache HTTP 服务器yum:name: httpdstate: present- name: start apache  # 启动 Apache 服务并设置为开机自启service:name: httpdstate: startedenabled: yes- name: change apache Port  # 修改 Apache 配置文件,将监听端口从 80 更改为 8080shell: sed -i 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.confnotify:- restart httpd  # 通知重启 Apache 服务以应用更改

在 /etc/ansible/roles/apache/handlers/main.yml 文件中,定义了一个处理程序,用于重启Apache HTTP服务器。以下是该文件的详细介绍:

vim /etc/ansible/roles/apache/handlers/main.yml ---
- name: restart httpdservice:name: httpdstate: restarted
...

name:

指定要管理的服务名称,这里是 httpd,即Apache HTTP服务器。
state:

设置为 restarted,表示在调用此处理程序时,会重启Apache服务。这通常在配置文件发生变化后调用,以使更改生效。

编写脚本

再编写一个执行剧本的脚本

vim httpd.yml---
- hosts: webremote_user: rootroles:- apache
...

执行

进入到你创建的执行脚本目录

ansible-playbook httpd.yml

可以看到脚本执行完毕 实验结束

总结

本文介绍了如何利用Ansible实现Apache HTTP服务器的自动化管理。通过编写YAML剧本和定义角色,我们成功完成了Apache的安装、端口修改和服务启动。这个过程展示了Ansible的灵活性和高效性,使得运维工作更加简洁和可靠。通过自动化,我们能够提升工作效率,减少人为错误,推动IT基础设施的现代化。

成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

神秘泣男子

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

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

相关文章

Kafka服务端日志详解

文章目录 服务端日志Topic消息存储方式主体介绍log文件追加记录消息index和timeindex索引文件 日志文件清理Kafka的文件高效读写机制Kafka的文件结构顺序写磁盘零拷贝 合理配置刷盘频率客户端消费进度管理 服务端日志 Kafka的日志信息是通过conf/server.properties文件中的log…

互联网红利消退,AI 大模型接棒新红利

在科技发展的浪潮中,互联网曾经是推动经济增长和社会变革的强大引擎,为无数企业和个人带来了巨大的红利。然而,随着时间的推移,互联网红利似乎正在逐渐消退,而与此同时,AI 大模型正以其强大的创新能力和广泛…

搜索旋转排序数组

搜索旋转排序数组 没思路。 看了下全网的思路,一个个来o,多做点题就知道了二分不仅仅只能用在有序的数组中。 这道题很关键的一个值就是nums[0]。 法一:先用二分找到旋转点,旋转点两边都是的,判断要搜索的值在哪边,…

玩转haproxy --花十分钟看看,全是干货

Haproxy是一款开源集群软件(在上一篇文章中提到过集群的相关知识,往期点击http://t.csdnimg.cn/qWtQG)是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的,是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器 …

Linux Day1 系统编程和文件操作

系统编程内容 文件I/O (输入/输出): 1)使用标准库函数如fopen, fclose, fread, fwrite, fgetc, fputc, fgets, fprintf, fscanf等进行文件操作。 2)使用open, close, read, write等系统调用来实现底层文件操作。 进程管理: 1)使用fork, e…

安卓用户专属福利:OfficeSuite中文高级版,让你的工作更轻松!

OfficeSuite – 世界顶级移动办公软件!Google Play商店下载最多的办公软件应用,迄今为止,智能手机平台上,功能最强大、兼容性最好的移动Office办公套件。创建,查看和编辑Word,Excel和PowerPoint文档&#x…

ThinkPHP5漏洞分析之代码执行

漏洞概要 本次漏洞存在于 ThinkPHP 的缓存类中。该类会将缓存数据通过序列化的方式,直接存储在 .php 文件中,攻击者通过精心构造的 payload ,即可将 webshell 写入缓存文件。缓存文件的名字和目录均可预测出来,一旦缓存目录可访问…

python自动化笔记:os模块和异常处理

目录 一、os模块1.1、常用方法1.2、其他方法(了解即可) 二、异常处理 try except2.1、语法格式1:2.2、语法格式2:指定异常类别,捕获异常2.3、语法格式3:try-finally 语句无论是否发生异常都将执行最后的代码…

SQL每日一练-0814

今日SQL题难度:🌟☆☆☆☆☆☆☆☆☆ 1、题目要求 找出每个部门中薪资最高的员工显示部门ID、部门名称、员工ID、员工姓名以及对应的薪资 2、表和虚拟数据 现有两个表:Employees 和 Departments,记录了员工和部门信息。…

【机器学习】ImageNet的基本概念以及如何使用ImageNet数据集

引言 ImageNet是一个大型的图像数据库,它根据WordNet的层级结构(目前仅限于名词)组织,其中每个层级节点都由成百上千张图像来描绘。这个项目对计算机视觉和深度学习研究的发展起到了重要作用 文章目录 引言一、ImageNet的基本概念…

一次sql请求,返回分页数据和总条数

日常搬砖,总少不了需要获取分页数据和总行数。 一直以来的实践是编码两次sql请求,分别拉分页数据和totalCount。 最近我在思考: 常规实践为什么不是 在一次sql请求中中执行多次sql查询或多次更新,显而易见的优势: ① 能…

Halcon 算子汇总

gen_tuple_const(1000,1.5) 生成一个长度为1000,里面每一个数组元素都为1.5的数组 gen_tuple_const(100,chr(ord(a) 1)) 生成一个长度为100,里面每一个数组元素都为b的数组 ord函数是库函数,用于获取字符的ASCII值 chr(ord(a) 1) 结…

8.13-LVS的nat模式+DR模式

LVS 一、nat模式 1.角色 主机名ip地址功能web01192.168.2.101rsweb02192.168.2.102realserveenat内网:192.168.2.103 外网:192.168.2.120directorserver,ntpdns192.168.2.105dns 2..web服务器 [rootweb01 ~]# yum -y install nginx ​ [rootweb01 ~]# echo "web01&qu…

【14】二叉树的Morris等

目录 一.树形dp套路 二.派对的最大快乐值 三.Morris遍历 morris先序遍历 morris中序遍历 moris后序遍历 判断是不是搜索二叉树 四.额外习题 一.树形dp套路 情况1:最大距离,节点X不参与。 > 左树最大距离 or 右树最大距离 情况2:最…

html编写贪吃蛇页面小游戏(可以玩)

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>贪吃蛇小游戏</title><style>body {…

【软件逆向】第2课,软件逆向安全工程师之区分应用32位和64位,每天5分钟学习逆向吧!

目标学习使用StudyPE区分应用 在软件逆向中区分应用类型是关键性的一部分 &#xff0c;只有区分类型后才能选择对应工具进行后续处理。 1.打开StudyPE工具。 2.将我们需要逆向的软件&#xff0c;拖拽到StudyPE中&#xff0c;查看应用信息。 以上用一款视觉AI软件举例&#…

Java设计模式-原型模式-一次性理解透

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. 前言2. 原型模式的主要角色2.1 原型接口或抽象类2.2 具体原型类2.3 客户端2.4 克隆方法 3. 原型模式使用场景3.1 创建对象是昂贵的3.2 对象的变化3.3 动态配置3.…

【STM32】DMA数据转运(存储器到存储器)

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 DMA简介 DMA时钟使能 DMA初始化 转运起始和终止的地址 转运方向 数据宽度 传输次数 转运触发方式 转运模式 通道优先级 DMA初始化框架 选择开启DMA通道 更改转运次数 DMA应用…

【第二节】80x86汇编-寄存器和标志位

目录 前言 一、汇编相关概念 1.1 数据表示与类型 1.2 汇编语言的构成 1.3 存储器及指令、数据 1.4 存储单元 1.5 CPU对存储器的读写操作 1.6 CPU读写内存单元的过程 1.7 intel CPU发展 1.8 8086 内部结构 二、寄存器 2.1 寄存器概览 2.2 32位寄存器 2.3 16位寄存器…

三维建模软件:地理信息与遥感领域的智慧构建者

在地理信息与遥感技术的广阔舞台中&#xff0c;建模软件如同一位卓越的建筑师&#xff0c;以数据为砖瓦&#xff0c;智慧为水泥&#xff0c;构建出一个又一个又一个逼真、动态的虚拟世界。本文将深入探究其技术核心、应用实例、未来趋势&#xff0c;揭示建模软件如何在地理信息…