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

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

1. Ansible 故障排除与测试

在使用 Ansible 时,我们可能会遇到各种问题,下面介绍一些故障排除和测试的策略。

1.1 错误示例

在执行过程中,可能会收到如下错误:

[WARNING]: Could not match supplied host pattern, ignoring: host4.
example.com
ERROR! Specified hosts and/or --limit does not match any hosts

遇到这种错误时,系统不会执行后续操作。

1.2 刷新代码缓存

在 IT 领域,缓存常用于加速操作,Ansible 也不例外。通常,缓存是有益的,但如果缓存了不应缓存的值,或者在值发生变化后未刷新缓存,就可能会引发问题。
在 Ansible 中刷新缓存非常简单,只需在运行 ansible-playbook 命令时添加 --flush-cache 选项,示例如下:

ansible-playbook -i inventory helloworld.yaml --flush-cache

Ansible 可以使用多个缓存插件来保存主机变量和执行变量。有时,这些变量可能会残留并影响后续执行。使用 --flush-cache 选项可以确保 Ansible 在执行过程中刷新事实缓存,避免此类问题。

1.3 检查语法错误

判断文件语法是否正确,机器相对容易做到,但对人类来说可能更复杂。虽然机器不能帮你修复代码,但能快速识别是否存在问题。要使用 Ansible 内置的语法检查器,需要一个包含语法错误的剧本,具体步骤如下:
1. 创建一个名为 syntaxcheck.yaml 的文件,内容如下:

---
- hosts: all
  tasks:
  - ansible.builtin.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 配置作为警告进行抑制。
3. 修复第 4 行的缩进问题,修改后的文件内容如下:

---
- hosts: all
  tasks:
  - ansible.builtin.debug:
      msg: "Hello, World!"

再次检查语法:

$ ansible-playbook syntaxcheck-fixed.yaml --syntax-check

如果语法检查未发现错误,输出将类似于上述示例,仅列出分析的文件,而不显示错误信息。

2. AWX 与 Ansible Automation Controller 介绍

Ansible 功能强大,但需要用户使用命令行界面(CLI)。在某些情况下,这并非最佳选择,例如需要从另一个作业触发 Ansible 作业(使用 API 会更好),或者希望触发作业的人只能触发特定作业。此时,AWX 和 Ansible Automation Controller 是不错的选择。

AWX 是上游开源版本,而 Ansible Automation Controller 是 Red Hat 的下游组件,作为 Ansible Automation Platform 的一部分提供官方支持,但需要付费。AWX 以 Kubernetes Operator 的形式提供,可以在任何 Kubernetes 集群上运行;而 Ansible Automation Controller 可以通过 Kubernetes Operator 安装在 Red Hat OpenShift 或 RHEL 8.2+ 机器上。

3. 安装 AWX

要使用 AWX,首先需要将其安装到机器上。以下是安装步骤:

3.1 技术要求

安装 AWX 建议使用基于 Operator 的安装方式,因此需要有一个 Kubernetes 集群。在本地机器上创建集群的最简单方法是使用 minikube
在 Linux 机器上,从 GitHub(https://github.com/kubernetes/minikube)下载 minikube ,并使用以下命令运行:

minikube start --cpus=4 --memory=6g --addons=ingress

为了使用 kubectl 命令,需要执行以下操作:

alias kubectl="minikube kubectl --"

对于其他操作系统,安装过程可能不同,建议查看 minikube 的官方文档(https://minikube.sigs.k8s.io/docs/start/),选择适合自己平台和需求的安装方法。

3.2 使用 Kustomize 安装 AWX Operator
  1. 创建一个名为 kustomization.yaml 的文件,内容如下:
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - github.com/ansible/awx-operator/config/default?ref=2.3.0
images:
  - name: quay.io/ansible/awx-operator
    newTag: 2.3.0
namespace: awx

注意,截至撰写本文时,最新版本是 2.3.0,可访问 https://github.com/ansible/awx-operator/releases 查看最新版本。
2. 应用 kustomization 文件:

kubectl apply -k .

执行完上述命令后,可以查看 AWX Operator 控制器管理器 Pod 是否正在运行:

$ kubectl get pods -n awx
  1. 创建 awx.yaml 文件,内容如下:
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx
spec:
  service_type: nodeport
  1. 编辑 kustomization.yaml 文件,添加对 awx.yaml 文件的引用:
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - github.com/ansible/awx-operator/config/default?ref=2.3.0
  - awx.yaml
images:
  - name: quay.io/ansible/awx-operator
    newTag: 2.3.0
namespace: awx
  1. 应用新的配置文件:
$ kubectl apply -k .
  1. 运行以下命令检查安装是否成功:
$ kubectl get pods -n awx -l "app.kubernetes.io/managed-by=awx-operator"
$ kubectl get svc -n awx -l "app.kubernetes.io/managed-by=awx-operator"

请注意,AWX 完全部署并使所有 Pod 运行可能需要几分钟时间。部署完成后,可以在浏览器中连接到 AWX 服务。获取 URL 的命令如下:

$ minikube service -n awx awx-service --url

默认管理用户名是 admin ,获取密码的命令如下:

$ kubectl get secret -n awx awx-admin-password -o jsonpath="{.data.password}" | base64 --decode ; echo
4. 在 AWX 中运行第一个剧本

在 AWX 中运行 Ansible 剧本的目标与在 Ansible 中相同,每个运行的剧本称为一个作业。由于 AWX 比 Ansible 提供了更多的灵活性和自动化功能,因此在运行第一个作业之前需要进行一些配置。

4.1 创建 AWX 项目

AWX 使用“项目”来标识 Ansible 剧本的存储库。AWX 项目支持将剧本放置在所有主要的源代码管理(SCM)系统中,如 Git 和 SVN,也支持文件系统上的剧本或 Red Hat Insights 提供的剧本。创建项目的步骤如下:
1. 从左侧菜单栏选择“Projects”,然后点击屏幕左上角的“Add”按钮,会打开一个新窗口。
2. 填写项目名称(如“Sample Project”),并选择“Git”作为源控制类型,窗口会显示更多参数。
3. 添加 SCM URL(如 https://github.com/ansible/ansible-tower-samples ),然后点击“Save”按钮。

AWX 项目有一个有趣的配置选项是“Update Revision on Launch”。启用此选项后,Ansible 在运行项目中的任何剧本之前都会更新剧本存储库,确保始终执行最新版本的剧本。虽然每次执行剧本时会额外运行一个更新操作,增加了任务执行时间,但能避免运行旧版本剧本带来的问题,因此建议启用该选项。

4.2 创建库存

与 Ansible Core 一样,要让 AWX 了解环境中的机器,可以使用库存。AWX 中的库存与 Ansible Core 中的库存类似。创建第一个库存的步骤如下:
1. 点击左侧菜单栏中的“Inventory”选项,会重定向到库存窗口,点击屏幕左上角的“Add”按钮。此按钮不会立即打开创建表单,而是会询问你要创建库存还是智能库存。
2. 选择“Inventory”选项后,会出现一个窗口。
3. 在窗口中设置库存名称,然后点击“Save”按钮。保存后,“Permissions”、“Groups”、“Hosts”、“Sources”和“Completed Jobs”选项卡将变为可点击状态,以便继续配置。
4. 由于空库存没有实际用途,我们将 localhost 添加到库存中。选择“Hosts”选项卡,然后点击屏幕左上角绿色背景上带有白色加号的按钮,会打开一个新窗口。
5. 在窗口中添加主机名( localhost ),并在“Variables”框中添加以下代码,指示 Ansible 使用本地连接:

---
ansible_connection: local
ansible_python_interpreter: '{{ ansible_playbook_python }}'
  1. 点击“Save”按钮保存库存。

AWX 中的库存支持内置的动态库存功能,无需编辑配置文件或安装额外的 Python 模块。可以通过“Sources”选项卡选择从各种数据源自动填充库存,如公共云提供商(AWS、Azure、GCP)、私有云(VMware、OpenStack)或其他系统(Red Hat Satellite 或自定义脚本)。

在库存创建过程开始时,有创建库存或智能库存的选项。智能库存是由 AWX 根据其他库存中的主机进行筛选后填充的库存,用户可以在创建时选择特定的智能主机过滤器。这对于根据过滤器动态创建包含特定类型主机的库存非常有用,避免了手动创建大量不同组或多次添加同一主机的麻烦。

4.3 创建作业模板

作业模板是执行作业所需的配置集合,类似于 ansible-playbook 命令行选项。创建作业模板的目的是为了在运行剧本时减少用户输入,甚至可以将其委托给不了解剧本详细工作原理的团队,还可以定期运行而无需人工干预。创建作业模板的步骤如下:
1. 点击左侧菜单栏中的“Templates”选项。
2. 点击屏幕左上角的“Add”按钮,选择“Job template”,会出现一个窗口。
3. 填写必要信息,如名称(“Hello World”)、库存(选择之前创建的“Sample Inventory”)、项目(选择之前创建的“Sample Project”)和剧本(选择 hello_world.yml ),然后点击“Save”按钮。

由于我们使用本地连接到 localhost 运行作业模板,因此不需要创建或指定任何凭据。但如果要针对一个或多个远程主机运行作业模板,则需要创建一个机器凭据并将其与作业模板关联。机器凭据可以是 SSH 用户名和密码,或 SSH 用户名和私钥,这些信息安全地存储在 AWX 的后端数据库中,方便将剧本相关任务委托给其他团队,而无需直接提供密码或 SSH 密钥。

在创建作业模板时,首先要选择是创建作业模板还是工作流模板。我们选择作业模板是为了创建简单的作业。也可以创建更复杂的作业,即多个作业模板的组合,并在作业之间设置流控制功能,实现更复杂的场景。

作业模板创建窗口中的许多字段都有“Prompt on launch”选项。此选项允许在创建作业模板时可选地设置值,也允许运行作业的用户在运行时输入或覆盖该值。这对于每次运行时都会变化的字段(如 limit 字段,与 ansible-playbook 命令中的 --limit 作用相同)非常有用,也可以作为一种合理性检查,但可能会阻塞定期作业运行,因此启用此功能时需要谨慎。

4.4 运行作业

作业是作业模板的实例,要在机器上执行任何操作,需要创建作业模板实例,即作业。运行作业的步骤如下:
1. 点击左侧菜单栏中的“Templates”选项。
2. 找到要运行的作业模板(如“Hello World”),点击页面右侧对应的小火箭图标。
3. 作业运行时,AWX 允许在作业输出中跟踪作业的执行情况。点击“Details”选项卡,可以查看作业的更多详细信息。

AWX 和 Ansible Automation Controller 的一个重要特性是将作业执行输出存档在后端数据库中,方便在未来随时查询作业运行情况,了解发生的变化,这对于审计和策略执行非常有用。

综上所述,通过以上步骤,你可以在 AWX 中完成项目创建、库存配置、作业模板设置和作业运行等操作,充分利用 AWX 的灵活性和自动化功能。

5. 控制对 AWX 的访问

为了确保 AWX 的安全和合理使用,需要对其进行访问控制。以下是创建用户、团队、组织并分配权限的步骤。

5.1 创建用户

在 AWX 中创建用户的步骤如下:
1. 登录到 AWX 界面。
2. 点击左侧菜单栏中的“Users”选项。
3. 点击屏幕左上角的“Add”按钮,会出现一个创建用户的窗口。
4. 在窗口中填写用户的相关信息,如用户名、密码、电子邮件等。
5. 点击“Save”按钮保存用户信息。

5.2 创建团队

团队是用户的集合,创建团队可以方便对用户进行分组管理。创建团队的步骤如下:
1. 点击左侧菜单栏中的“Teams”选项。
2. 点击屏幕左上角的“Add”按钮,会出现一个创建团队的窗口。
3. 在窗口中填写团队的名称和描述等信息。
4. 点击“Save”按钮保存团队信息。
5. 可以将之前创建的用户添加到团队中,点击团队名称进入团队详情页面,在“Users”选项卡中添加用户。

5.3 创建组织

组织是团队和项目的容器,创建组织可以更好地管理多个团队和项目。创建组织的步骤如下:
1. 点击左侧菜单栏中的“Organizations”选项。
2. 点击屏幕左上角的“Add”按钮,会出现一个创建组织的窗口。
3. 在窗口中填写组织的名称和描述等信息。
4. 点击“Save”按钮保存组织信息。
5. 可以将之前创建的团队添加到组织中,点击组织名称进入组织详情页面,在“Teams”选项卡中添加团队。

5.4 分配权限

在 AWX 中,可以为用户、团队和组织分配不同的权限,以控制他们对项目、库存、作业模板等资源的访问和操作。分配权限的步骤如下:
1. 选择要分配权限的资源,如项目、库存、作业模板等。
2. 点击资源名称进入资源详情页面,在“Permissions”选项卡中添加用户、团队或组织。
3. 选择要分配的权限,如查看、编辑、删除等。
4. 点击“Save”按钮保存权限设置。

以下是一个简单的权限分配示例表格:
| 资源 | 用户/团队/组织 | 权限 |
| ---- | ---- | ---- |
| 项目 | 团队 A | 查看、编辑 |
| 库存 | 用户 B | 查看 |
| 作业模板 | 组织 C | 执行 |

6. 总结

通过以上内容,我们学习了 Ansible 的故障排除和测试策略,包括刷新代码缓存和检查语法错误的方法。同时,深入了解了 AWX 和 Ansible Automation Controller 的相关知识,掌握了 AWX 的安装步骤,以及在 AWX 中创建项目、库存、作业模板、运行作业和控制访问的详细流程。

下面是一个 mermaid 格式的流程图,展示了在 AWX 中运行作业的主要流程:

graph LR
    A[安装 AWX] --> B[创建 AWX 项目]
    B --> C[创建库存]
    C --> D[创建作业模板]
    D --> E[运行作业]

在实际应用中,我们可以根据具体需求灵活运用这些知识和技能,提高自动化运维的效率和可靠性。同时,在使用 AWX 时,要注意合理设置权限,确保系统的安全性。希望这些内容对你有所帮助,让你在自动化运维的道路上更加得心应手。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值