RedHat9 | Ansible 角色

news2025/2/23 7:14:20

环境版本说明

  • 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 Apache
  ansible.builtin.dnf:			# 安装Apache服务
    name: httpd
    state: latest

- name: Start service httpd, if not started
  ansible.builtin.service:		# 启动Apache服务
    name: httpd
    state: started

- name: Web Page
  ansible.builtin.template:		# 生成index索引文件
    src: index.j2
    dest: /var/www/html/index.html
  notify: restart_web		# 实施处理程序,监控内容改变后调用handlers

- name: permit traffic in default zone for http service
  ansible.posix.firewalld:		# 防火墙放行http
    service: http
    permanent: yes
    state: enabled
    immediate: 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: httpd
    state: restarted

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

vim apache_roles.yml

# 文件内容如下
---
- name: apache roles
  hosts: node2
  roles:
  - 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.xxx
  scm: git
  version: "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.tar
  name: 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: all
  vars:
    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: node1
  become: true
  become_method: sudo
  become_user: root
  vars:
    selinux_policy: targeted
    selinux_state: enforcing		# 设置SELinux状态

  tasks:
    - name: Creates directory
      file:
        path: /tmp/test_dir
        state: directory
        mode: "0755"
    - name: Add a Linux System Roles SELinux User
      user:
        comment: Linux System Roles SELinux User
        name: sar-user
    - name: execute the role and catch errors
      block:
        - name: Include selinux role
          include_role:
            name: rhel-system-roles.selinux
      rescue:
        # Fail if failed for a different reason than selinux_reboot_required.
        - name: handle errors
          fail:
            msg: "role failed"
          when: not selinux_reboot_required

        - name: restart managed host
          reboot:

        - name: wait for managed host to come back
          wait_for_connection:
            delay: 10
            timeout: 300

        - name: reapply the role
          include_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: all
  vars:
    timesync_ntp_servers:
      - hostname: 192.168.10.1
        iburst: yes
  roles:
    - 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.coloradmin.cn/o/1954514.html

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

相关文章

【python】python生活管理费系统(源码+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

Python爬虫入门01:在Chrome浏览器轻松抓包

文章目录 爬虫基本概念爬虫定义爬虫工作原理爬虫流程爬虫类型爬虫面临的挑战 使用Chrome浏览器抓包查看网页HTML代码查看HTTP请求请求头(Request Header)服务器响应抓包的意义 爬虫基本概念 爬虫定义 爬虫(Web Crawler 或 Spider&#xff0…

【JavaEE初阶】线程安全(重点)

目录 📕 线程安全的概念 🎄 观察线程不安全 🌳 线程不安全的原因 🚩 原因: 🌲解决之前的线程不安全问题 🚩 synchronized 关键字 📕 线程安全的概念 如果多线程环境下…

前端面经1

1、js是单线程还是多线程? 单线程执行。一次只能执行一个任务,处理任务的方式是通过一个任务队列(也称为消息队列)来实现的。如果某个操作(如网络请求或定时器)需要花费较长时间才能完成,它不会…

Flink SQL 的工作机制

前言 Flink SQL 引擎的工作流总结如图所示。 从图中可以看出,一段查询 SQL / 使用TableAPI 编写的程序(以下简称 TableAPI 代码)从输入到编译为可执行的 JobGraph 主要经历如下几个阶段: 将 SQL文本 / TableAPI 代码转化为逻辑执…

如何保证前后端交互信息不被篡改。

先说说前后端有哪些认证方式来保证: 基于 session 的认证方式:前端在用户登录成功后,后端会在服务器端生成一个唯一的 session ID,并将该 session ID 返回给前端,在后续的请求中,前端需要带上该 session ID…

【漏洞复现】蓝凌OA——远程命令执行

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现 漏洞描述 蓝凌OA平台,数字化向纵深发展,正加速构建产业互联…

图解分布式事务中的2PC与Seata方案

文章目录 文章导图什么是2PC解决传统2PC方案XA方案DTP模型举例:新用户注册送积分总结: Seata方案设计思想执行流程举例:新用户注册送积分 Seata实现2PC事务(AT模式)前提整体机制写隔离读隔离实际案例理解要点说明核心代…

自动驾驶-机器人-slam-定位面经和面试知识系列06之C++STL面试题(02)

这个博客系列会分为C STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新,基本涵盖了自己秋招历程被问过的面试内容(除了实习和学校项目相关的具体细节)。在知乎和牛客(某些文章上会附上内推码)也会同步更新&a…

锅总详解开源组织之ASF

ASF是什么?ASF孵化的顶级项目有哪些?ASF顶级项目商用化有哪些?涉及的版权是什么?应用案例有哪些?衍生项目及其关联是什么?希望本文能帮您解答这些疑惑! 一、ASF简介 Apache Software Foundati…

Java从入门到精通 (十一) ~ 操作系统、进程和线程

无论做什么,请记住都是为你自己而做,这样就毫无怨言!今天,我为自己而活!今天,又是美丽的一天!早安,朋友! 目录 前言 一、操作系统 1. 概念 2. 操作系统的基本功能 3…

Mindspore框架循环神经网络RNN模型实现情感分类|(五)模型训练

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|(一)IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|(二)预训练词向量 Mindspore框架循环神经网络RNN模型实现…

Ubuntu上编译多个版本的frida

准备工作 Ubuntu20(WSL) 略 安装依赖 sudo apt update sudo apt-get install build-essential git lib32stdc-9-dev libc6-dev-i386 -y nodejs 去官网[1]下载nodejs,版本的话我就选的20.15.1: tar -xf node-v20.15.1-linux-x64.tar.xz 下载源码 …

科研论文之Word论文编辑

这篇文章介绍在word中怎么编辑论文,包括论文的模板、论文的字体设置、论文的插图、论文的参考文献等等。 为便利知识传播,我的所有文章都不会设置收费专栏。但文章写作不易,如有可能麻烦打赏一下,金额随意。收款码见下图&#xff…

Ubuntu下手动部署Java项目

1.1 打包项目上传至Ubuntu 1.2 java -jar 项目压缩包 1.3 确认防火墙打开 1.4 令进程在后台运行 nohup java -jar boot工程.jar &> hello.log & 1.5 停止项目运行 查看进程号,杀掉进程

基于微信小程序+SpringBoot+Vue的刷题系统(带1w+文档)

基于微信小程序SpringBootVue的刷题系统(带1w文档) 基于微信小程序SpringBootVue的刷题系统(带1w文档) 本系统是将网络技术和现代的管理理念相结合,根据试题信息的特点进行重新分配、整合形成动态的、分类明确的信息资源,实现了刷题的自动化,…

axure制作切换栏--动态面板的应用

先看下效果:点击上面的切换栏 切换到西游记栏目: 切换到水浒传栏目: 上述两个图片比对可以发现,在点击切换栏的时候,里面的内容以及切换栏的下面蓝色横线也会发生对应的变化。这里涉及到两个地方的变化,就…

VirtualBox虚拟机安装,Ubuntu iso 镜像下载

利用VirtualBox,在Windows主机上装Ubuntu的虚拟机 视频教程在这: Virtualbox虚拟机安装,Ubuntu iso镜像下载_哔哩哔哩_bilibili 一、Ubuntu iso 镜像下载 我们是要在Windows主机上装Ubuntu的虚拟机,下载下Ubuntu iso 镜像。下…

react中如何避免父子组件同时渲染(memo的使用)

1.需求说明 react的渲染机制是父子组件同时渲染,不管子组件是否有变化只要父组件重新渲染了子组件就跟着重新渲染。为了避免不必要的消耗,我们可以使用memo钩子函数 2.使用memo前展示 import { memo,useState } from "react"function Son()…