前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Ansible运维中剧本角色(roles)来完成apache服务操作

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

原创
作者头像
神秘泣男子
发布于 2025-02-07 09:35:05
发布于 2025-02-07 09:35:05
13200
代码可运行
举报
文章被收录于专栏:Ansible工具Ansible工具Linux
运行总次数:0
代码可运行

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

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

1.编写YAML

实现要求

1.安装apache

2.修改端口号为8080

3.启动apache服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 来检测语法是否有问题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~] ansible-playbook --syntax-check a.yaml 
•
playbook: a.yaml

2.执行剧本

确认无误之后执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ansible-playbook a.yaml

2.测试结果

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl status httpd
netstat -nultp | grep httpd
tcp6       0      0 :::8080                 :::*                    LISTEN      3039/httpd

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

4.修改端口号8888

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

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

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

编写脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
- 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
...

检测语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ~]# ansible-playbook --syntax-check a.yaml 
•
playbook: a.yaml
[root@localhost ~]# ansible-playbook a.yaml

执行脚本

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

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

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

1.编写剧本(角色)

创建好所需文件夹

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /etc/ansible/roles/apache/{files,tasks,handlers,templates}

目录介绍

files:

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

tasks:

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

handlers:

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

templates:

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ansible]# tree
.
├── ansible.cfg
├── hosts
├── httpd.yml
└── roles
    └── apache
        ├── file
        ├── handlers
        │   └── main.yml
        ├── tasks
        │   └── main.yml
        └── templates

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

以下是完整路径

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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服务器。以下是该文件的详细介绍:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /etc/ansible/roles/apache/handlers/main.yml 
​
​
---
- name: restart httpd
  service:
    name: httpd
    state: restarted
...

name:

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

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

编写脚本

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim httpd.yml
​
---
- hosts: web
  remote_user: root
  roles:
  - apache
...

执行

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ansible-playbook httpd.yml

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

总结

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

成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!" "每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。" 神秘泣男子

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ansible自动运维工具之ansible-playbook详解
playbook文件定义的任务需要通过ansible-playbook命令进行调用并执行,ansible-playbook命令用法如下:
小手冰凉
2019/10/16
2.3K0
ansible自动运维工具之ansible-playbook详解
玩转企业常见应用与服务系列(十五):Ansible palybook 原理与实践
Playbooks是Ansible的配置,部署和编排语言。playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓的task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联合起来按事先编排的机制完成某一任务。
民工哥
2023/11/30
4320
玩转企业常见应用与服务系列(十五):Ansible palybook 原理与实践
playbook handle roles tags
“—-”表示文档的开始 “-”表示一个块序列的节点 上述定义了两个task 一个是ping 一个是创建一个目录
丁D
2022/08/12
5760
playbook handle roles tags
Ansible剧本(playbook)编写
playbook是ansible用于配置,部署,和管理被控节点的剧本。 通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成。 也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。
王先森sec
2023/04/24
2.2K0
Ansible极简教程
Ansible 极简教程 一、基本部署 简介 ansible是一个自动化管理工具,它足够简单且足够强大来管理大批量设备。可用于配置系统,部署软件以及组合复杂任务。 特性 无agent模式,push模式,这一点与fabric有几分类似 并发执行 可用任何语言写扩展模块 有类似Puppet(RAL)或者SaltStack(state)的playbook 灵活的匹配规则,通配符,正则 安装Ansible 1234 # yum -y install epel-release# yum list all *ansib
KangVcar
2018/07/06
4.2K1
Ansible进阶学习之Playbooks(剧本)的理解使用
上一篇文章为大家对“Ansible”简单入了个门,介绍了自动化运维发展,Ansible的基本原理以及基本模块的使用。本篇文章,我们将趁热打铁,学习Ansible的核心——playbook的使用。
大数据梦想家
2021/01/27
1.3K0
Ansible进阶学习之Playbooks(剧本)的理解使用
[Ansible专栏]Ansible Playbook介绍和使用
Ansible Playbooks 提供了一个可重复、可重用、简单的配置管理和多机部署系统,非常适合部署复杂的应用程序。Ansible Playbook 是自动化任务的蓝图,这些任务是复杂的 IT 操作,在有限或没有人为参与的情况下执行。Ansible Playbook 在一组、组或分类的主机上执行,它们共同构成一个 Ansible 清单。
没有故事的陈师傅
2022/12/06
9150
Ansible 详细用法说明(二)
例:获取某台主机的变量 ansible 10.1.6.68 -m setup ===================================== script:发送脚本到各被管理节点,并执行。不需要参数 ===================================== ansible all -m script -a 'test.sh' 直接在-a 后面指定脚本即可。 =============================== selinux: 管理selinux。 =======
小小科
2018/05/04
2.7K0
Ansible 详细用法说明(二)
大神带你 20 分钟学会 Ansible !
作者:kangvcar 来源:见文末 一、基本部署 安装Ansible # yum -y install epel-release # yum list all *ansible* # yum inf
小小科
2018/06/20
3.7K0
Ansible roles搞定LAMP架构
在强调一遍吧,为什么我再次使用ansible搞定呢? ① 定制剧本 ② 基于python实现模块化: (调用特定模块 ,完成特定任务,支持自定义模块) 整个role目录的结构: . ├── ansible.cfg ├── hosts ├── httpd-php_roles.retry ├── httpd-php_roles.yml ├── roles │ ├── httpd │ │ ├── files │ │ │ ├── mysql_wp.sh │ │ │ ├── wordpress-4.7.4-zh_CN
老七Linux
2018/05/31
4070
Ansible自动化运维学习笔记1
基础概念 什么是ansible? 答:它是一个”配置管理工具”,它是一个Linux系统上的”自动化运维工具”;
全栈工程师修炼指南
2020/10/26
4.2K0
Ansible自动化运维学习笔记1
如何编写清晰的Ansible Playbook(复杂Playbook如何构建)
对于运维小伙伴来讲,Ansible并不陌生,配置简单,上手容易,只要掌握几个基本的模块就可以解决好多运维中重复的事,但是对于处理更为高级的功能和更大、更复杂的项目时,管理和维护Ansible Playbook或高效使用将变得更加困难。
山河已无恙
2023/01/30
3.6K0
如何编写清晰的Ansible Playbook(复杂Playbook如何构建)
02 . Ansible高级用法(运维开发篇)
ansible是python中的一套模块,系统中的一套自动化工具,可以用作系统管理,自动化命令等任务
iginkgo18
2020/09/27
3.9K0
02 . Ansible高级用法(运维开发篇)
Ansible 通过Playbook部署LAMP
Ansible的PlayBook文件格式为YAML语言,所以希望你在编写PlayBook前对YAML语法有一定的了解,否则在运行PlayBook的时候经常碰到语法错误提示,这里我们通过介绍批量部署LAMP为例,介绍一下LAMP.yml这个PlayBook的具体应用写法,如果你对YAML语言没有了解的话,请自行去百度学习.
王 瑞
2022/12/28
9340
运维自动化工具ansible
公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备。公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测试,运维老大为了在年底有所表现,要求运维部门同学尽快实现,当你接到这个任务时,有没有更快的解决方案?
咻一咻
2020/05/29
3.5K0
深入浅出自动化运维工具-----aniible
ansible特性 1.模块化设计,调用特定的模块来完成特定任务 2.基于python语言实现 3.其模块支持JSON、YAML等标准输出格式 4.支持playbook
不吃小白菜
2020/10/28
1.7K0
深入浅出自动化运维工具-----aniible
一文详解 Ansible 自动化运维!
Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误。
杰哥的IT之旅
2020/07/17
3.2K0
一文详解 Ansible 自动化运维!
Ansible之roles介绍
假如我们现在有3个被管理主机,第一个要配置成httpd,第二个要配置成php服务器,第三个要配置成MySQL服务器。我们如何来定义playbook?
菲宇
2019/06/12
5890
Ansible之roles介绍
Ansible Playbook实战
1.什么是playbook,playbook翻译过来就是“剧本”,那playbook组成如下
江小白
2018/12/12
2.8K1
如何控制Ansible Playbook的执行顺序、运行选定的剧本资源
在处理大型或复杂的剧本时,如果只希望运行部分剧本或部分任务。可以将标签应用于可能要跳过或运行的特定资源。
山河已无恙
2023/01/30
3K0
相关推荐
ansible自动运维工具之ansible-playbook详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验