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

news2024/11/15 8:05:23

 

🏡作者主页:点击! 

🐧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: web
  remote_user: root
  tasks:
    - name: install httpd
      yum:
        name: httpd
        state: present
      tags:
        - aaa
​
    - name: change apache port
      shell: sed -i 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf
      tags:
        - bbb
​
    - name: start apache
      service:
        name: httpd
        state: started
        enabled: yes
      tags:
        - 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: web
  remote_user: root
  tasks:
    - name: change apache port
      shell: sed -i 's/Listen 8080/Listen 8888/' /etc/httpd/conf/httpd.conf
      notify: restart httpd server
​
  handlers:
    - name: restart httpd server
      service:
        name: httpd
        state: 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: httpd
    state: present


- name: start apache  # 启动 Apache 服务并设置为开机自启
  service:
    name: httpd
    state: started
    enabled: yes


- name: change apache Port  # 修改 Apache 配置文件,将监听端口从 80 更改为 8080
  shell: sed -i 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf
  notify:
  - restart httpd  # 通知重启 Apache 服务以应用更改

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

vim /etc/ansible/roles/apache/handlers/main.yml 


---
- name: restart httpd
  service:
    name: httpd
    state: restarted
...

name:

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

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

编写脚本

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

vim httpd.yml

---
- hosts: web
  remote_user: root
  roles:
  - apache
...

执行

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

ansible-playbook httpd.yml

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

总结

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

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

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

神秘泣男子

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据技术——实战项目:广告数仓(第六部分)报表数据导出至clickhouse

目录 第11章 报表数据导出 11.1 Clickhouse安装 11.2 Clickhouse建表 11.2.1 创建database 11.2.2 创建table 11.3 Hive数据导出至Clickhouse 第11章 报表数据导出 由于本项目最终要出的报表,要求具备交互功能,以及进行自助分析的能力,…

什么是云原生?(二)

1. 云原生的定义 云原生指构建和运行应用以充分利用通过云技术交付模式交付的分布式计算。云原生应用旨在充分利用云技术平台特有的可扩展性、弹性和灵活性优势。 根据云原生计算基金会 (CNCF) 的定义,云原生技术可帮助企业在公有云、私有云和混合云环境中构建和…

22款奔驰GLE350加装原厂香氛负离子系统,起到了提神醒脑功能的效果

奔驰原厂香氛系统激活原车自带系统,将香气加藏储物盒中,通过系统调节与出风口相结合,再将香味传达至整个车厢,达到净化车厢空气的效果,让整个车厢更加绿色健康,清新淡雅。对于负离子系统同样实现原装位安装…

DASCTF 2024暑期挑战赛 easyjob

DASCTF 2024暑期挑战赛 easyjob 下载附件没有什么特别的,不过很明显是xxl-job的应用,而且是1.9.2版本的 我们去搜索文章https://xz.aliyun.com/t/13899 猜测有两个可能 一个是打api,一个打executor未授权 首先打api的话可以参考https://…

案例分享—国外深色UI界面设计赏析

在国外,深色界面设计(Dark Mode)已成为提升用户体验的重要趋势。它不仅有效减少屏幕亮度,保护用户视力,还能在夜晚或低光环境下提供更加舒适的浏览体验。设计师们普遍认识到,深色主题不仅提升了应用的视觉层…

.NET+WPF 桌面快速启动工具 GeekDesk

目录 前言 项目介绍 安装使用 1、下载安装 2、启动界面 项目功能 1、快速搜索程序和文件 2、显示设置 3、自定义壁纸 4、毛玻璃效果 5、自定义菜单图标 6、定时提醒 总结 项目地址 最后 前言 大家在平时工作中,是不是经常为了找某个文件或者应用而在…

[Qt][Qt 事件][下]详细讲解

目录 1.定时器0.是什么?1.QTimerEvent2.QTimer3.获取系统⽇期及时间 2.事件分发器1.概述2.事件分发器工作原理3.使用 3.事件过滤器0.是什么?2.使用 1.定时器 0.是什么? 在进⾏窗⼝程序的处理过程中,经常要周期性的执⾏某些操作&…

C++STL初阶(11):stack和queue的使用

栈和队列的先导知识在这里:C语言基础数据结构——栈和队列_栈和队列 插入取出数据-CSDN博客 1.容器适配器 从栈和队列开始,不少教材就不叫他们容器了,而是叫容器适配器 栈不是一种完全不同的数据结构,而是基于顺序表或者链表而实现…

家里总有宠物浮毛怎么办?除了宠物空气净化器真没更轻松的招了!

从几年前口罩问题爆发开始,我就养成了自我防护的习惯,家里常备口罩、消毒水,每天也会定时开窗通风。但是,由于现在天气热了,大多时候都闷在家里开着空调。家里两只猫时不时打个架,满屋子那猫毛飞得啊&#…

算法日记day 39(动归之打家劫舍)

一、打家劫舍1 题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。…

Containerd 介绍

早之前的 Docker Engine 中就有了 containerd,只不过现在是将 containerd 从 Docker Engine 里分离出来,作为一个独立的开源项目,目标是提供一个更加开放、稳定的容器运行基础设施。分离出来的 containerd 将具有更多的功能,涵盖整…

centos7安装Oracle 11g数据库

目录 一、安装前准备1、安装前置工具(安装过可以忽略)2、更配yum源2.1、备份原有源;2.2、下载阿里云base源和epel源;2.3、清理yum缓存2.4、生成新的缓存2.5、更新系统中所有软件到最新版(按需谨慎操作) 3 修…

做代理海外仓赚钱?代理仓如何实现盈利?

随着跨境电商与物流的火热,海外仓作为跨境贸易的新基建,也成为了一门生意。具体来说海外仓商业模式是一种通过在跨境贸易中设置离岸仓库,为客户提供包括商品存储、包装、发货、退货和售后服务等一系列跨境电商服务的商业模式。 海外仓的成本主…

跟《经济学人》学英文:2024年08月10日这期 A history-lover’s guide to the market panic over AI

A history-lover’s guide to the market panic over AI Past technologies offer clues to what comes next 原文: Andrew Odlyzko, a professor of mathematics at the University of Minnesota, has a side hustle: he has become one of the world’s foremo…

19523 最长上升子序列长度

### 分析 1. **问题描述**: - 给定一个序列,要求找到最长上升子序列的长度。 - 子序列可以是不连续的,但必须保持顺序。 2. **解决方案**: - 使用动态规划(Dynamic Programming, DP)来解决这个问…

RCE---无字母数字webshell

<?php if(isset($_GET[code])){$code $_GET[code];if(strlen($code)>35){die("Long.");}if(preg_match("/[A-Za-z0-9_$]/",$code)){die("NO.");}eval($code); }else{highlight_file(__FILE__); } 分析代码&#xff1a;传参不大于35&…

让可视化大屏摆脱面子工程的12个方法

提到可视化大屏&#xff0c;很多老铁就认为这是面子工程&#xff0c;花里胡哨&#xff0c;没啥用处&#xff0c;这固然和认知有关系&#xff0c;那么有没有办法让可视化大屏摆脱这种认知吗&#xff0c;千汇数据工场介绍往日经验&#xff0c;与大家探讨下。 可视化大屏面子工程…

C语言典型例题37

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 例题3.5 按照按照考试成绩的等级输出百分制分数段&#xff0c;A等为85分以上&#xff0c;B等为70~84分&#xff0c;C等为 60~69分&#xff0c;D等在60分以下&#xff0c;成绩的等级从键盘输入 代码&#xff1a; //…

2024最新上门按摩系统源码APP打包教程!

**xhadmin、免费、开源、可商用** 上门按摩这两年很火&#xff0c;某宝、某鱼上盗版系统盛行&#xff0c;大都是留有后门的系统&#xff0c;加密授权&#xff0c;根本二开不了。 近期很多人反馈我们的上门按摩系统APP打包困难&#xff0c;今天我手把手教大家如何打包上门按摩A…

【CanMVK230】CanMV K230 开箱

【CanMVK230】CanMV K230 开箱 CanMV 是什么CanMV K230开发板硬件资源能做什么 开箱&#xff01;配套资料其他学习资料 K230我买到啦~。话不多说&#xff0c;开始分享我的使用过程。欢迎大神指点。 CanMV 是什么 CanMV开源项目由嘉楠科技&#xff08;Canaan&#xff09;官方创建…