教材原文:RHCA 官方英文教材(教材第 317~352 页)(OCR 整书版已从本站移除,本页为章节精读) 关联知识:02-08-Ansible自动化(RH294DO447)、上一章 Ch8(Inventory/Credential 是 Job Template 三要素之二)、Ch6 的 Tower RBAC;本系列配套 00-RHCA教材精读-导航与学习法.md 章节结构:9.1 创建 Ansible Playbook 的 Project(SCM/项目角色/更新选项)→ 9.2 创建 Job Template 并启动作业(执行参数/角色/启动与看结果)→ Lab Managing Projects and Launching Ansible Jobs(provision-review)
- GOAL: Create projects and job templates in the web UI, using them to launch Ansible Playbooks that are stored in Git repositories in order to automate tasks on managed hosts.(在 Web UI 建 Project 与 Job Template,用它们启动存放在 Git 仓库里的 Playbook,自动化受管主机上的任务)
- OBJECTIVES:① 创建并管理一个 Ansible Tower Project,使其从已有 Git 仓库获取 playbook 与项目材料;② 创建并管理一个 Job Template(指定 Project+playbook、Inventory、Credentials),用它启动 Ansible 作业。
- Ansible Project=“至少一个 playbook + 相关的 playbook/roles 集合”;无论是否用 Tower,都建议把这些材料放进**版本控制系统(VCS)**统一管理。
- Tower 里每个 Project 是一个资源,从 SCM(Tower 对版本控制系统的叫法)拉取材料;支持 Git、Subversion、Mercurial。
- 备选方案“Project Base Path”(把项目拷到 Tower 服务器目录,由
/etc/tower/settings.py 配置,默认 /var/lib/awx/projects)不推荐:更新要人工干预、还要求项目管理员能直接登录 Tower 的 OS 环境,削弱 Tower 安全。
前置:登录“某组织有 Admin 角色”的用户。
- Projects → “+” → NAME(唯一)+ DESCRIPTION(可选)。
- ORGANIZATION 放大镜选所属组织 → SELECT。
- SCM TYPE 选 Git;SOURCE DETAILS 里填 SCM URL(仓库地址)。
- 可选:SCM BRANCH/TAG/COMMIT(取哪个分支/标签/提交)。
- 私有仓库:SCM CREDENTIAL 选一个 SCM Credential(见下)。
- 选 SCM 更新选项之一:Clean / Delete on Update / Update Revision on Launch(详见“更新选项”)。
- SAVE。保存后 Tower 自动从 SCM 拉取一次(状态图标:白=进行中、红×=失败、绿=成功)。
| 角色 | 能力 |
|---|
| Admin | 完全权限:删 Project、改属性(含权限);隐含 Use/Update/Read |
| Use | 能在 Template 资源里用该 Project;隐含 Read |
| Update | 能手动或定时触发 Project 从 SCM 更新;隐含 Read |
| Read | 查看 Project 详情/权限/通知 |
- 初始可达性:新建后只有“所属组织的 Admin / Auditor”能访问;其它访问需显式配置。创建时不能授角色,保存后编辑 Project → PERMISSIONS 里加(也可从用户/团队管理页反向加)。
- 作用:存放访问 VCS 的认证信息——用户名 + 密码或私钥(及私钥口令)。
- 创建要点:Credentials → “+” → NAME + ORGANIZATION(private 可跳过组织)→ TYPE=Source Control → USERNAME/PASSWORD 或 SCM PRIVATE KEY(+PRIVATE KEY PASSPHRASE)→ SAVE。private SCM credential 只有 owner + System Admin/Auditor 能用;挂组织的可授角色共享。
- SCM 凭据角色 Admin/Use/Read 语义与机器凭据一致,但 Use 的考点细节:Use 只控制“能否把该 SCM 凭据挂到 Project 上”,不控制能不能用它更新 Project;一旦凭据与 Project 关联,任何有该 Project Update 角色的人都能使用它(不必再被授 Use)。
- 初始可达性:挂组织的 SCM 凭据新建后仅“组织 Admin/Auditor”可访问;角色在创建后编辑凭据 → PERMISSIONS 配置。
| 选项 | 行为 | 备注 |
|---|
| Clean | 更新前先移除本地修改,再拉最新版本 | 常用、较快 |
| Delete on Update | 更新前整个删除本地仓库副本再重新拉取 | 大仓库更慢 |
| Update Revision on Launch(即 Update on Launch) | 每次用该 Project 启动作业前自动更新 | 更新本身作为独立 job 记录 |
- 手动更新:有 Project Update 角色者,在 Projects 列表 ACTIONS 列点双箭头图标立即触发。
- IMPORTANT(考点):Update 角色只决定“能否手动触发更新”,不影响 Project 配置的自动更新行为——例如配了 Update on Launch 的 Project,即使使用者没有 Update 角色,启动作业时仍会照常更新。
- Ansible Roles 依赖:Project 更新结束时,若仓库 roles 目录下有合法
requirements.yml,Tower 自动执行 ansible-galaxy install -r roles/requirements.yml -p ./roles/ --force(Galaxy 外部角色依赖自动拉取)。
lab provision-project start;admin/redhat 登录 Tower。- 建 SCM Credential
student-git(Default / Type=Source Control / USERNAME=git / SCM PRIVATE KEY=粘贴 workstation 上 /home/student/.ssh/lab_rsa 内容)。 - 建 Project
My Webservers DEV:Default 组织 / Git / SCM URL=ssh://git.lab.example.com/var/opt/gitlab/git-data/repositories/git/my_webservers_DEV.git / SCM CREDENTIAL=student-git;SAVE 后观察自动 SCM update 状态变绿。 - 授 Developers 团队 Admin 角色 on 该 Project(Project → 铅笔 → PERMISSIONS → TEAMS)。
- Job Template=模板:把 Project 里的一个 playbook + Inventory + Machine Credential(+其它参数)绑在一起,用同一方式反复启动作业。
- Job Template 不直接属于 Organization——它通过所使用的 Project 归属于组织。因此创建 Job Template 不需要组织 Admin,只需对所选 Project 有 Use 角色即可。
- 创建条件:必须对 Inventory、Project、Machine Credential 三者都分别有 Use 角色(三者缺一不可)。
- Templates → “+” → Job Template;填 NAME。
- JOB TYPE 选 Run。
- INVENTORY(放大镜选清单)→ PROJECT(选含 playbook 的项目)→ PLAYBOOK(下拉自动列出该 Project 内所有 playbook)→ CREDENTIAL(选机器凭据)。
- VERBOSITY 选详细级别;SAVE。
| Tower 字段 | 等价 ansible-playbook 选项 | 说明 |
|---|
| DESCRIPTION | - | 模板描述 |
| FORKS | -f/--forks | 并行进程数;0=用 ansible.cfg 默认 |
| LIMIT | -l/--limit | 主机 pattern,限制清单内哪些主机参与 |
| JOB TAGS | -t/--tags | 只执行带这些标签的 play 片段 |
| SKIP TAGS | --skip-tags | 跳过带这些标签的片段 |
| LABELS | - | 给模板打标签便于分组/过滤 |
| Enable Privilege Escalation | --become | 以提权方式执行 |
| Allow Provisioning Callbacks | - | 生成回调 URL,主机可自助请求配置更新 |
| Enable Concurrent Jobs | - | 允许同一模板并发多次执行 |
| Use Fact Cache | - | 使用/写入事实缓存(Ch10 展开) |
| EXTRA VARIABLES | -e/--extra-vars | YAML 或 JSON 的键值对,覆盖同名变量 |
- 允许在启动时提示用户输入的参数:JOB TYPE、INVENTORY、CREDENTIAL、LIMIT、VERBOSITY、JOB TAGS、SKIP TAGS、EXTRA VARIABLES。
- 意义:促进 playbook 复用——同一 playbook 跑不同环境时,不必为每种环境建一个模板;例如只给 INVENTORY 开 Prompt on launch,一个模板即可让用户在启动时选清单。
- 用户被提示时只能选自己有 Use 角色的资源(如清单)。
| 角色 | 能力 |
|---|
| Admin | 删除模板、改属性(含权限);隐含 Execute + Read |
| Execute | 用该模板执行作业 + 设置计划调度;隐含 Read |
| Read | 只读看模板属性、历史作业列表、权限与通知 |
- IMPORTANT(重点):执行作业只需模板上的 Execute 角色——不需要再对模板用到的 Project/Inventory/Credential 有 Use 角色。
- 初始可达性:新建后仅创建者本人 + “Project 所属组织的 Admin/Auditor”可访问;角色在创建后编辑模板 → PERMISSIONS 配置。
- 启动:Templates → 目标模板行点火箭图标;若某参数开了 Prompt on launch,会先弹提示填写 → LAUNCH。
- 作业详情页双栏:DETAILS(作业参数)+ 输出栏(playbook 实时输出);顶部汇总 plays/tasks 数、主机数、耗时;每 task 可用 +/- 展开收起、可全屏、可下载输出。
- 历史作业:Jobs 列表点链接进入同一详情页。
lab provision-job start;admin 建 Job Template DEV webservers setup:Run / Inventory=Dev / Project=My Webservers DEV / PLAYBOOK=apache-setup.yml / CREDENTIAL=Developers。- 授 Developers 团队 Admin → 登出,用
daniel(redhat123)启动作业 → 成功;浏览器访问 http://servera|serverb.lab.example.com 看到测试页(含 “Server list” 与两台主机)。 - workstation 上进
~/git-repos/my_webservers_DEV:git pull → cp -R ~/DO447/labs/provision-job/* .(含 site.yml、ansible-vsftpd.yml、ftpclient.yml、templates/vsftpd.conf.j2、vars/)→ git add --all → commit Adding playbooks → push。 - 用
daniel 登录 Tower,Projects 里点 My Webservers DEV 的双箭头手动 SCM 更新(状态转绿)。 - admin 再建 Job Template
DEV ftpservers setup:Project 相同但 PLAYBOOK 选新增的 site.yml、CREDENTIAL=Developers;授 Developers Admin。 daniel 启动该模板 → 成功后 nc servera 21 / nc serverb 21 返回 220 (vsFTPd 3.0.3) 验证 FTP 已部署。
lab provision-review start(创建 TEST 用的新 Git 仓库)。- 建 Project
My Webservers TEST:Default / Git / SCM URL=ssh://...my_webservers_TEST.git / CREDENTIAL=student-git。 - 授 Developers 团队 Use + Update 两个角色 on 该 Project。
- 建 Job Template
TEST webservers setup:Run / Inventory=Test / Project=My Webservers TEST / PLAYBOOK=apache-setup.yml / CREDENTIAL=Operations。 - 授 Developers 团队 Execute 角色 on 该 Job Template。
- clone
my_webservers_TEST 仓库,编辑 templates/index.html.j2 追加两行 Ansible facts(Current Memory: {{ ansible_facts.memtotal_mb }}、Current Free Memory: {{ ansible_facts.memfree_mb }})→ commit Added Ansible facts → push。 - 用
david(Developers 成员)登录:双箭头更新 Project → 火箭启动模板 → 验证 serverc/serverd 网页显示内存信息与主机列表。 - Evaluation:
lab provision-review grade 修正后重跑至成功。
- Project 包含一个或多个用来启动作业的 playbook;材料可来自 SCM(如 Git),必要时配 SCM Credential 认证仓库。
- Job Template 用来启动运行 Playbook 的作业:把一个 Project 的 playbook + 主机 Inventory + 认证用凭据(含解密 Vault 文件的 Vault 凭据)绑定成可重复使用的启动单元。
- RBAC 闭环:Project/Inventory/Credential 上授 Use → 建 Job Template;模板上授 Execute → 执行作业(无需底层资源角色)。
- Git 流水线闭环:改 playbook → push → 手动/定时 SCM 更新 Project → 用模板启动新版本作业。
| 场景 | 操作/命令 |
|---|
| 建 Project | Projects → “+” → Git/URL/Branch/SCM 更新选项 |
| 手动更新 Project | Projects 列表 ACTIONS 列双箭头(需 Update 角色) |
| 建 SCM Credential | Credentials → “+” → TYPE=Source Control |
| 建 Job Template | Templates → “+” → Job Template → Inventory/Project/Playbook/Credential |
| 启动作业 | Templates 行内火箭图标(Execute 角色) |
| 授 Project/模板角色 | 对象 → 铅笔 → PERMISSIONS |
| Git 推新 playbook | git pull、git add --all、git commit、git push(workstation 仓库) |
| 自动装角色依赖 | Project 更新时检测 roles/requirements.yml → ansible-galaxy install -r roles/requirements.yml -p ./roles/ --force |
| GE / Lab | lab provision-project / provision-job / provision-review start|grade|finish |
| 英文 | 中文速记 |
|---|
| Project | Tower 资源=一组 playbook+roles(来自 SCM) |
| SCM / Source Control Management | 版本控制(Git/SVN/Mercurial) |
| SCM URL / Branch/Tag/Commit | 仓库地址 / 取哪个分支标签提交 |
| SCM Credential | 访问 VCS 的凭据(用户名+密码或私钥) |
| Project Base Path | 本地目录放项目(不推荐;/var/lib/awx/projects) |
| Clean / Delete on Update | 更新前清本地修改 / 整个删了重拉 |
| Update Revision on Launch | 启动作业前自动更新(同 Update on Launch) |
| double-arrow icon | Projects 手动更新按钮(需 Update 角色) |
| ansible-galaxy / requirements.yml | 角色依赖安装(Project 更新时自动跑) |
| Job Template | 作业模板(playbook+Inventory+Credential 绑定) |
| Run / Check | JOB TYPE 运行 / 检查两种模式 |
| FORKS / LIMIT / JOB TAGS / SKIP TAGS | 并行数 / 主机限制 / 只跑标签 / 跳过标签 |
| Prompt on launch | 启动时提示(8 项:Job Type/Inventory/Credential/Limit/Verbosity/Tags/Skip Tags/Extra Vars) |
| EXTRA VARIABLES | 模板级额外变量(YAML/JSON,覆盖同名变量) |
| Job Template Admin / Execute / Read | 模板三角色(执行只需 Execute) |
| rocket icon | 启动作业按钮 |
| job detail page(DETAILS + output) | 作业详情双栏页 |
- 为什么推荐把 playbook 放 Git 而非拷进 Project Base Path?Tower 支持哪三种 SCM?
- 建 Project 的 12 步里,哪几个字段是“决定项目内容来源”的核心?三个 SCM 更新选项各是什么行为?
- Update 角色到底管什么、不管什么?谁能在“配了 Update on Launch”的项目上触发更新?
- Project 四角色(Admin/Use/Update/Read)的包含关系?SCM 凭据的 Use 角色在“挂到 Project 更新”这个动作里起不起作用?
- 为什么创建 Job Template 不需要组织 Admin?需要满足什么前提(三要素 Use)?
- 写出 Job Template 与 ansible-playbook 选项的 4 组等价映射(FORKS/LIMIT/JOB TAGS/提权)?EXTRA VARIABLES 等价哪个选项?
- Prompt on launch 支持哪 8 个参数?举例说明它如何“一个模板跑多个环境”?
- 执行作业需要模板上的哪个角色?需不需要对底层 Project/Inventory/Credential 有 Use?
- GE2 里“推新 playbook → 手动更新 → 新模板选新 playbook”串起了哪两个机制?用哪些 git 命令?
- SUMMARY 四条里,RBAC 闭环与 Git 流水线闭环分别指什么?用自己的话复述 Lab 的 Dev→Test 角色拆分(Use+Update vs Execute)意义。