注意:要运行playbook前,要登录镜像仓库!!


ansible-config init --disabled | less 是一个用于查看 Ansible 配置文件(ansible.cfg)所有可用选项的命令,各部分作用如下:
命令解析
-
ansible-config init:生成 Ansible 配置文件的模板(ansible.cfg) -
--disabled:所有配置项默认以注释(#)形式呈现(不启用),仅作为参考 -
| less:将输出通过管道传递给less分页器,方便逐页查看(按Space翻页,q退出)
输出内容
执行后会显示 ansible.cfg 中所有可用的配置选项,包括:
-
[defaults]:核心默认配置(如 inventory 文件路径、远程用户、超时时间等)
-
[privilege_escalation]:权限提升配置(如
become相关设置) -
[ssh_connection]:SSH 连接配置(如控制持久化、超时设置等)
-
[selinux]:SELinux 相关配置
-
其他模块特定的配置段
每个配置项都包含注释说明,例如:
# [defaults]
# inventory = /etc/ansible/hosts # 定义inventory文件路径
# remote_user = root # 默认远程登录用户
# timeout = 10 # 连接超时时间(秒)
# ...
1、ansible的安装与配置
1. 建立anisble工作目录
[devops@workstation ~]$ mkdir -p /home/devops/ansible/
[devops@workstation ~]$ mkdir -p /home/devops/ansible/mycollection
[devops@workstation ~]$ mkdir -p /home/devops/ansible/roles
2. 设置vim工作模式(可选)
[devops@workstation ansible]$ vim ~/.vimrc
autocmd FileType yaml setlocal ai ts=2 sw=2 et
###############################
setlocal ##设定当前文件
ai ##自动退格对齐 auto indent
ts ##tab建长度为2空格 tabstop=2
sw ##缩进长度为2 shiftwidth=2
et ##把tab键变成空格 expandtab
###############################
3. 安装ansible所需软件
[devops@workstation ~]$ sudo dnf install ansible ansible-navigator rhel-system-roles -y
4. 登录容器镜像仓库
[devops@workstation ansible]$ podman login utility.lab.example.com
5. 设置ansible-navigator运行环境
[devops@workstation ~]$ cd /home/devops/ansible
[devops@workstation ansible]$ vim ansible-navigator.yml
---
ansible-navigator:
ansible:
config:
path: ./ansible.cfg
color:
osc4: false
execution-environment:
image: utility.lab.example.com/ee-supported-rhel8:latest
上面的模板可以在root用户中使用cat ansible-navigator.yml命令获取模板。
6. 查看ansible是否可以运行正常
[devops@workstation ansible]$ ansible-navigator images
7. 配置ansible,编写ansible配置文件
#查看ansible配置模板
[devops@workstation ansible]$ ansible-config init --disabled | less
#根据模板内容生成配置文件
[devops@workstation ansible]$ vim ansible.cfg
[defaults] #ansible基本信息
remote_user=devops
inventory=/home/devops/ansible/inventory
collections_path=/home/devops/ansible/mycollections
#roles_path=roles:/home/devops/ansible/roles
[privilege_escalation] #ansible提权信息
become=yes
become_ask_pass=False
become_method=sudo
become_user=root
#编写工作清单
[devops@workstation ansible]$ vim inventory
[dev]
servera
[test]
serverb
[balancers]
serverb
[prod]
serverc
serverd
[webservers:children]
prod
补充:如果使用 ansible all -m shell -a "whoami"命令的时候需要输入密码,说明ssh登录有点问题,需要使用这条命令scp root@172.25.250.250:/root/.ssh/id_rsa ~/.ssh/id_rsa,将远程主机的 id_rsa 私钥复制到本地后,本地主机可以直接通过该私钥登录远程主机(无需输入密码),避免问题出现。
#查看清单信息
[devops@workstation ansible]$ ansible-navigator inventory -m stdout --graph
。。。 省略 。。。
@all:
|--@balancers:
| |--serverb
|--@dev:
| |--servera
|--@test:
| |--serverb
|--@ungrouped:
|--@webservers:
| |--@prod:
| | |--serverc
| | |--serverd
实操图片:
首先登录到workstation主机
然后创建相应的题目中需要创建的目录
搜索软件包
安装需要的软件包
设置ansible-navigator的运行环境
登录容器镜像仓库
查看与 Ansible 执行环境相关的容器镜像,查看ansible是否可以运行正常
编写主机清单文件
下图是/home/devops/ansible/ansible.cfg的配置
跟上面的补充说明的情况一样,所以执行这条命令,这条命令复制出来可能会让命令中的空格被编码为不可见字符(
\302\240),导致命令出现错误,所以这条命令要手动打字。此
scp命令用于将远程主机172.25.250.250上root用户的 SSH 私钥(/root/.ssh/id_rsa)复制到本地当前用户的.ssh目录下,并重命名为id_rsa。
主机清单inventory和配置文件ansible.cfg都配置完成后进行测试,发现配置生效即可。
查看清单信息
2、创建 yum 仓库
ansible中的模板相当于shell中的命令,ansible中的playbook相当于shell中的脚本。
作为系统管理员,需在受管节点上安装软件。
• 创建 playbook /home/devops/ansible/yum_repo.yml,该 playbook 将在各个受管节点上
• 创建以下 yum 仓库:
– 仓库 1:
• 仓库的名称为 RH294_BASE
• 描述为 RH294 base software
• BaseURL 为:
http://content.example.com/rhel9.0/x86_64/dvd/BaseOS
• GPG 签名检查为启用状态
• GPG 密钥 URL 为:
http://content.example.com/rhel9.0/x86_64/dvd/RPM-GPG-KEY-redhat-release
• 仓库为启用状态
– 仓库 2:• 仓库的名称为 RH294_STREAM
• 描述为 RH294 stream software
• BaseURL 为:
http://content.example.com/rhel9.0/x86_64/dvd/AppStream
• GPG 签名检查为启用状态
• GPG 密钥 URL 为:
http://content.example.com/rhel9.0/x86_64/dvd/RPM-GPGKEY-redhat-release
• 仓库为启用状态
2.1 编写yml文件
![]()

2.2 运行yml脚本

3.3 测试软件仓库能否使用
[devops@workstation ansible]$ ansible all -m shell -a 'cat /etc/yum.repos.d/rhel.repo'
[devops@workstation ansible]$ ansible all -m shell -a 'dnf clean all'
[devops@workstation ansible]$ ansible all -m shell -a 'dnf makecache'
[devops@workstation ansible]$ ansible all -m shell -a 'yum repolist'
[devops@workstation ansible]$ ansible all -m shell -a 'dnf install httpd -y'
3、安装 Collections
以 devops 身份,将以下 collections 从资源连接目录中安装到workstation.lab.example.com
• redhat-rhel_system_roles-1.16.2.tar.gz
• ansible-posix-1.4.0.tar.gz
• community-general-4.3.0.tar.gz
• 资源连接:
http://materials.example.com/tools
集合应安装到默认集合目录 /home/devops/ansible/mycollection
3.1 下载资源



3.2 安装collections
![]()
![]()

3.3 查看collections

4.安装软件包
1.编写packages.yml
![]()
通过命令查看示例,来帮助我们改写yml文件


2. 运行packages.yml这个playbook
![]()
3. 测试


5.使用角色
![]()
![]()



![]()
检查:

6.使用 Ansible Galaxy 安装角色
![]()


通过 ansible-galaxy 从 requirements.yml 文件安装指定的 Ansible 角色,以下是详细说明:
1. requirements.yml 文件解析
该文件用于定义需要安装的 Ansible 角色信息,你的配置中包含两个角色:
- src: http://materials.example.com/tools/haproxy.tar # 角色的来源(远程tar包)
name: balancer # 为该角色指定本地名称(安装后会以balancer命名)
- src: http://materials.example.com/tools/phpinfo.tar # 第二个角色的来源
name: phpinfo # 第二个角色的本地名称
-
src:指定角色的获取路径(这里是远程服务器上的 tar 包,也可以是 Git 仓库地址、本地路径等)。 -
name:自定义角色的本地名称,方便在 Playbook 中引用(如roles: - balancer)。
2. 安装命令解析
ansible-galaxy install -r roles/requirements.yml -p roles/
ansible-galaxy install -r roles/requirements.yaml -p ./roles 是用于从指定的 requirements 文件安装 Ansible 角色的命令,各参数含义和作用如下:
命令解析
-
ansible-galaxy install:Ansible 的角色安装工具,用于从 Ansible Galaxy 仓库或其他源下载角色。 -
-r roles/requirements.yaml:-r表示指定一个 ** requirements 文件 **(此处为roles/requirements.yaml),该文件中定义了需要安装的角色列表(名称、版本、来源等)。 -
-p ./roles:-p指定角色的安装路径(此处为当前目录下的roles文件夹),默认路径是/etc/ansible/roles,使用-p可自定义到项目本地,方便项目隔离管理。
3. 执行结果与后续使用
-
执行成功后,两个角色会被解压并安装到
roles/balancer/和roles/phpinfo/目录。 -
在 Playbook 中可以直接引用这些角色:
- hosts: webservers roles: - balancer # 引用安装的balancer角色 - phpinfo # 引用安装的phpinfo角色
检查:

7.创建和使用角色
![]()

上图和下图都是用于创建apache角色的命令,只是一个指定了路径来进行安装,而另一个是进入要安装的路径目录后才在当前目录执行安装命令。

ansible-galaxy init apache --init-path roles/ 命令用于在指定目录下初始化一个名为 apache 的 Ansible 角色(Role),各部分含义如下:
命令解析
ansible-galaxy init:Ansible 用于创建新角色骨架的命令。apache:指定要创建的角色名称(该名称将作为角色的目录名)。--init-path roles/:指定角色的创建路径为当前目录下的roles/文件夹(若该目录不存在,会自动创建)。
执行后生成的角色结构
执行命令后,会在 roles/apache/ 目录下生成标准的 Ansible 角色目录结构,包含以下文件和文件夹:
roles/apache/
├── defaults/ # 角色的默认变量(优先级最低)
│ └── main.yml
├── files/ # 存放需要复制到目标主机的静态文件(如配置模板源文件)
├── handlers/ # 定义 handlers(通常用于任务触发的操作,如重启服务)
│ └── main.yml
├── meta/ # 角色的元数据(如作者、依赖关系等)
│ └── main.yml
├── README.md # 角色的说明文档
├── tasks/ # 角色的核心任务(主逻辑)
│ └── main.yml
├── templates/ # 存放 Jinja2 模板文件(动态配置文件)
├── tests/ # 角色的测试相关文件
│ ├── inventory
│ └── test.yml
└── vars/ # 角色的变量(优先级较高,通常不建议修改)
└── main.yml
各目录用途
tasks/main.yml:最核心的文件,定义角色要执行的任务(如安装 Apache、配置服务等)。templates/:存放带变量的配置模板(如httpd.conf.j2),部署时会渲染为实际配置文件。handlers/main.yml:定义任务执行后需要触发的操作(如restart apache)。defaults/main.yml:定义角色的默认变量(可被外部变量覆盖)。
编写的 index.html.j2 模板要在新建的 apache 角色下的 templates 目录里。


在 tasks 目录里面编写这个角色安装httpd软件等等操作的 main.yml 文件
![]()

然后再ansible目录中编写newrole.yml文件,使用apache这个角色
![]()

运行newrole.yml

测试:能看到以下信息就说明成功了

8.从 Ansible Galaxy 使用角色
![]()
balancers组多一个配置 Firewalld 防火墙以允许 HTTP 服务通过的任务,因为上一题中phpinfo已经配置过火墙了,所以这里就不在配置任务,不然会报错。
phpinfo的执行要在balancer之前,不然也有可能会报错。

测试:可以看到实现了web的负载均衡,而且也能访问hello.php文件。

9.创建和使用分区

![]()



可以看到创建1500MiB的分区建立不了,所以建立了800MiB的分区

测试:如下图则成功。
、
10.生成主机文件







测试:发现dev组里面的主机servera生成了/etc/myhosts文件,且内容如下则说明成功。

11. 修改文件内容
创建名为 issue.yml 的 playbook,要求如下:
– 此 playbook 运行到所有受控节点
• 此 playbook 覆盖/etc/issue 文件中的内容:
• 在 dev 主机组的主机中,内容是:Development 在 test 主机组的主机中,内容是:Test
• 在 prod 主机组的主机中,内容是:Production
这里编写yml文件使用的是copy模块,查找一下copy模块的示例
![]()
找到下图的示例,content表示直接指定要写入文件的内容(字符串形式);dest表示目标文件的路径(/etc/mine.conf),若文件不存在,会自动创建;若已存在,会覆盖原有内容。

![]()

![]()

12.创建 Web 内容目录
按照下方所述,创建名为 webcontent.yml 的 playbook:
– 该 playbook 在 dev 主机组中的受管节点上运行
– 创建目录 /webdev 所有者为 webdev 组
– 具有常规权限:owner=read+write+execute,
group=read+write+execute,other=read+execute
– 具有特殊权限:set group ID
– 用软链接将 /var/www/html/webdev 链接到 /webdev
– 创建文件 /webdev/index.html,内容为:Red Hat Ansible
– 在 dev 主机组中主机上浏览此目录(例如
http://servera.lab.example.com/webdev/index.html )将生成以下输出:
Red Hat Ansible
![]()



测试:

以下是本次用到的模块:
[devops@workstation ansible]$ ansible-doc user
[devops@workstation ansible]$ ansible-doc dnf
[devops@workstation ansible]$ ansible-doc service
[devops@workstation ansible]$ ansible-doc file
[devops@workstation ansible]$ ansible-doc copy
[devops@workstation ansible]$ ansible-doc firewalld
13.生成硬件报告



lineinfile 模块用于在文件中确保特定行存在、替换行、删除行或插入行,适用于修改配置文件(如 /etc/hosts、/etc/sysconfig/network 等),避免直接覆盖整个文件。





测试:

14.创建 password vault


检查:


15.创建用户帐户




16.更新 Ansible 库的密钥

检查:输入修改后的密钥看密钥是否更新成功

17.配置 cron 作业
















1384

被折叠的 条评论
为什么被折叠?



