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服务

bash 复制代码
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 来检测语法是否有问题

bash 复制代码
​
[root@localhost ~] ansible-playbook --syntax-check a.yaml 
​
playbook: a.yaml

2.执行剧本

确认无误之后执行

bash 复制代码
ansible-playbook a.yaml

2.测试结果

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

bash 复制代码
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基础设施的现代化。

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

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

神秘泣男子

相关推荐
liliangcsdn1 天前
curl如何发送json文件数据示例
服务器
北方的流星1 天前
华为帧中继配置
运维·网络·华为
秋雨雁南飞1 天前
FlaUI 自动化
自动化
踏浪无痕1 天前
从 node-exporter 学如何写出可复用的监控指标
运维·后端·架构
飞Link1 天前
【CentOS】Linux(CentOS7)安装教程
linux·运维·服务器·centos
lifewange1 天前
100 个接口,1000 个业务场景,如何设计自动化测试用例?框架是如何设计的?
运维·自动化·测试用例
牛奔1 天前
Linux 的日志分析命令
linux·运维·服务器·python·excel
电化学仪器白超1 天前
20251209Ver8(精密电流源温漂特性测试报告)
python·单片机·嵌入式硬件·自动化
深耕AI1 天前
Docker Volumes详解
运维·docker·容器
飞Link1 天前
【Linux】Linux(CentOS7)配置SSH免密登录
linux·运维·服务器