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 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Meaauf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值