展开菜单
首页 精品内容 本月促销 装机必备 Windows macOS软件 IOS软件 Android AI PDF教程 专题
全部分类

当前位置:

首页 > 系统应用 > 在 RHEL 上排查 Ansible Playbook 和主机问题

在 RHEL 上排查 Ansible Playbook 和主机问题

{"position":0,"title":"介绍","layout":"doc-fullscreen","text":"## 介绍nn在本实验中,你将学习如何排查在使用 Ansible 在 Red Hat Enterprise Linux 上工作时遇到的常见问题。你将获得实践经验,识别并解决各种问

{"position":0,"title":"介绍","layout":"doc-fullscreen","text":"## 介绍nn在本实验中,你将学习如何排查在使用 Ansible 在 Red Hat Enterprise Linux 上工作时遇到的常见问题。你将获得实践经验,识别并解决各种问题,从初始环境设置到常见的 playbook 错误和托管主机连接问题。实验内容涵盖修复 YAML 语法、纠正 Jinja2 模板错误以及诊断远程系统上的问题。nn你将首先准备一个 RHEL 环境并配置 Ansible 以实现有效的日志记录。然后,你将深入进行实际的故障排除场景,使用 Ansible 的检查模式(check mode)来诊断与服务相关的问题,并纠正防火墙配置以解决主机不可达的问题。通过本实验的结束,你将掌握一套全面的技能,用于维护健壮的 Ansible 自动化工作流。n","need_verify":false,"has_solution":false},{"position":1,"title":"准备 RHEL 环境并配置 Ansible 日志记录","layout":"doc-workbench-split","text":"## 准备 RHEL 环境并配置 Ansible 日志记录nn在此步骤中,你将为 Ansible 自动化准备你的 Red Hat Enterprise Linux 环境。这包括安装必要的软件、创建一个专用的项目目录以及设置一个基本配置文件来控制 Ansible 的行为并启用日志记录。正确的设置是有效自动化和故障排除的第一步。nn1. **安装 Ansible**nn 首先,你需要安装 Ansible。核心自动化引擎由 `ansible-core` 包提供。使用 `dnf` 包管理器和 `sudo` 进行安装。`-y` 标志会自动对任何确认提示回答“是”。nn ```bashn sudo dnf install -y ansible-coren ```nn 你应该会看到输出,表明该软件包及其依赖项正在安装。nn ```plaintextn Last metadata expiration check: ...n Dependencies resolved.n ================================================================================n Package Architecture Version Repository Sizen ================================================================================n Installing:n ansible-core x86_64 2.8 Mn ...n Transaction Summaryn ================================================================================n Install XX Packagesnn Total download size: XX Mn Installed size: XX Mn ...n Complete!n ```nn2. **创建项目目录**nn 将 Ansible 项目组织在专用目录中是一种最佳实践。这可以使你的 playbook、清单(inventory)和配置文件整洁地分开。让我们在你的主项目文件夹中创建一个名为 `ansible_troubleshooting` 的目录,并进入该目录。nn ```bashn mkdir -p ~/project/ansible_troubleshootingn cd ~/project/ansible_troubleshootingn ```nn 从现在开始,本实验中的所有命令都将在 `~/project/ansible_troubleshooting` 目录内执行。nn3. **创建 Ansible 清单文件**nn 清单(inventory)是一个列出 Ansible 将要管理的宿主机(或节点)的文件。由于你正在单台 LabEx VM 上工作,你将配置 Ansible 来管理本地机器本身。nn 创建一个名为 `inventory` 的文件,并在其中添加 `localhost`。`ansible_connection=local` 部分告诉 Ansible 直接在控制节点(你的 VM)上执行命令,而无需使用 SSH。nn ```bashn echo "localhost ansible_connection=local" > inventoryn ```nn 你可以使用 `cat` 命令验证文件内容:nn ```bashn cat inventoryn ```nn **预期输出:**nn ```plaintextn localhost ansible_connection=localn ```nn4. **配置 Ansible 日志**nn `ansible.cfg` 文件允许你为特定项目自定义 Ansible 的行为。当放置在项目目录中时,其设置将覆盖系统范围的默认设置。在这里,你将创建此文件来指定你的清单位置并启用日志记录。日志记录对于故障排除至关重要,因为它会记录每次 playbook 运行的详细信息。nn 使用 `nano` 编辑器创建 `ansible.cfg` 文件。nn ```bashn nano ansible.cfgn ```nn 现在,将以下内容复制并粘贴到 `nano` 编辑器中。此配置告诉 Ansible 使用当前目录中的 `inventory` 文件,并将所有日志输出写入名为 `ansible.log` 的文件。nn ```inin [defaults]n inventory = /home/labex/project/ansible_troubleshooting/inventoryn log_path = /home/labex/project/ansible_troubleshooting/ansible.logn ```nn 要在 `nano` 中保存文件,请按 `Ctrl+X`,然后按 `Y` 确认,最后按 `Enter` 写入文件。nn 你的环境现在已完全准备就绪。你已安装 Ansible,并配置了一个包含本地清单和已启用日志记录的项目目录,为接下来的步骤做好了准备。n","need_verify":true,"has_solution":false},{"position":2,"title":"修复 Playbook 中的 YAML 语法和缩进错误","layout":"doc-workbench-split","text":"## 修复 Playbook 中的 YAML 语法和缩进错误nn在此步骤中,你将学习如何诊断和修复 Ansible playbook 中最常见的两种错误类型:YAML 语法错误和不正确的缩进。YAML 是用于编写 playbook 的语言,对结构要求非常严格。一个错放的空格或未加引号的特殊字符都可能导致 playbook 无法运行。你将使用 `ansible-playbook --syntax-check` 命令,这是在执行前验证 playbook 的一个重要工具。nn1. **创建包含故意错误的 Playbook**nn 首先,你将在项目目录(`~/project/ansible_troubleshooting`)中创建一个名为 `webserver.yml` 的新 playbook 文件。此文件包含你将要修复的故意错误。nn 使用 `nano` 创建文件:nn ```bashn nano webserver.ymln ```nn 将以下内容复制并粘贴到编辑器中。请注意两个故意设置的错误:一个包含冒号的未加引号字符串和第二个任务不正确的缩进。nn ```yamln ---n - name: Configure Web Servern hosts: localhostn vars:n ## ERROR 1: Unquoted colon in stringn package_comment: This is a package: httpdn tasks:n - name: Install httpd packagen ansible.builtin.dnf:n name: httpdn state: presentnn ## ERROR 2: Incorrect indentationn - name: Create a test index pagen ansible.builtin.copy:n content: "

Welcome to Ansible

"n dest: /var/www/html/index.htmln ```nn 保存文件并按 `Ctrl+X`,然后按 `Y`,最后按 `Enter` 退出 `nano`。nn2. **识别并修复 YAML 语法错误(未加引号的冒号)**nn 现在,对你刚刚创建的 playbook 运行语法检查。此命令将解析文件并报告任何语法问题,而不会实际运行任务。nn ```bashn ansible-playbook --syntax-check webserver.ymln ```nn **预期输出(错误):** 你将看到一个错误,因为 `package_comment` 的值包含一个冒号(`:`),但未用引号括起来。YAML 将冒号解释为键值分隔符,从而导致语法错误。nn ```plaintextn ERROR! We were unable to read either as JSON nor YAML, these are the errors we found:n - Syntax Error while loading YAML.n did not find expected ':'nn The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 6, column 41, but may be elsewhere in the file depending on the exact syntax problem.nn The offending line appears to be:nn vars:n package_comment: This is a package: httpdn ^ heren ```nn **解决方案:** 要解决此问题,你必须将字符串用双引号括起来。再次使用 `nano` 打开文件:nn ```bashn nano webserver.ymln ```nn 修改 `vars` 下面的行以添加引号:nn ```yamln ## ... (rest of the file)n vars:n ## FIX: Add quotes around the string with a colonn package_comment: "This is a package: httpd"n ## ... (rest of the file)n ```nn 保存并退出编辑器。nn3. **识别并修复 YAML 缩进错误**nn 修复第一个错误后,再次运行语法检查。nn ```bashn ansible-playbook --syntax-check webserver.ymln ```nn **预期输出(错误):** 这次,Ansible 将报告与 playbook 结构相关的另一个错误。nn ```plaintextn ERROR! A malformed block was encountered.nn The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 13, column 11, but may be elsewhere in the file depending on the exact syntax problem.nn The offending line appears to be:nnn ## ERROR 2: Incorrect indentationn - name: Create a test index pagen ^ heren ```nn 此错误发生是因为 YAML 使用缩进来定义结构。列表中的所有项(在本例中是任务,它们是以 `-` 开头的列表项)必须具有相同的缩进级别。第二个任务 `Create a test index page` 的缩进过深。nn **解决方案:** 再打开一次文件以更正缩进。nn ```bashn nano webserver.ymln ```nn 删除第二个任务前面的额外空格,使其连字符(`-`)与第一个任务的连字符完美对齐。nn ```yamln ## ... (rest of the file)n tasks:n - name: Install httpd packagen ansible.builtin.dnf:n name: httpdn state: presentnn ## FIX: Correct the indentation to align with the previous taskn - name: Create a test index pagen ansible.builtin.copy:n content: "

Welcome to Ansible

"n dest: /var/www/html/index.htmln ```nn 保存并退出编辑器。nn4. **验证已更正的 Playbook**nn 最后,再运行一次语法检查。nn ```bashn ansible-playbook --syntax-check webserver.ymln ```nn 这次,命令应该会成功完成,没有任何错误,你将看到 playbook 的名称被打印出来,确认语法现在是正确的。nn **预期输出(成功):**nn ```plaintextn playbook: webserver.ymln ```n","need_verify":true,"has_solution":false},{"position":3,"title":"解决 Jinja2 引号和模板路径错误","layout":"doc-workbench-split","text":"## 解决 Jinja2 引号和模板路径错误nn在此步骤中,你将处理与 Jinja2(Ansible 强大的模板引擎)相关的错误。你将了解为什么 Jinja2 表达式通常需要加引号,以及如何调试 playbook 找不到指定模板文件的问题。这些是 playbook 通过语法检查后常见的运行时错误。nn1. **创建 Jinja2 模板文件**nn 首先,你需要一个模板文件。与静态文件不同,模板可以包含变量,Ansible 在 playbook 执行期间会用实际值替换这些变量。你将创建一个简单的 HTML 模板。nn 使用 `nano` 在项目目录(`~/project/ansible_troubleshooting`)中创建一个名为 `index.html.j2` 的文件。`.j2` 扩展名是 Jinja2 模板的常见约定。nn ```bashn nano index.html.j2n ```nn 将以下 HTML 内容复制并粘贴到编辑器中。请注意 `{{ welcome_message }}` 占位符,这是一个 Jinja2 变量。nn ```htmln

{{ welcome_message }}

n

This page has been deployed using Ansible.

n ```nn 保存文件并退出 `nano`(`Ctrl+X`,`Y`,`Enter`)。nn2. **修改 Playbook 以使用模板并引入错误**nn 现在,修改你的 `webserver.yml` playbook 以使用 `ansible.builtin.template` 模块。你还将引入两个新错误:一个未加引号的 Jinja2 变量和一个不正确的模板路径。nn 使用 `nano` 打开 `webserver.yml`:nn ```bashn nano webserver.ymln ```nn 将文件中的所有内容替换为以下内容。`become: true` 指令告诉 Ansible 使用管理员权限(使用 `sudo`)执行任务,这对于安装软件和将文件写入 `/var/www/html` 等系统目录是必需的。nn ```yamln ---n - name: Configure Web Servern hosts: localhostn become: truen vars:n package_name: httpdn welcome_message: "Welcome to Ansible with Jinja2"n tasks:n - name: Install httpd packagen ansible.builtin.dnf:n ## ERROR 1: Unquoted Jinja2 variablen name: { { package_name } }n state: presentnn - name: Create a test index page from templaten ansible.builtin.template:n ## ERROR 2: Incorrect template source pathn src: index.j2n dest: /var/www/html/index.htmln ```nn 保存并退出编辑器。nn3. **识别并修复 Jinja2 引号错误**nn 即使这是一个 Jinja2 问题,它也可能表现为 YAML 语法错误。运行语法检查器,看看 Ansible 如何解释它。nn ```bashn ansible-playbook --syntax-check webserver.ymln ```nn **预期输出(错误):** 你将收到一个语法错误,因为以 `{{` 开头的 YAML 值被视为特殊构造,必须用引号括起来才能被解释为字符串。nn ```plaintextn ERROR! A malformed block was encountered.nn The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 11, column 19, but may be elsewhere in the file depending on the exact syntax problem.nn The offending line appears to be:nn ## ERROR 1: Unquoted Jinja2 variablen name: {{ package_name }}n ^ heren ```nn **解决方案:** 打开 `webserver.yml` 并将 Jinja2 变量用双引号括起来。nn ```bashn nano webserver.ymln ```nn 修改 `Install httpd package` 任务:nn ```yamln ## ... (rest of the file)n tasks:n - name: Install httpd packagen ansible.builtin.dnf:n ## FIX: Quote the Jinja2 expressionn name: "{{ package_name }}"n state: presentn ## ... (rest of the file)n ```nn 保存并退出。语法检查现在应该通过了。nn4. **识别并修复模板路径错误**nn 现在语法正确了,尝试运行 playbook。nn ```bashn ansible-playbook webserver.ymln ```nn **预期输出(错误):** Playbook 将会失败,但这次是运行时错误,而不是语法错误。错误消息清楚地表明找不到源文件 `index.j2`。nn ```plaintextn TASK [Create a test index page from template] **********************************n fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not find or access '/home/labex/project/ansible_troubleshooting/index.j2' on the Ansible Controller."}n ```nn 这是因为你的 playbook 中的 `src` 参数指向 `index.j2`,但你创建的文件名为 `index.html.j2`。nn **解决方案:** 最后一次打开 `webserver.yml` 并更正文件名。nn ```bashn nano webserver.ymln ```nn 修改 `Create a test index page from template` 任务中的 `src` 参数:nn ```yamln ## ... (rest of the file)n - name: Create a test index page from templaten ansible.builtin.template:n ## FIX: Correct template source filenamen src: index.html.j2n dest: /var/www/html/index.htmln ## ... (rest of the file)n ```nn 保存并退出编辑器。nn5. **成功运行 Playbook**nn 再次运行 playbook。它现在应该成功完成所有任务。nn ```bashn ansible-playbook webserver.ymln ```nn **预期输出(成功):**nn ```plaintextn PLAY [Configure Web Server] ****************************************************nn TASK [Gathering Facts] *********************************************************n ok: [localhost]nn TASK [Install httpd package] ***************************************************n changed: [localhost]nn TASK [Create a test index page from template] **********************************n changed: [localhost]nn PLAY RECAP *********************************************************************n localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0n ```n","need_verify":true,"has_solution":false},{"position":4,"title":"使用检查模式排查托管主机服务错误","layout":"doc-workbench-split","text":"## 使用检查模式排查托管主机服务错误nn在此步骤中,你将学习使用 Ansible 最强大的故障排除功能之一:**Check Mode**。Check mode(通过 `--check` 标志激活)允许你运行 playbook 来查看 *将* 做出哪些更改,而无需实际修改系统上的任何内容。这对于安全地测试 playbook 和诊断问题(例如不正确的服务名称)在它们引起实际问题之前非常有用。nn1. **创建管理服务的 Playbook**nn 你现在将创建一个名为 `service.yml` 的新 playbook,旨在确保 `httpd` Web 服务器服务正在运行。但是,你将故意使用不正确的服务名称来模拟一个常见错误。nn 使用 `nano` 在你的 `~/project/ansible_troubleshooting` 目录中创建 `service.yml` 文件。nn ```bashn nano service.ymln ```nn 复制并粘贴以下内容。请注意,服务名称设置为 `apache2`,这是 Apache Web 服务器在其他 Linux 发行版上的常见名称,但对于 RHEL 是不正确的。nn ```yamln ---n - name: Manage Web Server Servicen hosts: localhostn become: truen tasks:n - name: Ensure web server service is startedn ansible.builtin.service:n ## ERROR: Incorrect service name for RHELn name: apache2n state: startedn enabled: truen ```nn 保存文件并退出 `nano`(`Ctrl+X`,`Y`,`Enter`)。nn2. **使用 Check Mode 识别服务错误**nn 不要正常运行 playbook,而是以 check mode 执行它。这将阻止 Ansible 进行任何更改,但允许它检查系统状态并报告它 *将* 做什么。nn ```bashn ansible-playbook --check service.ymln ```nn **预期输出(错误):** Playbook 将会失败。错误消息将清楚地表明找不到名为 `apache2` 的服务。这立即告诉你 playbook 中的 `name` 参数是错误的。nn ```plaintextn TASK [Ensure web server service is started] ************************************n fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not find the requested service 'apache2': host"}nn PLAY RECAP *********************************************************************n localhost : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0n ```nn3. **查找正确的服务名称**nn 要修复 playbook,你需要找到 RHEL 上 `httpd` 包的正确服务名称。一种可靠的方法是列出包安装的文件,并查找服务单元文件,该文件通常位于 `/usr/lib/systemd/system/`。nn 使用 `rpm` 命令查询 `httpd` 包:nn ```bashn rpm -ql httpd | grep systemdn ```nn **预期输出:** 此命令将列出与 `systemd` 相关的​​文件,包括服务文件。nn ```plaintextn /usr/lib/systemd/system/httpd.servicen /usr/lib/systemd/system/httpd@.servicen ...n ```nn 输出 `httpd.service` 表明正确的服务名称是 `httpd`。nn4. **更正 Playbook 并再次以 Check Mode 运行**nn 现在你知道了正确的服务名称,请编辑 `service.yml` 文件。nn ```bashn nano service.ymln ```nn 将服务 `name` 从 `apache2` 更改为 `httpd`。nn ```yamln ## ... (rest of the file)n - name: Ensure web server service is startedn ansible.builtin.service:n ## FIX: Correct service name for RHELn name: httpdn state: startedn enabled: truen ```nn 保存并退出编辑器。现在,再次以 check mode 运行 playbook。nn ```bashn ansible-playbook --check service.ymln ```nn **预期输出(Check Mode 下成功):** 这次,playbook 应该报告一个 `changed` 状态。在 check mode 下,`changed` 意味着“如果这是实际运行,将进行更改”。它表明你的 playbook 逻辑现在是正确的,并且 Ansible 已识别出需要启动 `httpd` 服务。nn ```plaintextn TASK [Ensure web server service is started] ************************************n changed: [localhost]nn PLAY RECAP *********************************************************************n localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0n ```nn **注意:** 在这个特定的基于容器的实验环境中,没有运行完整的 `systemd` init 系统。虽然 check mode 可以正常工作,但 `ansible.builtin.service` 模块的正常运行可能仍然会遇到问题。这里的关键教训是使用 check mode 来验证你的 playbook 逻辑是否与系统的配置相符。n","need_verify":true,"has_solution":false},{"position":5,"title":"修正防火墙配置和主机不可达问题","layout":"doc-workbench-split","text":"## 修正防火墙配置和主机不可达问题nn在最后这个步骤中,你将解决两个关键的运行时问题:由防火墙等不正确的系统配置引起的问题,以及由 Ansible inventory 文件中的错误导致的连接问题。掌握这些将帮助你解决自动化中最常见的障碍。nn#### 第一部分:修正防火墙配置nn服务器配置中的一个常见任务是在防火墙中打开端口。如果 playbook 引用了目标系统中不存在的防火墙服务,它可能会失败。nn1. **安装和准备 `firewalld`**nn 首先,确保安装了 `firewalld` 包,因为它在 RHEL 上提供了防火墙管理服务。nn ```bashn sudo dnf install -y firewalldn ```nn 启动 `firewalld` 服务。nn ```bashn sudo systemctl start firewalldn ```nn 你还需要安装 `ansible.posix` collection,其中包含此实验中使用的 `firewalld` 模块。nn ```bashn ansible-galaxy collection install ansible.posixn ```nn **注意:** 你可能会看到关于 Ansible 版本兼容性的警告,但该 collection 在此实验中仍能正常工作。nn2. **创建带有防火墙错误的 Playbook**nn 创建一个名为 `firewall.yml` 的新 playbook,它尝试启用 `http` 服务。但是,你将故意使用不正确的服务名称 `web` 来触发错误。nn ```bashn nano firewall.ymln ```nn 将以下内容复制并粘贴到编辑器中:nn ```yamln ---n - name: Configure System Firewalln hosts: localhostn become: truen tasks:n - name: Allow web traffic through firewalln ansible.posix.firewalld:n ## ERROR: 'web' is not a standard firewalld servicen service: webn permanent: truen state: enabledn ```nn 保存并退出 `nano`(`Ctrl+X`,`Y`,`Enter`)。nn3. **运行 Playbook 并诊断失败**nn 执行 playbook。它将失败,因为 `firewalld` 不识别名为 `web` 的服务。nn ```bashn ansible-playbook firewall.ymln ```nn **预期输出(错误):** 错误消息清楚地表明 `web` 不是受支持的服务,直接指出了问题所在。nn ```plaintextn TASK [Allow web traffic through firewall] **************************************n fatal: [localhost]: FAILED! => {"changed": false, "msg": "web is not a supported service. This is what I ha ve."}nn PLAY RECAP *********************************************************************n localhost : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0n ```nn4. **查找正确的防火墙服务名称**nn 要查找有效的、预定义的可用服务名称列表,你可以使用 `firewall-cmd` 命令行工具。nn ```bashn firewall-cmd --get-servicesn ```nn **预期输出:** 你将看到一个长长的可用服务列表。浏览列表以找到正确的 Web 流量服务,即 `http`。nn ```plaintextn RH-Satellite-6 ... ftp http https imaps ipp ipp-client ...n ```nn5. **更正 Playbook 并成功运行**nn 编辑 `firewall.yml` 并将不正确的服务名称 `web` 替换为正确的名称 `http`。nn ```bashn nano firewall.ymln ```nn 更正后的任务应如下所示:nn ```yamln ## ... (rest of the file)n - name: Allow web traffic through firewalln ansible.posix.firewalld:n ## FIX: Use the correct firewalld service namen service: httpn permanent: truen state: enabledn ```nn 保存并退出。现在,再次运行 playbook。它应该成功完成。nn ```bashn ansible-playbook firewall.ymln ```nn#### 第二部分:排查主机不可达问题nn“unreachable”错误意味着 Ansible 无法连接到 inventory 中列出的主机。这通常是由主机名中的简单拼写错误引起的。nn1. **模拟一个不可达的主机**nn 故意在你的 `inventory` 文件中引入一个拼写错误,并删除本地连接设置。这将强制 Ansible 尝试连接到拼写错误的​​主机名。nn ```bashn nano inventoryn ```nn 将 `localhost` 更改为 `localhossst` 并删除 `ansible_connection=local`。nn ```inin ## ERROR: Intentional typo in hostname, no local connectionn localhossstn ```nn 保存并退出编辑器。nn2. **修改 Playbook 以使用 Inventory 主机**nn 首先,你需要修改 `webserver.yml` playbook 以使用 inventory 主机而不是硬编码的 `localhost`。当 playbook 使用 `hosts: localhost` 时,Ansible 会将其视为特殊情况,并完全绕过 inventory 文件。nn ```bashn nano webserver.ymln ```nn 将 `hosts` 行从 `localhost` 更改为 `all`:nn ```yamln ---n - name: Configure Web Servern hosts: all ## Changed from 'localhost' to use inventory hostsn become: truen ## ... rest of the playbook remains the samen ```nn 保存并退出编辑器。nn3. **运行 Playbook 以触发错误**nn 现在尝试运行修改后的 playbook。它将失败,因为 inventory 包含拼写错误 `localhossst`。nn ```bashn ansible-playbook webserver.ymln ```nn **预期输出(错误):** Ansible 将会失败并报告主机为 `UNREACHABLE`。错误消息表明无法解析主机名。nn ```plaintextn PLAY [Configure Web Server] ****************************************************nn TASK [Gathering Facts] **********************************************************n fatal: [localhossst]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname localhossst: Name or service not known", "unreachable": true}nn PLAY RECAP *********************************************************************n localhossst : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0n ```nn4. **更正 Inventory 文件**nn `UNREACHABLE` 状态是检查主机名和网络连接的提示。在这种情况下,修复方法是更正 `inventory` 文件中的拼写错误。nn ```bashn nano inventoryn ```nn 将 `localhossst` 改回 `localhost`。nn ```inin ## FIX: Corrected hostnamen localhost ansible_connection=localn ```nn 保存并退出。重新运行 `ansible-playbook webserver.yml` 现在将成功。nn5. **可选:恢复原始 Playbook**nn 如果你想将 playbook 恢复为使用 `hosts: localhost` 以便将来的实验,你可以将其改回:nn ```bashn nano webserver.ymln ```nn 将 `hosts` 行改回 `localhost`:nn ```yamln ---n - name: Configure Web Servern hosts: localhost ## Restored to originaln become: truen ## ... rest of the playbookn ```nn 保存并退出。此步骤演示了使用硬编码的 `localhost`(它会绕过 inventory)与使用 inventory 定义的主机之间的区别。n","need_verify":true,"has_solution":false},{"position":6,"title":"总结","layout":"doc-fullscreen","text":"## 总结nn在此次实验中,你通过安装 `ansible-core` 和配置日志记录来准备 Red Hat Enterprise Linux 环境以供 Ansible 使用,然后着手排查各种常见问题。你学会了诊断和解决 playbook 中的错误,例如修复不正确的 YAML 语法、缩进、Jinja2 引号和无效的模板路径。这些技能是编写有效且可靠的自动化代码的基础。nn此外,你还解决了与被管理主机环境相关的问题。你利用 Ansible 的检查模式(check mode)安全地执行预演(dry run),并在目标节点上识别潜在的服务故障,而无需进行实际更改。本次实验最后解决了连接问题,你修正了防火墙配置以解决主机不可达的问题,从而提供了一种从控制节点到被管理主机的全面的调试方法。n","need_verify":false,"has_solution":false}
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
系统应用
相关文章 更多
精品专题 更多
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

Mac软件 更多
photoshop
photoshop

Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

Blender
Blender

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

灵活计算器
灵活计算器

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

图几
图几

图几是一款适用于 macOS 的截图、标注与美化工具,支持离线操作保障隐私。界面整理和高频系统操作被放到一起考虑,桌面或窗口内容一多时,管理起来会更省心。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Mac
WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

WINDOWS 更多
3dmax(3ds max)
3dmax(3ds max)

Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

photoshop
photoshop

Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

Blender
Blender

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

Windows 10
Windows 10

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

傲梅轻松备份
傲梅轻松备份

傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Mac
Wise Folder Hider Pro
Wise Folder Hider Pro

Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。