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

当前位置:

首页 > 系统应用 > 在 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电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

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

    IOS软件

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

    AI

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

    Mac软件 更多
    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    AirServer Windows版
    AirServer Windows版

    AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。