
Fleet 中查看与批量管理 MDM 配置文件状态聚合状态、批量重发与主机下钻【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet本文基于 Fleet 官方文档 View and manage MDM configuration profile status讲解 Fleet 新增的 MDM 配置文件configuration profile部署状态管理能力如何查看每个配置文件的聚合状态Verified / Verifying / Pending / Failed、查看各状态下的主机数量、向所有安装失败的主机批量重发配置文件并下钻到 Manage hosts 页面精确定位问题主机。读完后你可以从源码层面理解 Fleet 四种投递状态的精确语义与状态机流转并掌握对应 API 的使用限制从而在大规模机群中快速发现并修复配置文件下发失败问题。功能背景为什么需要配置文件聚合状态在 MDM 场景中配置文件下发到主机只是第一步IT 管理员真正关心的是配置是否真的生效了。此前要搞清楚哪些主机没有成功应用某个配置文件只能逐台打开主机详情页翻找这在数百台规模的机群中几乎不可行。Fleet 现在为每个 MDM 配置文件提供了三个能力来自原文档的Whats new查看每个配置文件的聚合状态aggregate status例如 verified、verifying、pending、failed查看该配置文件下每个状态对应的主机数量向所有处于失败状态的主机批量重发bulk resend配置文件。这一能力让管理员可以一眼发现下发问题并对失败主机执行批量修复而无需逐台操作。四种状态的含义文档定义与源码级语义原文档给出的四种状态定义如下状态含义Verified配置文件已安装到主机并且已经过 Fleet 独立核验Verifying配置文件已安装到主机但尚未被 Fleet 核验Pending配置文件正在等待安装Failed配置文件安装失败这一定义在 Fleet 源码中有着更精确的表述。四个状态常量定义在 MDMDeliveryStatus源码注释进一步说明了每种状态的完整语义与状态迁移规则failedMDM 命令执行失败且不再自动重试目前是终态。补充细节是Apple 平台的 MDM 命令异步响应失败时Fleet 会先重试mdm.MaxAppleProfileRetries次Windows 对应mdm.MaxWindowsProfileRetries次仍然失败才会被永久标记为 failedverifiedMDM 命令成功应用且 Fleet 已独立核验安装结果是终态verifyingMDM 命令成功应用但 Fleet 尚未独立核验。这是一个中间状态可迁移到 failed、pending 或 NULLpending负责执行 MDM 命令的定时任务正在处理该主机MDM 命令可能已入队。这是一个临时状态可迁移到 failed、verifying 或 NULLNULL源码中还定义了一种未列在 UI 上的底层状态——表示该配置文件需要被应用到主机例如配置文件刚被分配到主机所在团队、或主机换队后需要重新下发。它同样是临时状态等待定时任务处理时迁移到 pending。从源码注释看在统计口径summary 接口和主机列表过滤中NULL 状态等价于 Pending这就是 UI 中 Pending 计数包含尚未开始下发主机数目的原因。在 Fleet 的汇总统计模型中每台主机只会落入上述四个状态中的一个互斥分类。MDMProfilesSummary 的结构体注释明确了这种最坏优先的归并规则只要某主机有任一配置文件处于 failed它就计入 Failed否则只要有未核验的配置文件就计入 Verifying只有当所有适用配置文件都经过 Fleet 核验主机才计入 Verified。单个配置文件的聚合状态由 MDMConfigProfileStatus 结构体表示即四个状态各自的主机计数// MDMConfigProfileStatus represents the number of hosts in each status for a // given configuration profile. type MDMConfigProfileStatus struct { Verified uint json:verified db:verified Verifying uint json:verifying db:verifying Pending uint json:pending db:pending Failed uint json:failed db:failed }在 UI 中查看配置文件的聚合状态按原文档的How to use步骤操作在 Fleet UI 中进入Controls OS Settings Configuration profiles配置文件列表页每个配置文件行现在都带有一个信息图标info icon点击后弹出该配置文件的聚合状态面板列出 Verified / Verifying / Pending / Failed 四种状态以及各自的主机数量如下所示面板中的主机数量以链接形式呈现这正是下钻入口见下一节。批量重发失败配置文件与主机下钻批量重发Resend原文档步骤 3 的操作路径是将鼠标悬停到状态面板中的Failed行点击Resend按钮Fleet 会向所有受影响主机重新发送安装命令。从源码看这一操作对应 API 端点POST /configuration_profiles/resend/batch其处理逻辑在 BatchResendMDMProfileToHosts。该方法的关键约束值得注意目前仅支持profile_statusfailed过滤条件传入其他状态会返回Invalid profile_status filter value, only failed is currently supported.的 400 错误该行为也有对应的集成测试覆盖见 integration_mdm_profiles_test.go根据profile_uuid的前缀区分平台Apple 配置文件fleet:前缀要求 Apple MDM 已启用并配置Windows 配置文件要求 Windows MDM 已启用并配置DDM 声明declaration不支持重发源码会明确拒绝并说明原因——与 .mobileconfig 配置文件不同DDM 声明由主机在每次 check-in 时自动拉取最新内容无需重新下发鉴权分为两级先校验用户具备主机选择性列表权限ActionSelectiveList再按配置文件所属团队做写入鉴权MDMConfigProfileAuthzActionWrite确保跨团队越权操作被拒绝重发成功后若实际下发主机数大于 0Fleet 会写入一条ActivityTypeResentConfigurationProfileBatch活动记录包含配置文件名、UUID 和影响的主机数可在 Activity 审计历史中追溯这次批量操作。对应的请求结构见 batchResendMDMProfileToHostsRequesttype batchResendMDMProfileToHostsRequest struct { ProfileUUID string json:profile_uuid Filters struct { ProfileStatus string json:profile_status } json:filters }端点成功时返回202 Accepted即批量重发是异步触发的——Fleet 会重新排队安装命令主机的状态将从 failed 回到 verifying/pending 流程中。下钻到指定状态的主机列表原文档步骤 4 提供了从状态面板直达主机列表的入口点击目标状态旁边的主机数量页面跳转到Manage hosts页面并自动按该配置文件和所选状态过滤。这一过滤由主机列表 API 的profile_uuidprofile_status查询参数实现参数校验逻辑在 transport.go两个参数必须成对出现——只传profile_uuid会返回Missing profile_status只传profile_status会返回Missing profile_uuid。这使得按配置文件状态筛选主机成为一个稳定可用的 API 能力除 UI 下钻外也可以直接通过 REST API 或fleetctl脚本化查询例如定位所有profile_statusfailed的主机做后续排查。典型使用场景原文档列出的Use cases完整继承如下快速排查并解决配置文件下发失败通过聚合状态面板一眼发现 Failed 计数直接批量重发无需逐台操作即可重新应用 MDM 配置文件Resend 一次性覆盖所有失败主机确认整个机群的部署成功Verified 计数持续攀升即可确认全部生效下钻查看特定状态的全部主机点击主机计数跳转到过滤后的主机列表进一步定位个例原因如主机离线、MDM 响应异常。适用前提与限制结合源码实现使用该功能需注意以下前提配置文件功能依赖 MDMApple 配置文件需 Apple MDM 已启用并配置Windows 配置文件需 Windows MDM 已启用并配置否则重发接口会直接报错批量重发目前只支持 failed 状态的过滤条件且不支持 DDM 声明声明由主机 check-in 时自动更新状态统计口径中 NULL 状态计入 Pending源码注释说明该口径用于 summary 与主机列表过滤因此 Pending 数值可能包含尚未开始下发的主机单个配置文件的状态互斥归并遵循最坏优先规则Failed Verifying Pending Verified一台主机有多个配置文件时会按最差状态归入对应计数。延伸阅读功能特性原文articles/configuration-profile-status.md状态常量与统计结构定义server/fleet/mdm.go状态聚合与单配置文件计数模型MDMProfilesSummary / MDMConfigProfileStatus批量重发与状态查询 API 实现server/service/mdm.go主机列表profile_uuid/profile_status过滤参数校验server/service/transport.go【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考