AWX 12.0.0版本awx-manage删除实例后policy_instance_list未更新问题求助
policy_instance_list After awx-manage Deletion What's Going On
你遇到的这个问题是AWX 12.0.0版本里awx-manage命令的一个已知小bug——用register_queue添加实例一切正常,但remove_from_queue或者deprovision_instance删除时,只处理了GUI显示和实例本身的状态,却没同步更新实例组的policy_instance_list字段,这就导致AWX还以为这个实例在组里,偶尔会触发无效任务调度的报错。而GUI删除走的是完整的内部清理流程,所以能正常更新这个列表。
Fixes You Can Try
Use the API to Clean Up
policy_instance_listDirectly
其实有API能搞定这个,步骤很简单:- 先拿到你的实例组ID(你已经知道怎么访问
https://awx_url/api/v2/instance_groups/MY_INCTANCE_GROUP_ID/,所以这个ID你应该有了) - 找到要删除的实例的ID:发个GET请求到
https://awx_url/api/v2/instances/?hostname=$HOSTNAME,就能定位到对应实例的id字段 - 用PATCH请求更新实例组的
policy_instance_list,把目标实例ID从数组里去掉:# 替换成你的实例组ID、实例ID和API令牌 curl -X PATCH \ https://awx_url/api/v2/instance_groups/[你的实例组ID]/ \ -H "Authorization: Bearer [你的API令牌]" \ -H "Content-Type: application/json" \ -d '{"policy_instance_list": [1,2,3]}' # 这里放去掉目标ID后的剩余实例ID数组
- 先拿到你的实例组ID(你已经知道怎么访问
Delete the Instance via API (Instead of
awx-manage)
既然GUI删除没问题,那直接用API模拟GUI的操作就行,这样会自动同步更新实例组的列表:- 还是先拿到要删除的实例ID(同上)
- 发DELETE请求删除实例:
curl -X DELETE \ https://awx_url/api/v2/instances/[你的实例ID]/ \ -H "Authorization: Bearer [你的API令牌]"
这个操作和GUI删除完全一致,会触发所有必要的清理步骤,包括从
policy_instance_list中移除该实例。Quick Sync Fix (If You Already Used
awx-manageto Delete)
如果已经用命令行删了实例但列表没更新,试试这个命令强制同步实例组状态:awx-manage refresh_instances --queuename=MY_INCTANCE_GROUP它会重新拉取实例组的有效实例列表,应该能把无效的条目从
policy_instance_list里清掉。
A Heads-Up
AWX 12.0.0确实比较老了,这个bug在后续的13.x及以后版本里已经被修复了。如果环境允许的话,升级到稳定版能彻底解决这类问题。另外,确保你的API令牌有足够的权限——需要能修改实例和实例组的权限才行。
内容的提问来源于stack exchange,提问作者Abderrahmane

