Documentation

30. Tower 故障排除

30.1. 错误日志

Tower 服务器的错误被记录在 /var/log/tower 中。监控器日志可在 /var/log/supervisor/ 找到。Nginx 网页服务器错误记录在 httpd 错误日志中。在 /etc/tower/conf.d/ 中配置其他 Tower 日志记录需要。

使用内置于大多数浏览器中的 JavaScript 控制台来查看客户端的问题,并通过红帽客户门户网站(https://access.redhat.com/.)向 Ansible 报告任何错误。

30.2. 主机连接问题

当运行快速启动指南中的 helloworld.yml 示例 playbook 或其他 playbook 时出现主机连接错误,请尝试以下操作:

  • 您能 ssh 到您的主机吗?Ansible 需要通过 SSH 连接到被管理的服务器。

  • 您的主机名和 IP 是否正确添加到您的清单文件中?(检查拼写错误。)

30.3. 无法通过 HTTP 登录到 Tower

对 Tower 的访问被有意限制为需要通过安全协议 (HTTPS) 进行。当您的配置被设置为在负载均衡器或“仅限 HTTP”代理后面运行 Tower 节点,且您希望在不使用 SSL 的情况下访问它时(例如,进行故障排除),您必须将以下设置添加到 tower 实例的 /etc/tower/conf.d 目录的 custom.py 文件中。

SESSION_COOKIE_SECURE = False
CSRF_COOKIE_SECURE = False

将这些设置修改为 False 将允许 Tower 在使用 HTTP 协议时管理 cookie 和登录会话。必须在集群安装的每个节点中执行此操作才能正确生效。

要应用这些更改,请运行:

ansible-tower-service restart

30.4. 实时事件的 WebSocket 端口不能正常工作

Ansible Tower 使用 Tower 服务器上的端口 80/443 将 playbook 活动和其他事件的实时更新流传输到客户端浏览器。这些端口默认配置为 80/443,但是如果防火墙阻止了这些端口,请关闭所有为之前的 websocket 端口打开或添加的防火墙规则,这将确保防火墙允许通过此端口传输流量。

30.5. 运行 playbook 的问题

当运行快速启动指南中的 helloworld.yml 示例 playbook 或其他 playbook 时出现 playbook 错误,请尝试以下操作:

  • 您是否与当前运行该命令的用户进行身份验证?如果没有,请检查用户名是如何设置的,并传递 --user=username-u username 命令来指定用户。

  • 您的 YAML 文件的缩进是否正确?您可能需要正确对齐空格。缩进级别在 YAML 中非常重要。您可以使用 yamlint 检查 playbook。如需更多信息,请参阅 YAML primer:http://docs.ansible.com/YAMLSyntax.html

  • - 开头的项目被视为列表项目或 play。采用 key: value 格式的项目用作哈希或字典。请确保您没有多余或缺失的 - play。

30.6. 运行作业时出现问题

如果您在 playbook 中运行作业时遇到问题,您应该查看 playbook YAML 文件。在手动或通过源控制机制导入 playbook 时,请记住主机定义是由 Tower 控制,应该设置为 hosts: all

30.7. 在“Job Template”下拉菜单中未显示 playbook

如果您的 playbook 没有显示在作业模板下拉列表中,您可以检查以下几个事项:

  • 确保 playbook 是有效 YML,可以被 Ansible 解析。

  • 确保设置了项目路径的权限和所有权 (/var/lib/awx/projects),以便“awx”系统用户可以查看这些文件。您可以运行这个命令来更改所有权:

chown awx -R /var/lib/awx/projects/

30.8. Playbook 处于待定状态

当运行 playbook 作业时一直显示作业处于“Pending”状态,请尝试以下操作:

  • 确定所有控制程序服务都通过 supervisorctl status 运行。

  • 检查确保 /var/ 分区有超过 1 GB 的可用空间。如果 /var/ 分区空间不足,作业将无法完成。

  • 在 Tower 服务器中运行 ansible-tower-service restart

如果问题仍然存在,请以 root 用户身份在 Tower 服务器上运行 sosreport ,然后提交 support request 及结果。

30.9. 取消 Tower 作业

在当前运行的 Tower 作业上发出 cancel 请求时,Tower 发出 SIGINTansible-playbook 进程。这会导致 Ansible 停止分配新的任务并退出,在很多情况下,已经分配给远程主机的模块任务将会完成运行。此行为与命令行 Ansible 运行期间按 Ctrl-C 类似。

对于软件依赖项,如果取消正在运行的作业,则该作业将基本删除,但依赖项仍会保留。

30.10. 重新使用外部数据库会导致安装失败

在后续安装节点时重新使用外部 DB 会导致安装失败。

例如,您执行了集群的安装。然后,您需要再次进行安装,并使用相同的外部数据库执行第二次集群的安装。则第二次安装会失败。

在设置之前安装中使用的外部数据库时,必须在后续的安装进行前,手动清除在前一次安装时集群节点使用的数据库。

30.10.1. bubblewrap 功能和变量

Ansible Tower 中的 bubblewrap 功能限制了 Tower 文件系统上哪些目录在 playbook 运行时可以被 playbook 查看和使用。在某些情况下,您可能会需要自定义 bubblewrap 设置。您可以使用一些变量来对 bubblewrap 的使用进行微调。

要禁用或启用运行任务的 bubblewrap 支持(仅限于运行 playbook),请确保您以 Admin 用户身份登录:

  1. 点击左侧导航栏中的 Settings (settings) 图标。

  2. 点击 Jobs 标签。

  3. 向下滚动,直到看到 "Enable Job Isolation",使用切换按钮设置为 OFF**以禁用 bubblewrap 支持,或选择 **ON 启用它。

_images/configure-tower-jobs-disable-proot-job-isolation.png

默认情况下,Tower 将使用系统的 tmp 目录(默认为``/tmp``)作为其临时区域。这可以在 Configure tower 界面的 Job Isolation Execution Path 字段中进行修改,也可以在设置文件中更新以下条目:

AWX_PROOT_BASE_PATH = "/opt/tmp"

如果系统中还有其他敏感且应该隐藏的信息,您可以在 Configure Tower 界面的 ** Hide to Isolated Jobs** 中指定,或者在设置文件中更新以下条目:

AWX_PROOT_HIDE_PATHS = ['/list/of/', '/paths']

如果系统中有需要特别公开的目录,您可以在 Configure Tower 界面的 Paths to Expose to Isolated Jobs 中指定,或者在设置文件中更新以下条目:

AWX_PROOT_SHOW_PATHS = ['/list/of/', '/paths']

注解

如果 playbook 需要使用在 /var/lib/awx/.ssh 中定义的密钥或设置,则需要把它做为主文件添加到 AWX_PROOT_SHOW_PATHS

如果您更改了设置文件,请确定在保存了更改后使用 ansible-tower-service restart 命令重启服务。

30.11. Tower 清单中的私有 EC2 VPC 实例

默认情况下,Tower 只显示 VPC 中具有与它们关联的弹性 IP (EIP) 的实例。要查看您的 VPC 实例,请执行以下步骤:

  1. 在 Tower 界面中,选择您的清单。

  2. 点击来源设置为 AWS 的组,并点击 Source 选项卡。

  3. Source Variables 在方框中输入:

vpc_destination_variable: private_ip_address

接下来,保存并触发组更新。完成后,您应该可以看到所有 VPC 实例。

注解

如果想要配置这些实例,必须在 VPC 中运行 Tower,并可访问这些实例。

30.12. “Error: provided hosts list is empty” 的故障排除

如果您在试图通过 Tower 运行 playbook 时收到“Skipping: No Hosts Matched”错误信息,请检查以下几个问题:

  • 确保 playbook 中的主机声明行与清单中您的组/主机的名称完全匹配(这些内容区分大小写)。

  • 如果匹配,且您正在使用 Ansible Core 2.0 或更高版本,请检查您的组名称中包括的空格,把它们改为下划线或不包括空格以确保这些组可以被识别。

  • 如果在作业模板中指定了 Limit,请确保它是一个有效的限制值,并且仍然匹配清单中的内容。Limit 字段采用模式参数,如下所述:http://docs.ansible.com/intro_patterns.html

如果您在检查这些选项后仍然遇到问题,请创建支持问题单。