ansible-playbook角色roles使用实例及遇到的问题排除记录

embedded/2024/10/17 21:26:08/

目录

1、角色roles的概念和作用

2、角色roles的目录层级结构

ansible-play%E4%BD%BF%E7%94%A8%E8%A7%92%E8%89%B2roles%E9%83%A8%E7%BD%B2%E6%9C%8D%E5%8A%A1%E5%AE%9E%E4%BE%8B-toc" style="margin-left:80px;">3、ansible-play使用角色roles部署服务实例

ansible-playbook%E9%83%A8%E7%BD%B2%E5%AE%89%E8%A3%85htttpd%E6%9C%8D%E5%8A%A1%EF%BC%8C%E4%B8%94%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E4%BF%AE%E6%94%B9%E5%90%8E%E4%BC%9A%E8%A2%AB%E8%A7%A6%E5%8F%91%E5%90%AF%E5%8A%A8%E3%80%82-toc" style="margin-left:120px;">3.1 实例-使用ansible-playbook部署安装htttpd服务,且配置文件修改后会被触发启动。

3.2 遇到的问题记录


1、角色roles的概念和作用

      角色roles是ansible自1.2版本引入的新特性,用于层次性、结构化的组织playbook,roles能够根据层次型结构自动装载变量文件、tasks任务以及handlers触发等。简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷的include他们的一种机制。其实就是将一个大的playbook文件,进行分类拆分,达到根据需要复用的目的。

2、角色roles的目录层级结构

[root@localhost ~]# tree ansible-playbook-roles/  下面是好几个项目的role,以httpd安装role为例解释
ansible-playbook-roles/           #所有roles的总目录,最外层的,包括playbook的yaml文件
├── host                          #hosts列表清单目录
│   └── hosts                     #具体的hosts清单,和/etc/ansible/hosts内容一样,指定部署到哪些机器
├── playbook-all-roles.yml        #调用各个roles的总yml文件,可以具体指定调用哪一个role或哪一些role#指定调用哪些role就是部署相应的role
└── roles                         #所有roles的总目录,里面是自定义的各个独立的role,部署哪个就配置哪个├── httpd                     #以其中一个httpd的role为例,下面是该role下的目录结构,根据需要使用目录│   ├── default               #角色默认的变量,比vars的优先级低│   ├── files                 #角色部署时用到的一些文件约定存放目录,可使用copy模块将文件传到远程主机│   │   └── httpd.conf        #准备好的httpd的配置文件│   ├── handlers              #触发到该下面定义的名称时,会触发该下面执行任务处理,修改配置触发重启│   │   └── main.yml          #定义的触发该任务时候,执行的具体任务,如:重启服务│   ├── meta                  #角色定义的元数据│   ├── tasks                 #角色部署时要执行的任务列表,各个步骤任务的yml文件,main.yml来调整任务顺序│   │   ├── config_httpd.yml  #修改httpd配置任务
│   │   ├── index_httpd.yml   #设置httpd访问首页任务│   │   ├── install_httpd.yml #安装httpd任务│   │   ├── main.yml          #主任务文件,通过该文件可以调整各个任务的执行顺序│   │   └── service_httpd.yml #启动httpd服务任务│   ├── templates             #使用的模板文件约定目录,可以使用template模块,将模板渲染到远程主机│   │   └── index.html        #事先准备的首页测试文件│   └── vars                  #定义变量文件的目录│       └── main.yml          #定义变量的文件,可将变量定义到该文件,供其他文件调用变量├── mysql5.7├── nginx└── tomcat
注意1:
上面目录结构的名字是约定好的,不是随便能改成什么别的名字。所以需要按照上面的目录结构来进行组织palybook文件
注意2:
上面是以httpd角色为例解释的roles相关的目录层级结构,具体哪些role使用哪些目录,根据自己需要使用,如果用不到的目录,也可不创建,并不是每个role都需要有上面固定的目录,如:如果httpd的role使用不到template目录,那么可以不用创建templates目录
注意3: 
- files/   存放由copy或script模块等调用的文件
- templates/ template模块查找所需要模板文件的目录
- tasks/    定义task、role的基本元素,至少应该包含一个main.yml的文件,其他的文件需要在此文件中通过include进行包含
- handlers/  至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中通过include进行包含
- vars/    定义变量,至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中通过include进行包含
- meta/    定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件,其他文件需要在此文件中通过include进行包含
- default/  设定默认变量时使用此目录中的main.yml文件,比vars的优先级低

ansible-play%E4%BD%BF%E7%94%A8%E8%A7%92%E8%89%B2roles%E9%83%A8%E7%BD%B2%E6%9C%8D%E5%8A%A1%E5%AE%9E%E4%BE%8B" style="margin-left:.0001pt;text-align:justify;">3、ansible-play使用角色roles部署服务实例

ansible-playbook%E9%83%A8%E7%BD%B2%E5%AE%89%E8%A3%85htttpd%E6%9C%8D%E5%8A%A1%EF%BC%8C%E4%B8%94%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E4%BF%AE%E6%94%B9%E5%90%8E%E4%BC%9A%E8%A2%AB%E8%A7%A6%E5%8F%91%E5%90%AF%E5%8A%A8%E3%80%82" style="margin-left:.0001pt;text-align:justify;">3.1 实例-使用ansible-playbook部署安装htttpd服务,且配置文件修改后会被触发启动。

[root@localhost ~]# cd ansible-playbook-roles-only-httpd/
[root@localhost ansible-playbook-roles-only-httpd]# ls
host  playbook-all-roles.yml  roles
[root@localhost ansible-playbook-roles-only-httpd]# cat host/hosts    #查看主机列表
[test]
192.168.81.133 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="1"
[root@localhost ansible-playbook-roles-only-httpd]# cat playbook-all-roles.yml  #查看选择部署的某个role
#test: 为/etc/ansible/hosts中的主机列表  #task: 执行的任务
#name: 描述信息                      #yum: yum模块,安装服务的
#copy: copy模块,远程传递文件的       #file: file模块,远程创建目录的
#service: service模块,远程管理服务的
#remote_user: root 是指定远程主机上使用的用户
#gather_facts: no 是默认执行playbook时候,默认会收集目标主机的信息,禁用掉能提高效率
---
#httpd role
- hosts: testremote_user: rootgather_facts: no#下面是调用相应的role,调用哪些role就部署哪些roles:- role: httpd#- role: nginx
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/   #查看里面所有的role,只看httpd,其他role为空
httpd  mysql5.7  nginx  tomcat
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/  #查看httpd的role的层级结构
default  files  handlers  meta  tasks  templates  vars
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/default/   #default目录没用上,为空
为空
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/files/    #查看准备的自定义httpd的配置文件
httpd.conf
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/files/httpd.conf |grep Listen  #修改端口
# Listen: Allows you to bind Apache to specific IP addresses and/or
# Change this to Listen on specific IP addresses as shown below to 
#Listen 12.34.56.78:80
Listen 82
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/handlers/   #查看修改配置后触发的重启任务
main.yml
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/handlers/main.yml 
- name: restart  #定义被触发的handler名称,当修改配置文件后会根据该名称触发重启服务service: name=httpd state=restarted
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/meta/   #meta目录没用上,为空
为空
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/tasks/          #查看所有任务和任务执行顺序
config_httpd.yml  index_httpd.yml  install_httpd.yml  main.yml  service_httpd.yml
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/tasks/main.yml 
- include: install_httpd.yml
- include: config_httpd.yml
- include: index_httpd.yml
- include: service_httpd.yml
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/tasks/install_httpd.yml 
- name: install httpdyum: name=httpd state=installed
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/tasks/config_httpd.yml 
- name: config httpcopy: src=httpd.conf dest=/etc/httpd/conf/httpd.confnotify: restart     #修改配置时候触发重启的handler名称,重启httpd服务
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/tasks/index_httpd.yml 
- name: index.htmltemplate: src=index.html dest=/var/www/html/index.html#使用template模块将templates目录中文件渲染到远程主机目录
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/tasks/service_httpd.yml 
- name: start serviceservice: name=httpd state=started enabled=yes
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/templates/  #查看网页模板文件和调用变量情况
index.html
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/templates/index.html #查看调用变量情况
<h1> {{shouye_content}} </h1>
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/vars/           #查看变量文件
main.yml
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/vars/main.yml  #查看定义变量的内容
shouye_content: "httpd test111"
[root@localhost ansible-playbook-roles-only-httpd]# ansible-playbook -i host/hosts playbook-all-roles.yml #执行
所有被管理端:192.168.81.133查看httpd服务部署和配置文件情况程度
[root@localhost ~]# netstat -anput |grep 82
tcp6       0      0 :::82                   :::*                    LISTEN      41228/httpd      
[root@localhost ~]# cat /etc/httpd/conf/httpd.conf |grep 82
Listen 82
3.2 遇到的问题记录

排查步骤:

排查82端口是否被进程占用导致绑定82端口的httpd服务不能启动,发现不是因为这个问题导致的。

使用journactl -xe查看系统日志找到不能启动原因

排除是否是因为权限问题:

检查防火墙是否放行82端口的流量

排查是不是selinux导致的,selinux可能会阻止Apache服务访问82端口

使用getenforce命令查看selinux的状态

看到selinux是开着的,排除是不是因为selinux开着的原因阻止了apache服务访问82端口,于是关掉selinux

此时,再次执行剧本,发现成功启动了apache服务!!!

问题总结:就是selinux原因,阻止了Apache服务不能绑定82端口。


http://www.ppmy.cn/embedded/4061.html

相关文章

04 MySQL --DQL 专题--Union、exists

1. UNION、UNION ALL UNION 关键字的作用&#xff1f; 合并两个或多个 SELECT 语句的结果。发挥的作用与 or 非常相似 UNION关键字生效的前提&#xff1f; 每个 SELECT 语句必须拥有相同数量的列。每个 SELECT 语句中的列的顺序必须相同。列必须拥有相似的数据类型。 SELEC…

Java接口

1 接口的概念 笔记本上的USB口&#xff0c;电源插座等都是接口 接口就是公共的行为规范标准&#xff0c;大家在实现时&#xff0c;只要符合规范标准&#xff0c;就可以通用 在Java中&#xff0c;接口可以看成是&#xff1a;多个类的公共规范&#xff0c;是一种引用数据类型 …

最小生成树算法的实现c++

最小生成树算法的实现c 题目链接&#xff1a;1584. 连接所有点的最小费用 - 力扣&#xff08;LeetCode&#xff09; 主要思路&#xff1a;使用krusal算法&#xff0c;将边的权值进行排序&#xff08;从小到大排序&#xff09;&#xff0c;每次将权值最小且未加入到连通分量中…

【Python基础】线程

文章目录 [toc]线程与进程的区别与联系同步任务示例 并行任务示例线程调度的“随机性” 线程方法thread_object.start()thread_object.join()thread_object.setDaemon()没有设置守护线程的情况设置守护线程的情况 thread_object.current_thread() 目前爬虫的三种实现单线程爬虫…

如何通过drissionpage以及js逆向过字符/滑块/点选/九宫格验证码文章/视频学习案例

目录 零、各种关于drissionpage文章视频案例解决方案合集一、过字符类验证码反爬实战(自动化和逆向两种解法)二、过滑块类验证码反爬实战(自动化和逆向两种解法)三、过点选类验证码反爬实战(自动化和逆向两种解法)四、过九宫格验证码反爬实战(自动化和逆向两种解法)仅供…

SpringBoot 集成 EasyExcel 3.x 优雅实现 Excel 导入导出

介绍 EasyExcel 是一个基于 Java 的、快速、简洁、解决大文件内存溢出的 Excel 处理工具。它能让你在不用考虑性能、内存的等因素的情况下&#xff0c;快速完成 Excel 的读、写等功能。 EasyExcel文档地址&#xff1a;https://easyexcel.opensource.alibaba.com/ 快速开始 …

PySpark预计算ClickHouse Bitmap实践

1. 背景 ClickHouse全称是Click Stream&#xff0c;Data WareHouse&#xff0c;是一款高性能的OLAP数据库&#xff0c;既使用了ROLAP模型&#xff0c;又拥有着比肩MOLAP的性能。我们可以用ClickHouse用来做分析平台快速出数。其中的bitmap结构方便我们对人群进行交并。Bitmap位…

Stable Diffusion 模型分享:MeinaMix(动漫)meinamix_meinaV11

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 MeinaMix 的目标是&#xff1a;能够在很少的提示下…