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!"
-
使用
--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
-
创建一个名为
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
-
创建
awx.yaml文件,内容如下:
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx
spec:
service_type: nodeport
-
编辑
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
- 应用新的配置文件:
$ kubectl apply -k .
- 运行以下命令检查安装是否成功:
$ 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 }}'
- 点击“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 时,要注意合理设置权限,确保系统的安全性。希望这些内容对你有所帮助,让你在自动化运维的道路上更加得心应手。
超级会员免费看
169

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



