28、Ansible 故障排除、测试策略及 AWX 使用指南

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!"
  1. 使用 --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" 配置作为警告来抑制。

  1. 修复第 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
  1. 修改 installer/inventory 文件,设置合理的密码和密钥,如 pg_password rabbitmq_password admin_password secret_key
  2. 进入安装文件夹并执行安装:
$ 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 }}'
  1. 点击“保存”,保存库存。

在 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,提升自动化运维的能力。在实际操作过程中,你可以根据具体需求对上述步骤进行调整和优化。

基于51单片机,实现对直流电机的调速、测速以及正反转控制。项目包含完整的仿真文件、源程序、原理图和PCB设计文件,适合学习和实践51单片机在电机控制方面的应用。 功能特点 调速控制:通过按键调整PWM占空比,实现电机的速度调节。 测速功能:采用霍尔传感器非接触式测速,实时显示电机转速。 正反转控制:通过按键切换电机的正转和反转状态。 LCD显示:使用LCD1602液晶显示屏,显示当前的转速和PWM占空比。 硬件组成 主控制器:STC89C51/52单片机(与AT89S51/52、AT89C51/52通用)。 测速传感器:霍尔传感器,用于非接触式测速。 显示模块:LCD1602液晶显示屏,显示转速和占空比。 电机驱动:采用双H桥电路,控制电机的正反转和调速。 软件设计 编程语言:C语言。 开发环境:Keil uVision。 仿真工具:Proteus。 使用说明 液晶屏显示: 第一行显示电机转速(单位:转/分)。 第二行显示PWM占空比(0~100%)。 按键功能: 1键:加速键,短按占空比加1,长按连续加。 2键:减速键,短按占空比减1,长按连续减。 3键:反转切换键,按下后电机反转。 4键:正转切换键,按下后电机正转。 5键:开始暂停键,按一下开始,再按一下暂停。 注意事项 磁铁和霍尔元件的距离应保持在2mm左右,过近可能会在电机转动时碰到霍尔元件,过远则可能导致霍尔元件无法检测到磁铁。 资源文件 仿真文件:Proteus仿真文件,用于模拟电机控制系统的运行。 源程序:Keil uVision项目文件,包含完整的C语言源代码。 原理图:电路设计原理图,详细展示了各模块的连接方式。 PCB设计:PCB布局文件,可用于实际电路板的制作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值