RedHat9 | Ansible 角色

环境版本说明

  • RedHat9 [Red Hat Enterprise Linux release 9.0]
  • Ansible [core 2.13.3]
  • Python [3.9.10]
  • jinja [3.1.2]

描述角色结构

Playbook可能比较冗长且负载,也可能存在大量的重复代码。而角色(roles)可以用于层次性结构化的组织playbook,便于管理大项目。

  • Ansible中的一个角色是一个结构化的目录组成,可以根据业务需要创建不同的角色,类似将playbook分割成更小的模块,进行模块化管理,简化playbook。
  • 可以自行编写、使用、重用和共享角色,也可以通过其它来源获取角色

1. 角色路径

创建角色的步骤

  • 创建角色存储目录
  • 定义角色内容
  • 在playbook中使用角色

ansible-galaxy一共有两个选项

  • role:管理Ansible Galaxy角色
  • collection:管理Ansible Galaxy系列
    在这里插入图片描述

ansible-galaxy role中的常用选项

ansible-galaxy命令行工具可用于搜索角色,显示角色相关信息,以及安装、列举、删除或初始化角色。

选项作用
init使用角色的基本结构初始化新角色
remove从角色路径中删除角色
delete从Galaxy中删除角色
list显示角色路径中安装的每个角色的名称和版本
search按标签、平台、作者和多个关键字搜索Galaxy数据库
import将角色导入Galaxy服务
setup管理Galaxy和给定源之间的集成
info查看特定角色的详细信息
Install从文件、URL或Ansible Galaxy安装角色

Ansible默认的三个角色路径

  • /usr/share/ansible/roles【系统角色存储目录】
  • /etc/ansible/roles【全局角色存储目录】
  • /home/user/.ansible/roles【用户自定义角色存储目录】

在这里插入图片描述

角色路径设置

[Step1]:新建角色路径

mkdir ~/ansible/roles		# 建议新建在家目录下

[Step2]:修改配置文件

vim ~/ansible/ansible.cfg# 修改下列内容
roles_path=/home/greg/ansible/roles

在这里插入图片描述

[Step3]:验证角色路径

ansible-galaxy list

在这里插入图片描述

2. 创建角色

创建一个Apache角色

[Step1]:进入Ansible配置文件中定义的角色路径下

cd /home/greg/ansible/roles

[Step2]:初始化创建Apache角色

ansible-galaxy init apache

在这里插入图片描述

[Step3]:验证:查看创建角色的机构化目录

tree apache

在这里插入图片描述

[Step4]:在tasks目录下添加apache角色任务

vim roles/apache/tasks/main.yml

文件内容如下

---
# tasks file for apache
- name: Install the latest version of Apacheansible.builtin.dnf:			# 安装Apache服务name: httpdstate: latest- name: Start service httpd, if not startedansible.builtin.service:		# 启动Apache服务name: httpdstate: started- name: Web Pageansible.builtin.template:		# 生成index索引文件src: index.j2dest: /var/www/html/index.htmlnotify: restart_web		# 实施处理程序,监控内容改变后调用handlers- name: permit traffic in default zone for http serviceansible.posix.firewalld:		# 防火墙放行httpservice: httppermanent: yesstate: enabledimmediate: yes

[Step5]:在 templates 目录下创建jinja2模板文件

vim roles/apache/templates/index.j2# 文件内容如下
Hello {{ ansible_hostname }} you ipaddress is {{ ansible_default_ipv4.address }}

[Step6]:在 handlers下创建处理程序

vim roles/apache/handlers/main.yml# 文件内容如下
---
# handlers file for apache
- name: restart_web				# 需要和task任务下notify定义的值一致ansible.builtin.service:		# 重启服务name: httpdstate: restarted

[Step7]:在工作目录下,创建playbook

vim apache_roles.yml# 文件内容如下
---
- name: apache roleshosts: node2roles:- apache		# 调用的角色

[Step8]:运行playbook

ansible-navigator run apache_roles.yml -m stdout

在这里插入图片描述

[Step9]:验证:访问node2的网页内容

curl node2

在这里插入图片描述

3. 从外部源部署角色

角色存在多种获取方式

  • 本地tar包安装
  • 通过网络地址安装
  • 通过文件同时安装网络中多个地址角色

访问Ansible Galaxy官网下载和管理角色

https://galaxy.ansible.com/ui/standalone/roles/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 使用要求文件安装角色

可以使用ansible-galaxy命令下载和管理自有的Git存储库中的角色

[Step1]:编写角色要求文件

vim download.yml# 文件内容如下
- src: https://xxx.xxx.xxx.xxxscm: gitversion: "1.1.0"name: role
  • src:角色网站
  • scm:角色标识
  • version:下载的版本
  • name:安装在本地的角色名称

[Step2]:下载并安装角色

ansible-galaxy install -r download.yml -p roles
  • -r:指定角色要求文件的路径
  • -p:角色的安装路径

安装角色练习

  • 编写角色要求文件~/ansible/roles/roles_download.yml
  • 角色地址为http://classroom/materials/phpinfo.tar
  • 安装的角色名为phpinfo

[Step1]:编写角色要求文件roles_download.yml

vim ~/ansible/roles/roles_download.yml# 文件内容如下
- src: http://classroom/materials/phpinfo.tarname: phpinfo

[Step2]:下载并安装角色,角色默认是安装在角色路径中

ansible-galaxy role install -r roles/roles_download.yml -p roles/phpinfo

在这里插入图片描述

[Step3]:查看roles目录中的内容

cd roles/
ll

在这里插入图片描述

5. 从内容集合获取角色和模块

随着模块数量增加,管理困难。借助Ansible内容集合,Ansible代码可以与模块和插件分开更新。Ansible内容集合可提供一组在Playbook中使用的相关模块、角色和其它插件。这种方法便于维护和分发集合,不受Ansible版本的影响。

查看系统中提供的集合

ansible-navigator collection 

在这里插入图片描述

安装Ansible内容集合

通过在Ansible配置文件中我们可以看到,默认指定了两个集合路径,该路径下默认存在集合,不可删除,否则将找不到现有集合。

collections_path=~/.ansible/collections:/usr/share/ansible/collections

内容集合练习

  • 在http://classroom/materials/下存在redhat-insights-1.0.7.tar.gz
  • 集合安装路径为 /home/greg/ansible/mycollection目录下

[Step1]:新建集合安装路径

mkdir /home/greg/ansible/mycollection

[Step2]:编辑配置文件,添加集合路径

vim ansible.cfg# 在[default]下指定
[default]
...
collections_path=~/.ansible/collections:/usr/share/ansible/collections:/home/greg/ansib
le/mycollection

[Step3]:编辑playbook

vim mycollection/collection.yml# 文件内容如下
---
collections:
- name: http://classroom/materials/redhat-insights-1.0.7.tar.gz

[Step4]:运行playbook,安装集合

ansibla-galaxy collection install -r mycollection/collection.yml -p mycollection

在这里插入图片描述

[Step5]:验证:查询集合是否存在

ansible-navigator collections

在这里插入图片描述

6.利用系统角色重用内容

系统角色是一组Ansible角色,可用于配置和管理Linux自带的各种组件、子系统和软件包。系统角色可为很多常见的系统配置任务提供自动化,包括时间同步、网络连接、防火墙、调优和日志记录。

示例:RedHat6中使用时间服务为ntpd,在RedHat7中使用chronyd,如果存在不同版本的主机,管理员需要分开配置。使用系统角色system-roles.timesync角色则可以自动配置RedHat6和RedHat7的时间同步。

6.1 rpm包方式安装系统角色(偏向8版本)

系统自定义了一些角色,可以通过软件包进行安装。

[Step1]:离开工作目录,切换到根目录下

cd /

[Step2]:使用dnf搜索相关的rpm安装包

sudo dnf search roles

在这里插入图片描述

[Step3]:安装系统角色

sudo dnf install -y rhel-system-roles

在这里插入图片描述

[Step4]:在根目录下查看角色路径,可以看到安装路径为/usr/share/ansible/roles

ansible-galaxy list

[Step5]:修改工作目录下的Ansible配置文件,定义角色路径

vim ~/ansible/ansible.cfg# 在下列选项中添加值,使用冒号分隔
[defaults]
...
roles_path=/home/greg/ansible/roles:/usr/share/ansible/roles

在这里插入图片描述

系统角色练习-时间同步

  • 安装系统角色软件包
  • 创建playbook,playbook名为time.yml
  • 受管主机为所有主机,使用时间服务器为172.25.254.254,启用iburst参数

[Step1]:安装系统角色

cd /
sudo dnf install -y rhel-system-roles

[Step2]:验证:查看安装的timesync系统角色

ansible-galaxy list | grep time

在这里插入图片描述

[Step3]:查找相关文件

rpm -ql rhel-system-roles | grep timesync

在这里插入图片描述

[Step4]:查看帮助文档

vim /usr/share/doc/rhel-system-roles/timesync/README.md

[Step5]:查看模板文件

vim /usr/share/doc/rhel-system-roles/timesync/example-multiple-ntp-servers-playbook.yml

在这里插入图片描述

[Step6]:复制模板文件到工作目录下

cp /usr/share/doc/rhel-system-roles/timesync/example-multiple-ntp-servers-playbook.yml ansible/timesync.yml

[Step7]:编辑复制的playbook

cd ansible
vim timesysnc.yml# 文件内容如下
- hosts: allvars:timesync_ntp_servers:- hostname: 172.25.254.254		# 指定NTP服务器地址iburst: yes						# 启用iburst参数roles:- rhel-system-roles.timesync		# 使用的角色

[Step6]:运行playbook,以为该剧本是8版本的,所以运行方法与9版本不一致

ansible-playbook timesync.yml

在这里插入图片描述

[Step5]:验证:列出所有配置的 NTP 服务器

ansible node1 -m shell -a "chronyc sources -v"

在这里插入图片描述

系统角色练习-SELinux

  • 安装系统角色软件包
  • 创建playbook,playbook名为selinux.yml
  • 受管主机为node1,配置node1的selinux为enforcing

[Step1]:安装系统角色

sudo dnf install -y rhel-system-roles

[Step2]:查看相关文档

rpm -ql rhel-system-roles | grep rhel-system-roles.selinux

[Step3]:复制模板文件到工作目录中

cp /usr/share/doc/rhel-system-roles/selinux/example-selinux-playbook.yml ansible/selinux.yml

[Step4]:编辑刚刚复制的playbook

cd ansible
vim selinux.yml# 文件内容如下
---
- hosts: node1become: truebecome_method: sudobecome_user: rootvars:selinux_policy: targetedselinux_state: enforcing		# 设置SELinux状态tasks:- name: Creates directoryfile:path: /tmp/test_dirstate: directorymode: "0755"- name: Add a Linux System Roles SELinux Useruser:comment: Linux System Roles SELinux Username: sar-user- name: execute the role and catch errorsblock:- name: Include selinux roleinclude_role:name: rhel-system-roles.selinuxrescue:# Fail if failed for a different reason than selinux_reboot_required.- name: handle errorsfail:msg: "role failed"when: not selinux_reboot_required- name: restart managed hostreboot:- name: wait for managed host to come backwait_for_connection:delay: 10timeout: 300- name: reapply the roleinclude_role:name: rhel-system-roles.selinux

[Step5]:运行playbook

ansible-playbook selinux.yml

在这里插入图片描述

[Step6]:验证:查看node1上的SELinux状态

ansible node1 -m shell -a 'getenforce'

在这里插入图片描述

6.2 内容集合方式安装系统角色(偏向9版本)

[Step1]:离开工作目录,切换到根目录下

cd /

[Step2]:使用dnf搜索相关的rpm安装包

sudo dnf search roles

[Step3]:安装系统角色

sudo dnf install -y rhel-system-roles

在这里插入图片描述

[Step4]:在根目录下查看角色路径,可以看到安装路径为/usr/share/ansible/roles

ansible-galaxy list

在这里插入图片描述

[Step5]:修改工作目录下的Ansible配置文件,定义角色路径

vim ~/ansible/ansible.cfg# 在下列选项中添加值,使用冒号分隔
[defaults]
...
roles_path=/home/greg/ansible/roles:/usr/share/ansible/roles

在这里插入图片描述

系统角色练习-时间同步

[Step1]:安装系统角色

cd /
sudo dnf install -y rhel-system-roles.noarch

[Step2]:查看安装的timesync系统角色

ansible-galaxy list | grep timesync

在这里插入图片描述

[Step3]:查找相关文件,查看ansible_collections目录下的文档

rpm -ql rhel-system-roles | grep timesync

在这里插入图片描述

[Step4]:复制模板文件到工作目录下

cp /usr/share/ansible/collections/ansible_collections/redhat/rhel_system_roles/docs/timesync/multiple-ntp-servers.yml ~/ansible/timesync9.yml

[Step5]:编辑复制的playbook

cd ~/ansible
vim timesync9.yml# 文件内容如下
- hosts: allvars:timesync_ntp_servers:- hostname: 192.168.10.1iburst: yesroles:- redhat.rhel_system_roles.timesync

[Step6]:运行playbook

ansible-navigator run timesync9.yml -m stdout

6.3 两种方式的区别

通过查看安装的角色,我们可以发现存在两种角色名称不一致的角色

  • linux-system-roles.xxxx:适用于8版本
  • rhel-system-roles.xxx:适用于9版本
ansible-galaxy list

在这里插入图片描述

使用上没有什么区别,区别在于运行playbook的方式不一样,可以通过查看timesync角色提供的配置文件看出

rpm -ql rhel-system-roles | grep multiple-ntp

在这里插入图片描述

查看详细内容对比,可以看到其实是调用的角色不同
在这里插入图片描述

playbook运行方式

  • 针对8版本:ansible-playbook xxx.yml
  • 针对9版本:ansible-navigator run xxx.yml -m stdout

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

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

相关文章

55. 跳跃游戏【 力扣(LeetCode) 】

一、题目描述 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 二、测试用…

在vue中优雅地异步引入(懒加载)腾讯地图API

背景 接到一个需求需要在网站首页显示使用腾讯地图展示公司所在地。一开始我直接全局引入了腾讯地图js,结果发现在用户打开登陆页面的时候首页比较缓慢,为了提高用户登陆的加载效率,需要优化为异步引入。 思路 根据官网的示例,…

SQL 注入漏洞详解 - Union 注入

1)漏洞简介 SQL 注入简介 SQL 注入 即是指 Web 应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在 Web 应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,…

【前端 02】新浪新闻项目-初步使用CSS来排版

在今天的博文中,我们将围绕“新浪新闻”项目,深入探讨HTML和CSS在网页制作中的基础应用。通过具体实例,我们将学习如何设置图片、标题、超链接以及文本排版,同时了解CSS的引入方式和选择器优先级,以及视频和音频标签的…

分布式光伏并网AM5SE-IS防孤岛保护装置介绍——安科瑞 叶西平

产品简介 功能: AM5SE-IS防孤岛保护装置主要适用于35kV、10kV及低压380V光伏发电、燃气发电等新能源并网供电系统。当发生孤岛现象时,可以快速切除并网点,使本站与电网侧快速脱离,保证整个电站和相关维护人员的生命安全。 应用…

Hello 算法:动画图解、一键运行的数据结构与算法教程

Hello 算法 《Hello 算法》是一份开源、免费的数据结构与算法入门教程,特别适合新手。全书采用动画图解,内容清晰易懂,学习曲线平滑,引导初学者探索数据结构与算法的知识地图。源代码可以一键运行,帮助读者通过练习提…

WEB攻防-通用漏洞-SQL 读写注入-MYSQLMSSQLPostgreSQL

什么是高权限注入 高权限注入指的是攻击者通过SQL注入漏洞,利用具有高级权限的数据库账户(如MYSQL的root用户、MSSQL的sa用户、PostgreSQL的dba用户)执行恶意SQL语句。这些高级权限账户能够访问和修改数据库中的所有数据,甚至执行…

springboot中使用knife4j访问接口文档的一系列问题

springboot中使用knife4j访问接口文档的一系列问题 1.个人介绍 🎉🎉🎉欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的…

用Java手写jvm之实现查找class

写在前面 完成类加载器加载class的三阶段,加载,解析,初始化中的加载😀😀😀 源码 。 jvm想要运行class,是根据类全限定名称来从特定的位置基于类加载器来查找的,分别如下:…

解决R语言找不到系统库导致的报错

1、基本需知 1.1、系统库 系统库(System library)是一组预先编写和编译好的软件模块集合,用于支持操作系统的基本功能和提供一些常见的服务。这些库通常由操作系统或第三方开发者提供,并且在系统安装过程中被预装或者用户可以额…

崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB

前言 首届YashanDB「迁移体验官」开放后,陆续收到「体验官」们的投稿,小崖在此把优秀的投稿文章分享给大家~今天分享的用户文章是《崖山异构数据库迁移利器YMP初体验-Oracle迁移YashanDB》(作者:小草),满满…

【vue前端项目实战案例】之Vue仿饿了么App

本文将介绍一款仿“饿了么”商家页面的App。该案例是基于 Vue2.0 Vue Router webpack ES6 等技术栈实现的一款外卖类App,适合初学者进行学习。 项目源码下载链接在文章末尾 1 项目概述 该项目是一款仿“饿了么”商家页面的外卖类App,主要有以下功能…

51单片机嵌入式开发:17、STC89C52的嵌入式 遥控器 控制步进电机 转速 和 转向 操作并 printf打印信息

51单片机嵌入式开发 STC89C52的嵌入式 遥控器 控制步进电机 转速 和 转向 操作并 printf打印信息 51单片机嵌入式开发STC89C52的嵌入式 遥控器 控制步进电机 转速 和 转向 操作并 printf打印信息1 概述2 硬件电路2.1 遥控器2.2 红外接收器电路2.3 STC89C52单片机电路2.4 数码管…

SpringBoot集成Sharding-JDBC实现分库分表

本文已收录于专栏 《中间件合集》 目录 版本介绍背景介绍拆分方式集成并测试1.引入依赖2.创建库和表3.pom文件配置4.编写测试类Entity层Mapper接口MapperXML文件测试类 5.运行结果 自定义分片规则定义分片类编写pom文件 总结提升 版本介绍 SpringBoot的版本是: 2.3.…

IDEA Maven使用HTTP代理,解决Could not transfer artifact org.xxx问题

文章目录 一、前言二、遇到问题三、分析问题四、HTTP代理五、重新编译验证 一、前言 遇到这个问题,有两种解决办法 IDEA Maven使用HTTP代理,解决Could not transfer artifact org.xxx问题IDEA Maven使用国内镜像,解决Could not transfer arti…

C语言分支语句之if的一些用法

目录 引言C语言结构 1. if 语句1.1 if1.2 else 2. 分支中包含多条语句3. 多重选择 else if4. 嵌套if5. 悬空else / else与if配对问题 引言 C语言作为一种非常常用的编程语言,具有灵活强大的循环和分支结构。循环结构允许我们重复执行一段代码,而分支结构…

【网络爬虫技术】(1·绪论)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀网络爬虫开发技术入门_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 …

本地部署Graphhopper路径规划服务(graphhopper.sh启动版)

文章目录 文章参考源码获取一、配置Java环境变量二、配置Maven环境变量三、构建graphhopper步骤1. 下载数据2. 配置graphhopper配置文件config-example.yml3. 在项目中启动命令行执行./graphhopper.sh build3.1|、遇到的问题3.1.1、pom.xml中front-maven-plugin-无法下载npm6.1…

跨境电商独立站:Shopify/Wordpress/店匠选哪个?

在面对不断增加的平台运营压力时,不少跨境电商的商家逐渐将注意力转向建立自己的独立站。据《中国跨境出口电商发展报告(2022)》所示,中国拥有的独立站数量在2022年已接近20万个,这表明独立站已成为卖家拓展海外市场的…

昇思25天学习打卡营第11天|xiaoyushao

今天分享ResNet50迁移学习。 在实际应用场景中,由于训练数据集不足,所以很少有人会从头开始训练整个网络。普遍的做法是,在一个非常大的基础数据集上训练得到一个预训练模型,然后使用该模型来初始化网络的权重参数或作为固定特征提…