介绍
当每个自动化任务都位于清晰的项目目录中时,Ansible 的工作会更容易维护。RHCE 风格的 Ansible 工作也要求养成版本控制的习惯,因为 Playbook、清单(inventory)、变量和角色(role)都是会随时间变化的文本文件。
在本实验中,你将在 /home/labex/project/rhce-ansible 下创建一个小型 Ansible 项目,将其初始化为 Git 仓库,添加第一个清单文件,并提交基准版本。该项目规模虽小,但其布局与本预备课程中使用的结构保持一致。
创建项目工作区
在此步骤中,你将创建项目目录以及 Ansible 项目所使用的第一组文件夹。-p 选项告诉 mkdir 创建缺失的父目录,并在目录已存在时避免报错。
进入标准的 LabEx 工作区。
cd /home/labex/project
创建一个项目目录,其中包含用于存放清单、Playbook、变量、文件、模板和角色的常用子目录。
mkdir -p rhce-ansible/{inventory,playbooks,group_vars,host_vars,roles,files,templates}
这些目录名称是约定俗成的,而非强制要求。尽早使用它们有助于你了解后续实验将清单文件、变量、可重用角色代码以及 Playbook 所需复制或模板化的源文件放置在何处。
列出新项目的目录树。输出应显示你刚刚创建的目录。
find rhce-ansible -maxdepth 2 -type d | sort
find 会打印项目树中的目录,而 sort 使输出顺序保持稳定。此时这些目录是空的,但它们的存在构成了你稍后将要提交的基准结构。
初始化 Git 并设置本地身份
在此步骤中,你将把该项目转变为一个 Git 仓库。Git 将变更历史记录存储在隐藏的 .git 目录中。在本地设置身份可以使本实验保持独立,并避免更改全局用户设置。
进入项目目录。
cd /home/labex/project/rhce-ansible
初始化仓库。
git init
Git 会在项目内部创建一个隐藏的 .git 目录。该目录是仓库数据库;而可见的 Ansible 文件则保留在正常的项目树中。
为此仓库中的提交设置本地作者姓名和电子邮件。
git config user.name "LabEx RHCE Learner"
git config user.email "learner@example.com"
检查仓库状态。Git 应报告你当前处于一个分支上,且尚未追踪任何文件。
git status --short
简短的状态格式非常紧凑。Git 不会追踪空目录,因此如果此命令在添加实际文件之前几乎没有输出,这是正常的。
添加项目说明和忽略规则
在此步骤中,你将添加两个简单的项目文件。README.md 用于解释项目目的,.gitignore 则用于将临时文件排除在 Git 历史记录之外。
在执行此步骤中的命令之前,请返回项目目录,以便相对路径指向该 Ansible 项目。
cd /home/labex/project/rhce-ansible
使用 here-document 创建 README.md。EOF 标记之间的文本将按原样写入文件中。
cat > README.md <<'EOF'
## RHCE Ansible Practice Project
This repository contains guided Ansible practice files for RHCE-style automation.
EOF
创建一个小的 .gitignore 文件,用于忽略常见的 Ansible 临时产物。
cat > .gitignore <<'EOF'
*.retry
.artifacts/
__pycache__/
EOF
*.retry 模式涵盖了旧版 Ansible 工作流中的重试文件,.artifacts/ 是生成输出的常用位置,而 __pycache__/ 则用于防止 Python 字节码进入项目历史记录。
显示这两个文件,以便在追踪它们之前确认其内容。
sed -n '1,20p' README.md .gitignore
创建第一个清单
在此步骤中,你将创建一个小型静态清单。清单列出了 Ansible 可以管理的系统。对于第一个实验,名为 control 的主机使用 ansible_connection=local,这意味着 Ansible 将在此虚拟机上直接运行任务,而无需使用 SSH。
在执行此步骤中的命令之前,请返回项目目录,以便相对路径指向该 Ansible 项目。
cd /home/labex/project/rhce-ansible
创建 inventory/hosts。
cat > inventory/hosts <<'EOF'
[control]
control ansible_connection=local
EOF
方括号中的 [control] 行定义了一个组。下一行定义了一个名为 control 的主机别名,ansible_connection=local 则告诉 Ansible 在此项目中不要使用 SSH。
使用 ansible-inventory 解析该文件。此命令会在你在 Playbook 中使用它之前检查清单语法。
ansible-inventory -i inventory/hosts --graph
图形输出应包含 control 组和 control 主机。
提交基准项目
在此步骤中,你将把基准文件添加到 Git 并创建第一次提交。提交是一个命名的检查点,你可以在以后查看它。
在执行此步骤中的命令之前,请返回项目目录,以便相对路径指向该 Ansible 项目。
cd /home/labex/project/rhce-ansible
暂存文件。暂存操作告诉 Git 哪些更改应包含在下一次提交中。
git add README.md .gitignore inventory/hosts
创建基准提交。
git commit -m "Create Ansible project baseline"
提交输出应显示已添加到仓库的文件。如果 Git 显示没有可提交的内容,请重新运行 git status --short 并确保 README.md、.gitignore 和 inventory/hosts 已被暂存。
检查最终状态和最近一次提交。干净的状态意味着所有已追踪的更改都已提交。
git status --short
git log --oneline -1
git status --short 现在应该为空,而 git log --oneline -1 应该显示新的提交信息。这为你提供了一个已知良好的检查点,以便后续实验添加更多的 Ansible 内容。
总结
你创建了一个干净的 Ansible 项目工作区,初始化了 Git,添加了一个基础清单,并提交了第一个基准版本。这些项目习惯将使后续的 Playbook、变量、模板、角色和验证文件更易于管理。


