Ansible 故障排除、测试策略及 AWX 使用指南
1. Ansible 执行前的主机限制
在 Ansible 执行命令行中指定的 playbook 之前,它会分析清单以确定哪些目标在范围内,哪些不在。通过使用
--limit
关键字,我们可以强制 Ansible 忽略所有不在限制参数指定范围内的主机。
可以将多个主机指定为列表或使用模式,以下两个命令都会针对
host2.example.com
和
host3.example.com
执行 playbook:
$ ansible-playbook -i inventory helloworld.yaml --limit=host2.example.com,host3.example.com
$ ansible-playbook -i inventory helloworld.yaml --limit=host[2-3].example.com
limit
不会覆盖清单,而是对其添加限制。例如,如果我们将限制设置为清单中不存在的主机:
$ ansible-playbook -i inventory helloworld.yaml --limit=host4.example.com
我们将收到以下错误,并且不会执行任何操作:
[WARNING]: Could not match supplied host pattern, ignoring: host4.example.com
ERROR! Specified hosts and/or --limit does not match any hosts
2. 刷新代码缓存
在 IT 领域,缓存用于加速操作,Ansible 也不例外。通常,缓存是有益的,因此被广泛使用。然而,如果缓存了不应缓存的值,或者即使值已更改也未刷新缓存,可能会导致问题。
在 Ansible 中刷新缓存非常简单,只需在运行
ansible-playbook
时添加
--flush-cache
选项,示例如下:
ansible-playbook -i inventory helloworld.yaml --flush-cache
Ansible 使用 Redis 保存主机变量和执行变量。有时,这些变量可能会遗留下来并影响后续执行。使用
--flush-cache
选项可以避免这种情况,因为它会确保 Ansible 在执行期间刷新 Redis 缓存。
3. 检查语法错误
机器很容易判断文件的语法是否正确,但对人类来说可能更复杂。这并不意味着机器能为你修复代码,但它们可以快速识别是否存在问题。要使用 Ansible 的内置语法检查器,我们需要一个包含语法错误的 playbook。
步骤如下:
1. 创建一个
syntaxcheck.yaml
文件,内容如下:
---
- hosts: all
tasks:
- debug:
msg: "Hello, World!"
-
使用
--syntax-check命令:
$ ansible-playbook syntaxcheck.yaml --syntax-check
执行后会收到以下输出:
ERROR! 'msg' is not a valid attribute for a Task
The error appears to be in '/home/fale/ansible/Ansible2Cookbook/Ch11/syntaxcheck.yaml': line 4, column 7, but may be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
tasks:
- debug:
^ here
这个错误可以使用
"invalid_task_attribute_failed"
配置作为警告来抑制。
- 修复第 4 行的缩进问题:
---
- hosts: all
tasks:
- debug:
msg: "Hello, World!"
重新检查语法时,将不会返回错误:
$ ansible-playbook syntaxcheck-fixed.yaml --syntax-check
playbook: syntaxcheck.yaml
当语法检查未发现错误时,输出将类似于上述内容,列出分析的文件但不列出任何错误。
4. 安装 AWX
在某些情况下,使用 Ansible 的 CLI 可能不是最佳选择,此时 AWX 或 Ansible Tower 是更好的选择。AWX 是上游开源版本,而 Ansible Tower 是 Red Hat 的下游产品,需要付费但有官方支持。这里我们以 AWX 为例进行介绍。
安装 AWX 的技术要求如下:
- Ansible 2.4+
- Docker
- docker Python 模块
- docker-compose Python 模块
- 如果系统使用 Security-Enhanced Linux (SELinux),还需要 libselinux Python 模块
安装步骤如下:
1. 克隆 AWX Git 仓库:
$ git clone https://github.com/ansible/awx.git
-
修改
installer/inventory文件,设置合理的密码和密钥,如pg_password、rabbitmq_password、admin_password和secret_key。 - 进入安装文件夹并执行安装:
$ cd awx/installer
$ ansible-playbook -i inventory install.yml
安装完成后,可以使用
docker ps
命令检查安装情况,输出示例如下:
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
7e388622a9a5 ansible/awx_task:5.0.0 "/tini -- /bin/sh ..." 2 minutes
ago Up 2 minutes 8052/tcp awx_task
03946e9f7a74 ansible/awx_web:5.0.0 "/tini -- /bin/sh ..." 2 minutes
ago Up 2 minutes 0.0.0.0:80->8052/tcp awx_web
d1134f5dc89a ansible/awx_rabbitmq:3.7.4 "docker-entrypoint..." 2 minutes
ago Up 2 minutes 4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp
awx_rabbitmq
2184596d2584 postgres:9.6 "docker-entrypoint..." 2 minutes
ago Up 2 minutes 5432/tcp awx_postgres
dd6ebe2f8c8e memcached:alpine "docker-entrypoint..." 2 minutes
ago Up 2 minutes 11211/tcp awx_memcached
现在可以通过浏览器访问
http://<ip address of your AWX host>/
,使用之前在清单文件中指定的凭据登录(默认管理员用户名是
admin
)。
5. 创建 AWX 项目
AWX 使用“项目”来标识 Ansible playbook 的存储库。AWX 项目支持将 playbook 放置在所有主要的源代码管理 (SCM) 系统中,如 Git、Mercurial 和 SVN,也支持文件系统上的 playbook 或 Red Hat Insights 提供的 playbook。创建项目的步骤如下:
1. 点击左侧菜单栏的“Projects”,然后点击屏幕左上角绿色背景上带有白色加号的按钮,打开一个窗口。
2. 填写名称(如
Samples Repo
),选择 SCM 类型为
Git
,窗口会显示新的参数。
3. 添加 SCM URL(如
https://github.com/ansible/ansible-tower-samples
),然后点击“保存”按钮。
AWX 项目有一个有趣的配置选项是“update revision on launch”。如果启用此选项,Ansible 在运行项目中的任何 playbook 之前都会更新 playbook 仓库,确保始终执行最新版本的 playbook。不过,每次执行 playbook 时实际上会运行两个 playbook,会增加任务执行时间,但好处远大于这点小缺点。
6. 创建库存
与 Ansible Core 一样,为了让 AWX 了解环境中的机器,我们使用库存。在 AWX 中创建第一个库存的步骤如下:
1. 点击左侧菜单栏的“Inventory”,重定向到库存窗口,点击屏幕左上角绿色背景上带有白色加号的按钮。此按钮不会立即打开创建表单,而是先询问你是要创建库存还是智能库存。
2. 选择“Inventory”选项后,会出现一个窗口,设置名称并保存。
3. 点击“保存”后,“Permissions”、“Groups”、“Hosts”、“Sources”和“Completed Jobs” 标签变为可点击状态,可以继续配置。
4. 因为空库存没有用处,我们添加
localhost
。选择“Hosts” 标签,点击屏幕左上角绿色背景上带有白色加号的按钮,打开一个窗口。
5. 添加主机名
localhost
,并在“VARIABLES” 框中添加以下代码,指示 Ansible 使用本地连接:
---
ansible_connection: local
ansible_python_interpreter: '{{ ansible_playbook_python }}'
- 点击“保存”,保存库存。
在 AWX 中,库存与 Ansible Core 库存类似,但有额外的功能,如内置的动态库存支持。智能库存是由 AWX 根据用户选择的特定智能主机过滤器从其他库存中的主机过滤填充的,可用于动态创建包含特定类型主机的库存。
7. 创建作业模板
现在我们有了项目中的 playbook 和库存中的主机,可以创建作业模板。AWX 中的作业模板是执行作业所需配置的集合,类似于
ansible-playbook
命令行选项。创建作业模板的原因是可以在很少或无需用户输入的情况下启动 playbook 运行,可将其委托给可能不了解 playbook 详细工作原理的团队,甚至可以定期运行而无需人工干预。
创建作业模板的步骤如下:
1. 点击左侧菜单栏的“Templates”。
2. 点击屏幕左上角绿色背景上带有白色加号的按钮,选择“Job template”。
3. 在窗口中,填写必要信息:名称(如
Hello World
)、库存(选择之前创建的
Test Inventory
)、项目(选择之前创建的
Samples Repo
项目)和 playbook(选择
hello_world.yml
),然后点击“保存”。
由于我们使用本地连接到
localhost
,不需要创建或指定任何凭据。但如果针对一个或多个远程主机运行作业模板,则需要创建机器凭据并将其与作业模板关联。机器凭据可以是 SSH 用户名和密码或 SSH 用户名和私钥,它们安全地存储在 AWX 的后端数据库中。
作业模板创建窗口中的许多字段都有“Prompt on launch”选项,这允许在创建作业模板时可选地设置该值,也允许运行作业的用户在运行时输入或覆盖该值。这在每次运行时字段值会变化的情况下非常有用,但可能会阻止定期作业运行,因此启用此功能时要谨慎。
以下是一个简单的流程图,展示了从安装 AWX 到创建作业模板的主要流程:
graph LR
A[安装 AWX] --> B[创建 AWX 项目]
B --> C[创建库存]
C --> D[创建作业模板]
通过以上步骤,你可以在 AWX 中进行一系列操作,从安装到创建作业模板,实现 Ansible playbook 的高效运行和管理。
8. 运行作业
在创建好作业模板后,就可以运行作业了。运行作业的操作非常简单,具体步骤如下:
1. 点击左侧菜单栏的“Jobs”。
2. 在作业列表中找到之前创建的作业模板对应的作业,点击作业名称右侧的“启动”按钮。
作业启动后,会在作业列表中显示作业的运行状态,如“正在运行”“已完成”“失败”等。点击作业名称,可以查看作业的详细输出信息,包括每个任务的执行结果和日志。
9. 控制对 AWX 的访问
为了确保 AWX 的安全性和数据的保密性,需要对 AWX 的访问进行控制。可以通过创建用户、团队和组织,并为其分配相应的权限来实现。
9.1 创建用户
创建用户的步骤如下:
1. 点击左侧菜单栏的“Users”。
2. 点击屏幕左上角绿色背景上带有白色加号的按钮,打开创建用户窗口。
3. 在窗口中填写用户的基本信息,如用户名、密码、电子邮件等,然后点击“保存”。
9.2 创建团队
创建团队的步骤如下:
1. 点击左侧菜单栏的“Teams”。
2. 点击屏幕左上角绿色背景上带有白色加号的按钮,打开创建团队窗口。
3. 在窗口中填写团队的名称和描述,然后点击“保存”。
9.3 创建组织
创建组织的步骤如下:
1. 点击左侧菜单栏的“Organizations”。
2. 点击屏幕左上角绿色背景上带有白色加号的按钮,打开创建组织窗口。
3. 在窗口中填写组织的名称和描述,然后点击“保存”。
9.4 分配权限
可以为用户、团队和组织分配不同的权限,以控制他们对 AWX 资源的访问。权限分配的步骤如下:
1. 选择要分配权限的用户、团队或组织。
2. 点击“Permissions”标签,进入权限分配页面。
3. 在页面中选择要分配的权限,如“Read”“Write”“Admin”等,然后点击“保存”。
以下是一个权限分配的表格示例:
| 角色 | 项目访问权限 | 库存访问权限 | 作业模板访问权限 |
| ---- | ---- | ---- | ---- |
| 用户 A | Read | None | None |
| 团队 B | Read, Write | Read | Read, Write |
| 组织 C | Admin | Admin | Admin |
10. 总结
通过以上内容,我们学习了 Ansible 的故障排除和测试策略,包括主机执行限制、代码缓存刷新、语法错误检查等。同时,详细介绍了 AWX 的安装和使用,涵盖了创建项目、库存、作业模板、运行作业以及控制访问等方面。
在实际应用中,合理运用这些技巧和工具,可以提高 Ansible 脚本的开发效率和可靠性,同时借助 AWX 实现更灵活、更自动化的任务管理。以下是一个总结性的流程图,展示了整个操作流程:
graph LR
A[Ansible 故障排除与测试] --> B[安装 AWX]
B --> C[创建 AWX 项目]
C --> D[创建库存]
D --> E[创建作业模板]
E --> F[运行作业]
G[控制对 AWX 的访问] --> C
G --> D
G --> E
G --> F
希望这些内容能帮助你更好地使用 Ansible 和 AWX,提升自动化运维的能力。在实际操作过程中,你可以根据具体需求对上述步骤进行调整和优化。
超级会员免费看
41

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



