fix(reboot): expose windows99 autostart check-mode package
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m15s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m15s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
This commit is contained in:
@@ -486,6 +486,9 @@ from src.services.telegram_alert_monitoring_live_receipt_apply import (
|
||||
from src.services.windows99_vmx_source_locator_readback import (
|
||||
load_latest_windows99_vmx_source_locator_readback,
|
||||
)
|
||||
from src.services.windows99_vmware_autostart_check_mode_package import (
|
||||
load_latest_windows99_vmware_autostart_check_mode_package,
|
||||
)
|
||||
from src.services.windows99_vmx_source_repair_package import (
|
||||
load_latest_windows99_vmx_source_repair_package,
|
||||
mark_windows99_vmx_source_repair_public_redaction_boundary,
|
||||
@@ -1576,6 +1579,41 @@ async def get_windows99_vmx_source_repair_package() -> dict[str, Any]:
|
||||
) from exc
|
||||
|
||||
|
||||
@router.get(
|
||||
"/windows99-vmware-autostart-check-mode-package",
|
||||
response_model=dict[str, Any],
|
||||
summary="取得 Windows99 VMware autostart check-mode package",
|
||||
description=(
|
||||
"讀取 P0-006 scorecard 的 Windows99 powered-off VM aliases,產生獨立 "
|
||||
"VMware autostart check-mode package。此端點只回傳 target selector、"
|
||||
"check-mode、post-verifier、learning writeback 與禁止 runtime action;"
|
||||
"不讀 secret、不 SSH、不啟停 VM、不寫 Windows、不改 registry/task、"
|
||||
"不重啟主機、不 restart service。"
|
||||
),
|
||||
)
|
||||
async def get_windows99_vmware_autostart_check_mode_package() -> dict[str, Any]:
|
||||
"""回傳 Windows99 VMware autostart check-mode package。"""
|
||||
try:
|
||||
payload = await asyncio.to_thread(
|
||||
load_latest_windows99_vmware_autostart_check_mode_package
|
||||
)
|
||||
return redact_public_lan_topology(payload)
|
||||
except FileNotFoundError as exc:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail=str(exc),
|
||||
) from exc
|
||||
except (json.JSONDecodeError, ValueError) as exc:
|
||||
logger.error(
|
||||
"windows99_vmware_autostart_check_mode_package_invalid",
|
||||
error=str(exc),
|
||||
)
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail="Windows99 VMware autostart check-mode package 無效",
|
||||
) from exc
|
||||
|
||||
|
||||
@router.get(
|
||||
"/windows99-vmx-source-locator-readback",
|
||||
response_model=dict[str, Any],
|
||||
|
||||
@@ -2987,6 +2987,9 @@ def _enrich_from_current_readbacks(
|
||||
from src.services.windows99_vmx_source_locator_readback import (
|
||||
build_windows99_vmx_source_locator_readback,
|
||||
)
|
||||
from src.services.windows99_vmware_autostart_check_mode_package import (
|
||||
build_windows99_vmware_autostart_check_mode_package,
|
||||
)
|
||||
from src.services.windows99_vmx_source_repair_package import (
|
||||
build_windows99_vmx_source_repair_package,
|
||||
)
|
||||
@@ -3032,6 +3035,9 @@ def _enrich_from_current_readbacks(
|
||||
windows99_vmx_source_repair_package = (
|
||||
build_windows99_vmx_source_repair_package(reboot_slo)
|
||||
)
|
||||
windows99_vmware_autostart_check_mode_package = (
|
||||
build_windows99_vmware_autostart_check_mode_package(reboot_slo)
|
||||
)
|
||||
windows99_vmx_source_locator_readback = (
|
||||
build_windows99_vmx_source_locator_readback(
|
||||
reboot_slo,
|
||||
@@ -3072,6 +3078,42 @@ def _enrich_from_current_readbacks(
|
||||
windows99_vmx_source_repair_learning_refs = _dict(
|
||||
windows99_vmx_source_repair_package.get("learning_writeback_refs")
|
||||
) or _dict(windows99_vmx_source_repair_action_chain.get("learning_writeback_refs"))
|
||||
windows99_vmware_autostart_action_chain = _dict(
|
||||
windows99_vmware_autostart_check_mode_package.get("action_chain")
|
||||
)
|
||||
windows99_vmware_autostart_target_selector = _dict(
|
||||
windows99_vmware_autostart_action_chain.get("target_selector")
|
||||
)
|
||||
windows99_vmware_autostart_check_mode = _dict(
|
||||
windows99_vmware_autostart_action_chain.get("check_mode")
|
||||
)
|
||||
windows99_vmware_autostart_candidate = _dict(
|
||||
windows99_vmware_autostart_action_chain.get("controlled_apply_candidate")
|
||||
)
|
||||
windows99_vmware_autostart_execution_boundary = _dict(
|
||||
windows99_vmware_autostart_action_chain.get("execution_boundary")
|
||||
)
|
||||
windows99_vmware_autostart_rollback = _dict(
|
||||
windows99_vmware_autostart_action_chain.get("rollback")
|
||||
)
|
||||
windows99_vmware_autostart_diff = (
|
||||
windows99_vmware_autostart_action_chain.get("source_of_truth_diff")
|
||||
if isinstance(
|
||||
windows99_vmware_autostart_action_chain.get("source_of_truth_diff"),
|
||||
list,
|
||||
)
|
||||
else []
|
||||
)
|
||||
windows99_vmware_autostart_post_apply_verifier = _strings(
|
||||
windows99_vmware_autostart_check_mode_package.get("post_apply_verifier")
|
||||
or windows99_vmware_autostart_check_mode_package.get("post_verifier")
|
||||
or windows99_vmware_autostart_action_chain.get("post_apply_verifier")
|
||||
)
|
||||
windows99_vmware_autostart_learning_refs = _dict(
|
||||
windows99_vmware_autostart_check_mode_package.get("learning_writeback_refs")
|
||||
) or _dict(
|
||||
windows99_vmware_autostart_action_chain.get("learning_writeback_refs")
|
||||
)
|
||||
p0_006_event_gated = bool(
|
||||
reboot_slo_rollups.get("blocked_by_fresh_reboot_window_only") is True
|
||||
)
|
||||
@@ -3426,6 +3468,177 @@ def _enrich_from_current_readbacks(
|
||||
)
|
||||
or ""
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_package_status"] = str(
|
||||
windows99_vmware_autostart_check_mode_package.get("status") or "unknown"
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_package_ready"] = bool(
|
||||
windows99_vmware_autostart_check_mode_package.get("package_ready") is True
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_powered_off_aliases"] = _strings(
|
||||
windows99_vmware_autostart_check_mode_package.get("powered_off_aliases")
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_powered_off_count"] = _int(
|
||||
windows99_vmware_autostart_check_mode_package.get("powered_off_count")
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_safe_next_step"] = str(
|
||||
windows99_vmware_autostart_check_mode_package.get("safe_next_step") or ""
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_controlled_apply_mode"] = str(
|
||||
windows99_vmware_autostart_check_mode_package.get("controlled_apply_mode")
|
||||
or ""
|
||||
)
|
||||
state[
|
||||
"windows99_vmware_autostart_check_mode_apply_allowed_by_this_package"
|
||||
] = bool(
|
||||
windows99_vmware_autostart_check_mode_package.get(
|
||||
"apply_allowed_by_this_package"
|
||||
)
|
||||
is True
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_work_order_id"] = str(
|
||||
windows99_vmware_autostart_check_mode_package.get("work_order_id")
|
||||
or windows99_vmware_autostart_action_chain.get("work_order_id")
|
||||
or ""
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_action_stage"] = str(
|
||||
windows99_vmware_autostart_check_mode_package.get("action_stage")
|
||||
or windows99_vmware_autostart_action_chain.get("stage")
|
||||
or ""
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_next_executable_step"] = str(
|
||||
windows99_vmware_autostart_check_mode_package.get("next_executable_step")
|
||||
or windows99_vmware_autostart_action_chain.get("next_executable_step")
|
||||
or ""
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_allowed"] = bool(
|
||||
windows99_vmware_autostart_check_mode_package.get(
|
||||
"check_mode_allowed_by_this_package"
|
||||
)
|
||||
is True
|
||||
or windows99_vmware_autostart_check_mode.get("allowed_by_this_package")
|
||||
is True
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_rollback_required"] = bool(
|
||||
windows99_vmware_autostart_check_mode_package.get("rollback_required") is True
|
||||
or windows99_vmware_autostart_rollback.get("required") is True
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_vm_power_change_allowed"] = bool(
|
||||
windows99_vmware_autostart_check_mode_package.get("vm_power_change_allowed")
|
||||
is True
|
||||
or windows99_vmware_autostart_target_selector.get("vm_power_change_allowed")
|
||||
is True
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_registry_apply_allowed"] = bool(
|
||||
windows99_vmware_autostart_check_mode_package.get(
|
||||
"windows_registry_apply_allowed"
|
||||
)
|
||||
is True
|
||||
or windows99_vmware_autostart_target_selector.get(
|
||||
"windows_registry_apply_allowed"
|
||||
)
|
||||
is True
|
||||
)
|
||||
state[
|
||||
"windows99_vmware_autostart_check_mode_scheduled_task_modify_allowed"
|
||||
] = bool(
|
||||
windows99_vmware_autostart_check_mode_package.get(
|
||||
"scheduled_task_modify_allowed"
|
||||
)
|
||||
is True
|
||||
or windows99_vmware_autostart_target_selector.get(
|
||||
"scheduled_task_modify_allowed"
|
||||
)
|
||||
is True
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_source_diff_alias_count"] = len(
|
||||
windows99_vmware_autostart_diff
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_target_vm_aliases"] = _strings(
|
||||
windows99_vmware_autostart_check_mode_package.get("target_vm_aliases")
|
||||
or windows99_vmware_autostart_target_selector.get("vm_aliases")
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_probe_command_count"] = _int(
|
||||
windows99_vmware_autostart_check_mode_package.get(
|
||||
"check_mode_probe_command_count"
|
||||
)
|
||||
or windows99_vmware_autostart_check_mode.get("probe_command_count")
|
||||
)
|
||||
state[
|
||||
"windows99_vmware_autostart_check_mode_controlled_apply_candidate_status"
|
||||
] = str(
|
||||
windows99_vmware_autostart_check_mode_package.get(
|
||||
"controlled_apply_candidate_status"
|
||||
)
|
||||
or windows99_vmware_autostart_candidate.get("status")
|
||||
or ""
|
||||
)
|
||||
state[
|
||||
"windows99_vmware_autostart_check_mode_controlled_apply_candidate_executor"
|
||||
] = str(
|
||||
windows99_vmware_autostart_check_mode_package.get(
|
||||
"controlled_apply_candidate_executor"
|
||||
)
|
||||
or windows99_vmware_autostart_candidate.get("executor")
|
||||
or windows99_vmware_autostart_execution_boundary.get("executor")
|
||||
or ""
|
||||
)
|
||||
state[
|
||||
"windows99_vmware_autostart_check_mode_controlled_apply_candidate_command_id"
|
||||
] = str(
|
||||
windows99_vmware_autostart_check_mode_package.get(
|
||||
"controlled_apply_candidate_command_id"
|
||||
)
|
||||
or windows99_vmware_autostart_candidate.get("command_id")
|
||||
or windows99_vmware_autostart_execution_boundary.get("command_id")
|
||||
or ""
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_post_apply_verifier_count"] = len(
|
||||
windows99_vmware_autostart_post_apply_verifier
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_learning_writeback_ref_count"] = _int(
|
||||
windows99_vmware_autostart_check_mode_package.get(
|
||||
"learning_writeback_ref_count"
|
||||
)
|
||||
or windows99_vmware_autostart_action_chain.get(
|
||||
"learning_writeback_ref_count"
|
||||
)
|
||||
or len(
|
||||
[
|
||||
value
|
||||
for value in windows99_vmware_autostart_learning_refs.values()
|
||||
if str(value or "").strip()
|
||||
]
|
||||
)
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_log_receipt_ref"] = str(
|
||||
windows99_vmware_autostart_check_mode_package.get("log_receipt_ref")
|
||||
or windows99_vmware_autostart_learning_refs.get("log_receipt_ref")
|
||||
or ""
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_km_writeback_ref"] = str(
|
||||
windows99_vmware_autostart_check_mode_package.get("km_writeback_ref")
|
||||
or windows99_vmware_autostart_learning_refs.get("km_writeback_ref")
|
||||
or ""
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_rag_chunk_ref"] = str(
|
||||
windows99_vmware_autostart_check_mode_package.get("rag_chunk_ref")
|
||||
or windows99_vmware_autostart_learning_refs.get("rag_chunk_ref")
|
||||
or ""
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_mcp_evidence_ref"] = str(
|
||||
windows99_vmware_autostart_check_mode_package.get("mcp_evidence_ref")
|
||||
or windows99_vmware_autostart_learning_refs.get("mcp_evidence_ref")
|
||||
or ""
|
||||
)
|
||||
state["windows99_vmware_autostart_check_mode_playbook_trust_writeback_ref"] = str(
|
||||
windows99_vmware_autostart_check_mode_package.get(
|
||||
"playbook_trust_writeback_ref"
|
||||
)
|
||||
or windows99_vmware_autostart_learning_refs.get(
|
||||
"playbook_trust_writeback_ref"
|
||||
)
|
||||
or ""
|
||||
)
|
||||
state["windows99_vmx_source_locator_status"] = str(
|
||||
windows99_vmx_source_locator_readback.get("status") or "unknown"
|
||||
)
|
||||
@@ -3917,6 +4130,104 @@ def _enrich_from_current_readbacks(
|
||||
evidence["windows99_vmx_source_repair_playbook_trust_writeback_ref"] = (
|
||||
state["windows99_vmx_source_repair_playbook_trust_writeback_ref"]
|
||||
)
|
||||
evidence["windows99_vmware_autostart_check_mode_package_status"] = state[
|
||||
"windows99_vmware_autostart_check_mode_package_status"
|
||||
]
|
||||
evidence["windows99_vmware_autostart_check_mode_package_ready"] = state[
|
||||
"windows99_vmware_autostart_check_mode_package_ready"
|
||||
]
|
||||
evidence["windows99_vmware_autostart_check_mode_powered_off_aliases"] = (
|
||||
state["windows99_vmware_autostart_check_mode_powered_off_aliases"]
|
||||
)
|
||||
evidence["windows99_vmware_autostart_check_mode_powered_off_count"] = state[
|
||||
"windows99_vmware_autostart_check_mode_powered_off_count"
|
||||
]
|
||||
evidence["windows99_vmware_autostart_check_mode_safe_next_step"] = state[
|
||||
"windows99_vmware_autostart_check_mode_safe_next_step"
|
||||
]
|
||||
evidence["windows99_vmware_autostart_check_mode_controlled_apply_mode"] = (
|
||||
state["windows99_vmware_autostart_check_mode_controlled_apply_mode"]
|
||||
)
|
||||
evidence[
|
||||
"windows99_vmware_autostart_check_mode_apply_allowed_by_this_package"
|
||||
] = state[
|
||||
"windows99_vmware_autostart_check_mode_apply_allowed_by_this_package"
|
||||
]
|
||||
evidence["windows99_vmware_autostart_check_mode_work_order_id"] = state[
|
||||
"windows99_vmware_autostart_check_mode_work_order_id"
|
||||
]
|
||||
evidence["windows99_vmware_autostart_check_mode_action_stage"] = state[
|
||||
"windows99_vmware_autostart_check_mode_action_stage"
|
||||
]
|
||||
evidence[
|
||||
"windows99_vmware_autostart_check_mode_next_executable_step"
|
||||
] = state["windows99_vmware_autostart_check_mode_next_executable_step"]
|
||||
evidence["windows99_vmware_autostart_check_mode_allowed"] = state[
|
||||
"windows99_vmware_autostart_check_mode_allowed"
|
||||
]
|
||||
evidence["windows99_vmware_autostart_check_mode_rollback_required"] = state[
|
||||
"windows99_vmware_autostart_check_mode_rollback_required"
|
||||
]
|
||||
evidence[
|
||||
"windows99_vmware_autostart_check_mode_vm_power_change_allowed"
|
||||
] = state["windows99_vmware_autostart_check_mode_vm_power_change_allowed"]
|
||||
evidence[
|
||||
"windows99_vmware_autostart_check_mode_registry_apply_allowed"
|
||||
] = state["windows99_vmware_autostart_check_mode_registry_apply_allowed"]
|
||||
evidence[
|
||||
"windows99_vmware_autostart_check_mode_scheduled_task_modify_allowed"
|
||||
] = state[
|
||||
"windows99_vmware_autostart_check_mode_scheduled_task_modify_allowed"
|
||||
]
|
||||
evidence[
|
||||
"windows99_vmware_autostart_check_mode_source_diff_alias_count"
|
||||
] = state["windows99_vmware_autostart_check_mode_source_diff_alias_count"]
|
||||
evidence["windows99_vmware_autostart_check_mode_target_vm_aliases"] = state[
|
||||
"windows99_vmware_autostart_check_mode_target_vm_aliases"
|
||||
]
|
||||
evidence[
|
||||
"windows99_vmware_autostart_check_mode_probe_command_count"
|
||||
] = state["windows99_vmware_autostart_check_mode_probe_command_count"]
|
||||
evidence[
|
||||
"windows99_vmware_autostart_check_mode_controlled_apply_candidate_status"
|
||||
] = state[
|
||||
"windows99_vmware_autostart_check_mode_controlled_apply_candidate_status"
|
||||
]
|
||||
evidence[
|
||||
"windows99_vmware_autostart_check_mode_controlled_apply_candidate_executor"
|
||||
] = state[
|
||||
"windows99_vmware_autostart_check_mode_controlled_apply_candidate_executor"
|
||||
]
|
||||
evidence[
|
||||
"windows99_vmware_autostart_check_mode_controlled_apply_candidate_command_id"
|
||||
] = state[
|
||||
"windows99_vmware_autostart_check_mode_controlled_apply_candidate_command_id"
|
||||
]
|
||||
evidence[
|
||||
"windows99_vmware_autostart_check_mode_post_apply_verifier_count"
|
||||
] = state["windows99_vmware_autostart_check_mode_post_apply_verifier_count"]
|
||||
evidence[
|
||||
"windows99_vmware_autostart_check_mode_learning_writeback_ref_count"
|
||||
] = state[
|
||||
"windows99_vmware_autostart_check_mode_learning_writeback_ref_count"
|
||||
]
|
||||
evidence["windows99_vmware_autostart_check_mode_log_receipt_ref"] = state[
|
||||
"windows99_vmware_autostart_check_mode_log_receipt_ref"
|
||||
]
|
||||
evidence["windows99_vmware_autostart_check_mode_km_writeback_ref"] = state[
|
||||
"windows99_vmware_autostart_check_mode_km_writeback_ref"
|
||||
]
|
||||
evidence["windows99_vmware_autostart_check_mode_rag_chunk_ref"] = state[
|
||||
"windows99_vmware_autostart_check_mode_rag_chunk_ref"
|
||||
]
|
||||
evidence["windows99_vmware_autostart_check_mode_mcp_evidence_ref"] = state[
|
||||
"windows99_vmware_autostart_check_mode_mcp_evidence_ref"
|
||||
]
|
||||
evidence[
|
||||
"windows99_vmware_autostart_check_mode_playbook_trust_writeback_ref"
|
||||
] = state[
|
||||
"windows99_vmware_autostart_check_mode_playbook_trust_writeback_ref"
|
||||
]
|
||||
evidence["windows99_vmx_source_locator_status"] = state[
|
||||
"windows99_vmx_source_locator_status"
|
||||
]
|
||||
@@ -4701,6 +5012,25 @@ def _set_rollups_and_summary(
|
||||
"windows99_vmx_source_repair_check_mode_allowed": (
|
||||
state.get("windows99_vmx_source_repair_check_mode_allowed") is True
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_package_ready": (
|
||||
state.get("windows99_vmware_autostart_check_mode_package_ready") is True
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_powered_off_count": _int(
|
||||
state.get("windows99_vmware_autostart_check_mode_powered_off_count")
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_apply_allowed_by_this_package": (
|
||||
state.get(
|
||||
"windows99_vmware_autostart_check_mode_apply_allowed_by_this_package"
|
||||
)
|
||||
is True
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_work_order_id": str(
|
||||
state.get("windows99_vmware_autostart_check_mode_work_order_id") or ""
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_next_executable_step": str(
|
||||
state.get("windows99_vmware_autostart_check_mode_next_executable_step")
|
||||
or ""
|
||||
),
|
||||
"windows99_vmx_source_repair_rollback_required": (
|
||||
state.get("windows99_vmx_source_repair_rollback_required") is True
|
||||
),
|
||||
@@ -5085,6 +5415,29 @@ def _set_rollups_and_summary(
|
||||
"windows99_vmx_source_repair_check_mode_allowed": (
|
||||
state.get("windows99_vmx_source_repair_check_mode_allowed") is True
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_package_status": str(
|
||||
state.get("windows99_vmware_autostart_check_mode_package_status")
|
||||
or "unknown"
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_package_ready": (
|
||||
state.get("windows99_vmware_autostart_check_mode_package_ready") is True
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_powered_off_aliases": _strings(
|
||||
state.get("windows99_vmware_autostart_check_mode_powered_off_aliases")
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_powered_off_count": _int(
|
||||
state.get("windows99_vmware_autostart_check_mode_powered_off_count")
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_safe_next_step": str(
|
||||
state.get("windows99_vmware_autostart_check_mode_safe_next_step") or ""
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_work_order_id": str(
|
||||
state.get("windows99_vmware_autostart_check_mode_work_order_id") or ""
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_next_executable_step": str(
|
||||
state.get("windows99_vmware_autostart_check_mode_next_executable_step")
|
||||
or ""
|
||||
),
|
||||
"windows99_vmx_source_repair_rollback_required": (
|
||||
state.get("windows99_vmx_source_repair_rollback_required") is True
|
||||
),
|
||||
|
||||
@@ -146,6 +146,16 @@ _WINDOWS99_VMX_REPAIR_FORBIDDEN_ACTIONS = [
|
||||
"scheduled_task_register_or_modify",
|
||||
"docker_nginx_k3s_db_firewall_restart",
|
||||
]
|
||||
_WINDOWS99_VMWARE_AUTOSTART_CHECK_FORBIDDEN_ACTIONS = [
|
||||
"read_windows_password_or_secret",
|
||||
"vm_power_change",
|
||||
"vmrun_start_or_stop",
|
||||
"host_reboot",
|
||||
"windows_service_restart",
|
||||
"windows_registry_apply",
|
||||
"scheduled_task_register_or_modify",
|
||||
"docker_nginx_k3s_db_firewall_restart",
|
||||
]
|
||||
|
||||
|
||||
def load_latest_reboot_auto_recovery_slo_scorecard(
|
||||
@@ -838,6 +848,12 @@ def _apply_prometheus_windows99_vmware_readback(
|
||||
payload.get("runtime_readback_generated_at") or _taipei_now_iso()
|
||||
),
|
||||
)
|
||||
_sync_windows99_vmware_autostart_check_mode_package(
|
||||
payload,
|
||||
generated_at=str(
|
||||
payload.get("runtime_readback_generated_at") or _taipei_now_iso()
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def _reconcile_prometheus_metric_active_blockers_with_source_controls(
|
||||
@@ -1718,6 +1734,12 @@ def _build_payload(scorecard: dict[str, Any], path: Path) -> dict[str, Any]:
|
||||
generated_at=runtime_readback_generated_at,
|
||||
)
|
||||
)
|
||||
windows99_vmware_autostart_check_mode_package = (
|
||||
_build_windows99_vmware_autostart_check_mode_package(
|
||||
windows99,
|
||||
generated_at=runtime_readback_generated_at,
|
||||
)
|
||||
)
|
||||
blocked_by_fresh_reboot_window_only = active_blockers == [
|
||||
"host_boot_observation_older_than_target_window"
|
||||
]
|
||||
@@ -1860,6 +1882,40 @@ def _build_payload(scorecard: dict[str, Any], path: Path) -> dict[str, Any]:
|
||||
"windows99_vmx_source_repair_missing_vmx_aliases": _strings(
|
||||
windows99_vmx_source_repair_package.get("missing_vmx_aliases")
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_package_ready": (
|
||||
windows99_vmware_autostart_check_mode_package["package_ready"] is True
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_package_status": str(
|
||||
windows99_vmware_autostart_check_mode_package["status"]
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_package_safe_next_step": str(
|
||||
windows99_vmware_autostart_check_mode_package["safe_next_step"]
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_package_apply_allowed": (
|
||||
windows99_vmware_autostart_check_mode_package[
|
||||
"apply_allowed_by_this_package"
|
||||
]
|
||||
is True
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_powered_off_aliases": _strings(
|
||||
windows99_vmware_autostart_check_mode_package.get("powered_off_aliases")
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_post_apply_verifier_count": _int(
|
||||
windows99_vmware_autostart_check_mode_package.get(
|
||||
"post_apply_verifier_count"
|
||||
)
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_learning_writeback_ref_count": _int(
|
||||
windows99_vmware_autostart_check_mode_package.get(
|
||||
"learning_writeback_ref_count"
|
||||
)
|
||||
),
|
||||
"windows99_vmware_autostart_check_mode_controlled_apply_candidate_executor": str(
|
||||
windows99_vmware_autostart_check_mode_package.get(
|
||||
"controlled_apply_candidate_executor"
|
||||
)
|
||||
or ""
|
||||
),
|
||||
"windows99_verify_collection_status": windows99_verify_collection["status"],
|
||||
"windows99_verify_collection_can_collect_no_secret": (
|
||||
windows99_verify_collection["can_collect_no_secret_verify"] is True
|
||||
@@ -2066,6 +2122,30 @@ def _build_payload(scorecard: dict[str, Any], path: Path) -> dict[str, Any]:
|
||||
"windows99_vmx_source_repair_missing_vmx_aliases": rollups[
|
||||
"windows99_vmx_source_repair_missing_vmx_aliases"
|
||||
],
|
||||
"windows99_vmware_autostart_check_mode_package_ready": rollups[
|
||||
"windows99_vmware_autostart_check_mode_package_ready"
|
||||
],
|
||||
"windows99_vmware_autostart_check_mode_package_status": rollups[
|
||||
"windows99_vmware_autostart_check_mode_package_status"
|
||||
],
|
||||
"windows99_vmware_autostart_check_mode_package_safe_next_step": rollups[
|
||||
"windows99_vmware_autostart_check_mode_package_safe_next_step"
|
||||
],
|
||||
"windows99_vmware_autostart_check_mode_package_apply_allowed": rollups[
|
||||
"windows99_vmware_autostart_check_mode_package_apply_allowed"
|
||||
],
|
||||
"windows99_vmware_autostart_check_mode_powered_off_aliases": rollups[
|
||||
"windows99_vmware_autostart_check_mode_powered_off_aliases"
|
||||
],
|
||||
"windows99_vmware_autostart_check_mode_post_apply_verifier_count": rollups[
|
||||
"windows99_vmware_autostart_check_mode_post_apply_verifier_count"
|
||||
],
|
||||
"windows99_vmware_autostart_check_mode_learning_writeback_ref_count": rollups[
|
||||
"windows99_vmware_autostart_check_mode_learning_writeback_ref_count"
|
||||
],
|
||||
"windows99_vmware_autostart_check_mode_controlled_apply_candidate_executor": rollups[
|
||||
"windows99_vmware_autostart_check_mode_controlled_apply_candidate_executor"
|
||||
],
|
||||
"windows99_verify_collection_status": rollups[
|
||||
"windows99_verify_collection_status"
|
||||
],
|
||||
@@ -2122,6 +2202,9 @@ def _build_payload(scorecard: dict[str, Any], path: Path) -> dict[str, Any]:
|
||||
"windows99_vmware_autostart": windows99,
|
||||
"windows99_vmware_verify_collector": windows99_collector,
|
||||
"windows99_vmx_source_repair_package": windows99_vmx_source_repair_package,
|
||||
"windows99_vmware_autostart_check_mode_package": (
|
||||
windows99_vmware_autostart_check_mode_package
|
||||
),
|
||||
"windows99_verify_collection": windows99_verify_collection,
|
||||
"windows99_management_channel": windows99_management,
|
||||
"source_controls": source_controls,
|
||||
@@ -2469,6 +2552,253 @@ def _powershell_test_path(path: str) -> str:
|
||||
return f"Test-Path -LiteralPath '{escaped}'"
|
||||
|
||||
|
||||
def _build_windows99_vmware_autostart_action_chain(
|
||||
*,
|
||||
powered_off_aliases: list[str],
|
||||
) -> dict[str, Any]:
|
||||
primary_alias = powered_off_aliases[0] if powered_off_aliases else ""
|
||||
if powered_off_aliases:
|
||||
stage = "power_readback_check_mode_ready"
|
||||
next_executable_step = "build_vmware_autostart_power_readback_check_mode"
|
||||
candidate_status = "candidate_waiting_autostart_policy_check_mode"
|
||||
else:
|
||||
stage = "verify_only_ready"
|
||||
next_executable_step = "rerun_no_secret_collector_and_scorecard"
|
||||
candidate_status = "no_power_readback_repair_required"
|
||||
|
||||
work_order_id = (
|
||||
f"windows99-vmware-autostart-check-mode-{primary_alias}"
|
||||
if primary_alias
|
||||
else "windows99-vmware-autostart-check-mode-verify"
|
||||
)
|
||||
source_diffs = [
|
||||
{
|
||||
"alias": alias,
|
||||
"current_state": "guest_power_readback_not_ready",
|
||||
"desired_state": "guest_power_state_observable_without_start_or_stop",
|
||||
"diff_mode": "vmrun_list_and_autostart_policy_verify_only",
|
||||
"vm_power_change_allowed": False,
|
||||
"windows_registry_apply_allowed": False,
|
||||
"scheduled_task_modify_allowed": False,
|
||||
}
|
||||
for alias in powered_off_aliases
|
||||
]
|
||||
post_apply_verifier = [
|
||||
"bash scripts/reboot-recovery/collect-windows99-vmware-verify.sh --collect",
|
||||
"bash scripts/reboot-recovery/install-reboot-auto-recovery-slo-110.sh --verify-only",
|
||||
"GET /api/v1/agents/reboot-auto-recovery-slo-scorecard",
|
||||
"GET /api/v1/agents/windows99-vmware-autostart-check-mode-package",
|
||||
"GET /api/v1/agents/awoooi-priority-work-order-readback",
|
||||
]
|
||||
learning_writeback_refs = {
|
||||
"log_receipt_ref": f"log://awoooi/p0-006/{work_order_id}",
|
||||
"km_writeback_ref": f"km://awoooi/reboot-slo/{work_order_id}",
|
||||
"rag_chunk_ref": f"rag://awoooi/reboot-slo/{work_order_id}",
|
||||
"mcp_evidence_ref": f"mcp://awoooi/windows99/{work_order_id}",
|
||||
"playbook_trust_writeback_ref": (
|
||||
f"playbook://awoooi/windows99-vmware-autostart/{work_order_id}"
|
||||
),
|
||||
"work_item_receipt_ref": f"awooop://work-items/{work_order_id}",
|
||||
}
|
||||
controlled_apply_candidate = {
|
||||
"status": candidate_status,
|
||||
"executor": "windows99_no_secret_management_channel_or_local_console",
|
||||
"command_id": "windows99_vmware_autostart_power_readback_check_mode",
|
||||
"apply_allowed_by_this_package": False,
|
||||
"allowed_when": [
|
||||
"fresh_vmware_verify_stdout_confirms_powered_off_aliases",
|
||||
"vmware_autostart_config_ready",
|
||||
"windows_update_no_auto_reboot_policy_ready",
|
||||
"check_mode_plan_has_no_vmrun_start_or_stop",
|
||||
"post_apply_no_secret_verifier_is_available",
|
||||
],
|
||||
}
|
||||
|
||||
return {
|
||||
"work_order_id": work_order_id,
|
||||
"stage": stage,
|
||||
"next_executable_step": next_executable_step,
|
||||
"target_selector": {
|
||||
"host_alias": "99",
|
||||
"vm_aliases": powered_off_aliases,
|
||||
"power_state_scope": "windows99_vmware_powered_off_aliases",
|
||||
"secret_collection_allowed": False,
|
||||
"vm_power_change_allowed": False,
|
||||
"windows_registry_apply_allowed": False,
|
||||
"scheduled_task_modify_allowed": False,
|
||||
},
|
||||
"source_of_truth_diff": source_diffs,
|
||||
"check_mode": {
|
||||
"allowed_by_this_package": True,
|
||||
"probe": "verify_vmrun_list_autostart_task_and_update_policy_no_start_stop",
|
||||
"probe_command_count": 2 if powered_off_aliases else 1,
|
||||
"collector_command": (
|
||||
"bash scripts/reboot-recovery/collect-windows99-vmware-verify.sh "
|
||||
"--collect"
|
||||
),
|
||||
"scorecard_command": (
|
||||
"python3.11 scripts/reboot-recovery/"
|
||||
"reboot-auto-recovery-slo-scorecard.py --output <scorecard.json>"
|
||||
),
|
||||
},
|
||||
"controlled_apply_candidate": controlled_apply_candidate,
|
||||
"execution_boundary": {
|
||||
"executor": controlled_apply_candidate["executor"],
|
||||
"command_id": controlled_apply_candidate["command_id"],
|
||||
"execution_channel": "authorized_internal_console_or_no_secret_collector",
|
||||
"execution_authorized_by_this_package": False,
|
||||
"public_endpoint_display_only": True,
|
||||
"host_write_allowed_by_this_package": False,
|
||||
"vm_power_change_allowed_by_this_package": False,
|
||||
"windows_service_restart_allowed_by_this_package": False,
|
||||
"scheduled_task_modify_allowed_by_this_package": False,
|
||||
},
|
||||
"rollback": {
|
||||
"required": True,
|
||||
"mode": "revert_scoped_autostart_policy_or_task_change_before_verify",
|
||||
"backup_required_before_apply": True,
|
||||
},
|
||||
"post_apply_verifier": post_apply_verifier,
|
||||
"post_apply_verifier_count": len(post_apply_verifier),
|
||||
"learning_writeback": [
|
||||
"awooop_work_item_receipt",
|
||||
"reboot_slo_scorecard_rollups",
|
||||
"log_receipt_ref",
|
||||
"mcp_evidence_ref",
|
||||
"rag_chunk_ref",
|
||||
"km_playbook_trust_writeback_after_verifier",
|
||||
],
|
||||
"learning_writeback_refs": learning_writeback_refs,
|
||||
"learning_writeback_ref_count": len(learning_writeback_refs),
|
||||
"manager_summary": {
|
||||
"primary_alias": primary_alias or "none",
|
||||
"powered_off_count": len(powered_off_aliases),
|
||||
"check_mode_allowed": True,
|
||||
"apply_allowed": False,
|
||||
"vm_power_change_allowed": False,
|
||||
"post_apply_verifier_count": len(post_apply_verifier),
|
||||
"learning_writeback_ref_count": len(learning_writeback_refs),
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def _build_windows99_vmware_autostart_check_mode_package(
|
||||
windows99: dict[str, Any],
|
||||
*,
|
||||
generated_at: str,
|
||||
) -> dict[str, Any]:
|
||||
powered_off_aliases = _unique_strings(
|
||||
_strings(windows99.get("powered_off_aliases"))
|
||||
)
|
||||
required_aliases = _unique_strings(
|
||||
_strings(windows99.get("required_vm_aliases"))
|
||||
or _WINDOWS99_REQUIRED_VM_ALIASES
|
||||
)
|
||||
package_ready = bool(powered_off_aliases)
|
||||
status = (
|
||||
"check_mode_package_ready_windows99_vmware_guest_power_readback_required"
|
||||
if powered_off_aliases
|
||||
else "ready_no_windows99_vmware_autostart_power_check_required"
|
||||
)
|
||||
safe_next_step = (
|
||||
_WINDOWS99_POWERED_OFF_NEXT_SAFE_ACTION
|
||||
if powered_off_aliases
|
||||
else "rerun_no_secret_collector_and_reboot_slo_scorecard_verify_only"
|
||||
)
|
||||
rows = [
|
||||
{
|
||||
"alias": alias,
|
||||
"powered_off": alias in powered_off_aliases,
|
||||
"check_mode_probe": (
|
||||
"verify_vmrun_list_autostart_task_and_update_policy_no_start_stop"
|
||||
),
|
||||
"vm_power_change_allowed": False,
|
||||
"controlled_power_apply_required": alias in powered_off_aliases,
|
||||
"controlled_power_apply_hint": (
|
||||
"collect_fresh_verify_readback_and_build_scoped_autostart_policy_"
|
||||
"check_mode_before_any_power_action"
|
||||
if alias in powered_off_aliases
|
||||
else ""
|
||||
),
|
||||
}
|
||||
for alias in _unique_strings([*required_aliases, *powered_off_aliases])
|
||||
]
|
||||
action_chain = _build_windows99_vmware_autostart_action_chain(
|
||||
powered_off_aliases=powered_off_aliases,
|
||||
)
|
||||
controlled_apply_candidate = _dict(action_chain.get("controlled_apply_candidate"))
|
||||
learning_writeback_refs = _dict(action_chain.get("learning_writeback_refs"))
|
||||
post_apply_verifier = _strings(action_chain.get("post_apply_verifier"))
|
||||
|
||||
return {
|
||||
"schema_version": "windows99_vmware_autostart_check_mode_package_v1",
|
||||
"generated_at": generated_at,
|
||||
"status": status,
|
||||
"package_ready": package_ready,
|
||||
"target_host_alias": "99",
|
||||
"powered_off_aliases": powered_off_aliases,
|
||||
"required_vm_aliases": required_aliases,
|
||||
"vm_rows": rows,
|
||||
"action_chain": action_chain,
|
||||
"work_order_id": action_chain["work_order_id"],
|
||||
"action_stage": action_chain["stage"],
|
||||
"next_executable_step": action_chain["next_executable_step"],
|
||||
"target_vm_aliases": _strings(
|
||||
_dict(action_chain.get("target_selector")).get("vm_aliases")
|
||||
),
|
||||
"check_mode_allowed_by_this_package": action_chain["check_mode"][
|
||||
"allowed_by_this_package"
|
||||
],
|
||||
"check_mode_probe_command_count": _int(
|
||||
_dict(action_chain.get("check_mode")).get("probe_command_count")
|
||||
),
|
||||
"rollback_required": action_chain["rollback"]["required"],
|
||||
"vm_power_change_allowed": action_chain["target_selector"][
|
||||
"vm_power_change_allowed"
|
||||
],
|
||||
"windows_registry_apply_allowed": action_chain["target_selector"][
|
||||
"windows_registry_apply_allowed"
|
||||
],
|
||||
"scheduled_task_modify_allowed": action_chain["target_selector"][
|
||||
"scheduled_task_modify_allowed"
|
||||
],
|
||||
"controlled_apply_candidate_status": str(
|
||||
controlled_apply_candidate.get("status") or ""
|
||||
),
|
||||
"controlled_apply_candidate_executor": str(
|
||||
controlled_apply_candidate.get("executor") or ""
|
||||
),
|
||||
"controlled_apply_candidate_command_id": str(
|
||||
controlled_apply_candidate.get("command_id") or ""
|
||||
),
|
||||
"safe_next_step": safe_next_step,
|
||||
"controlled_apply_mode": "check_mode_package_only_no_windows_or_vm_write",
|
||||
"apply_allowed_by_this_package": False,
|
||||
"post_apply_verifier": post_apply_verifier,
|
||||
"post_verifier": post_apply_verifier,
|
||||
"post_apply_verifier_count": len(post_apply_verifier),
|
||||
"learning_writeback_refs": learning_writeback_refs,
|
||||
"learning_writeback_ref_count": len(learning_writeback_refs),
|
||||
"log_receipt_ref": str(learning_writeback_refs.get("log_receipt_ref") or ""),
|
||||
"km_writeback_ref": str(learning_writeback_refs.get("km_writeback_ref") or ""),
|
||||
"rag_chunk_ref": str(learning_writeback_refs.get("rag_chunk_ref") or ""),
|
||||
"mcp_evidence_ref": str(learning_writeback_refs.get("mcp_evidence_ref") or ""),
|
||||
"playbook_trust_writeback_ref": str(
|
||||
learning_writeback_refs.get("playbook_trust_writeback_ref") or ""
|
||||
),
|
||||
"forbidden_actions": _WINDOWS99_VMWARE_AUTOSTART_CHECK_FORBIDDEN_ACTIONS,
|
||||
"operation_boundaries": {
|
||||
"secret_value_read": False,
|
||||
"remote_write_performed": False,
|
||||
"vm_power_change_performed": False,
|
||||
"windows_service_restart_performed": False,
|
||||
"windows_registry_apply_performed": False,
|
||||
"scheduled_task_modify_performed": False,
|
||||
"host_reboot_performed": False,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def _build_windows99_vmx_source_repair_action_chain(
|
||||
*,
|
||||
missing_vmx_aliases: list[str],
|
||||
@@ -2794,6 +3124,72 @@ def _sync_windows99_vmx_source_repair_package(
|
||||
return package
|
||||
|
||||
|
||||
def _sync_windows99_vmware_autostart_check_mode_package(
|
||||
payload: dict[str, Any],
|
||||
*,
|
||||
generated_at: str,
|
||||
) -> dict[str, Any]:
|
||||
windows99 = _dict(payload.get("windows99_vmware_autostart"))
|
||||
package = _build_windows99_vmware_autostart_check_mode_package(
|
||||
windows99,
|
||||
generated_at=generated_at,
|
||||
)
|
||||
payload["windows99_vmware_autostart_check_mode_package"] = package
|
||||
|
||||
readback = _dict(payload.setdefault("readback", {}))
|
||||
readback["windows99_vmware_autostart_check_mode_package_ready"] = (
|
||||
package["package_ready"] is True
|
||||
)
|
||||
readback["windows99_vmware_autostart_check_mode_package_status"] = str(
|
||||
package["status"]
|
||||
)
|
||||
readback["windows99_vmware_autostart_check_mode_package_safe_next_step"] = str(
|
||||
package["safe_next_step"]
|
||||
)
|
||||
readback["windows99_vmware_autostart_check_mode_package_apply_allowed"] = (
|
||||
package["apply_allowed_by_this_package"] is True
|
||||
)
|
||||
readback["windows99_vmware_autostart_check_mode_powered_off_aliases"] = _strings(
|
||||
package.get("powered_off_aliases")
|
||||
)
|
||||
readback["windows99_vmware_autostart_check_mode_post_apply_verifier_count"] = (
|
||||
_int(package.get("post_apply_verifier_count"))
|
||||
)
|
||||
readback[
|
||||
"windows99_vmware_autostart_check_mode_learning_writeback_ref_count"
|
||||
] = _int(package.get("learning_writeback_ref_count"))
|
||||
readback[
|
||||
"windows99_vmware_autostart_check_mode_controlled_apply_candidate_executor"
|
||||
] = str(package.get("controlled_apply_candidate_executor") or "")
|
||||
|
||||
rollups = _dict(payload.setdefault("rollups", {}))
|
||||
rollups["windows99_vmware_autostart_check_mode_package_ready"] = (
|
||||
package["package_ready"] is True
|
||||
)
|
||||
rollups["windows99_vmware_autostart_check_mode_package_status"] = str(
|
||||
package["status"]
|
||||
)
|
||||
rollups["windows99_vmware_autostart_check_mode_package_safe_next_step"] = str(
|
||||
package["safe_next_step"]
|
||||
)
|
||||
rollups["windows99_vmware_autostart_check_mode_package_apply_allowed"] = (
|
||||
package["apply_allowed_by_this_package"] is True
|
||||
)
|
||||
rollups["windows99_vmware_autostart_check_mode_powered_off_aliases"] = _strings(
|
||||
package.get("powered_off_aliases")
|
||||
)
|
||||
rollups["windows99_vmware_autostart_check_mode_post_apply_verifier_count"] = (
|
||||
_int(package.get("post_apply_verifier_count"))
|
||||
)
|
||||
rollups[
|
||||
"windows99_vmware_autostart_check_mode_learning_writeback_ref_count"
|
||||
] = _int(package.get("learning_writeback_ref_count"))
|
||||
rollups[
|
||||
"windows99_vmware_autostart_check_mode_controlled_apply_candidate_executor"
|
||||
] = str(package.get("controlled_apply_candidate_executor") or "")
|
||||
return package
|
||||
|
||||
|
||||
def _host_row_by_alias(
|
||||
host_boot_detection: dict[str, Any],
|
||||
alias: str,
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
"""Windows99 VMware autostart check-mode package readback.
|
||||
|
||||
This wrapper exposes the P0-006 powered-off VM lane as its own package instead
|
||||
of hiding it inside the VMX source repair package. It is display/readback only:
|
||||
no secret read, host write, VM power change, service restart, or registry/task
|
||||
apply happens here.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from src.services.reboot_auto_recovery_slo_scorecard import (
|
||||
_build_windows99_vmware_autostart_check_mode_package,
|
||||
_taipei_now_iso,
|
||||
load_latest_reboot_auto_recovery_slo_scorecard,
|
||||
)
|
||||
|
||||
|
||||
def _dict(value: Any) -> dict[str, Any]:
|
||||
return value if isinstance(value, dict) else {}
|
||||
|
||||
|
||||
def _strings(value: Any) -> list[str]:
|
||||
if isinstance(value, list):
|
||||
return [str(item).strip() for item in value if str(item).strip()]
|
||||
if isinstance(value, str):
|
||||
return [part.strip() for part in value.split(",") if part.strip()]
|
||||
return []
|
||||
|
||||
|
||||
def _with_ui_counts(
|
||||
package: dict[str, Any],
|
||||
scorecard: dict[str, Any],
|
||||
) -> dict[str, Any]:
|
||||
payload = dict(package)
|
||||
powered_off_aliases = _strings(payload.get("powered_off_aliases"))
|
||||
readback = _dict(scorecard.get("readback"))
|
||||
windows99_management = _dict(scorecard.get("windows99_management_channel"))
|
||||
ssh_batch = _dict(windows99_management.get("ssh_batch"))
|
||||
payload["powered_off_count"] = len(powered_off_aliases)
|
||||
payload["scorecard_status"] = str(scorecard.get("status") or "unknown")
|
||||
payload["scorecard_generated_at"] = str(scorecard.get("generated_at") or "")
|
||||
payload["collector_status"] = str(
|
||||
readback.get("windows99_no_secret_collector_status") or "unknown"
|
||||
)
|
||||
payload["collector_readback_present"] = (
|
||||
readback.get("windows99_no_secret_collector_readback_present") is True
|
||||
)
|
||||
payload["collector_ssh_batchmode_auth_ready"] = (
|
||||
readback.get("windows99_no_secret_collector_ssh_batchmode_auth_ready")
|
||||
is True
|
||||
)
|
||||
payload["collector_remote_verify_attempted"] = (
|
||||
readback.get("windows99_no_secret_collector_remote_verify_attempted")
|
||||
is True
|
||||
)
|
||||
payload["collector_safe_next_step"] = str(
|
||||
readback.get("windows99_no_secret_collector_safe_next_step") or ""
|
||||
)
|
||||
payload["management_channel_ready"] = (
|
||||
windows99_management.get("remote_execution_channel_ready") is True
|
||||
)
|
||||
payload["can_collect_vmware_verify_without_secret"] = (
|
||||
windows99_management.get("can_collect_vmware_verify_without_secret") is True
|
||||
)
|
||||
payload["ssh_batch_ready"] = ssh_batch.get("ready") is True
|
||||
payload["ssh_batch_status"] = str(ssh_batch.get("status") or "unknown")
|
||||
payload["winrm_http_open"] = windows99_management.get("winrm_http_open") is True
|
||||
payload["winrm_https_open"] = windows99_management.get("winrm_https_open") is True
|
||||
payload["local_console_channel_reachable"] = (
|
||||
windows99_management.get("local_console_channel_reachable") is True
|
||||
)
|
||||
payload["console_collection_channels"] = _strings(
|
||||
windows99_management.get("console_collection_channels")
|
||||
)
|
||||
payload["collector_management_channel_conflict"] = bool(
|
||||
payload["collector_ssh_batchmode_auth_ready"]
|
||||
and not payload["management_channel_ready"]
|
||||
)
|
||||
payload["effective_check_mode_execution_ready"] = bool(
|
||||
payload.get("package_ready") is True
|
||||
and payload.get("check_mode_allowed_by_this_package") is True
|
||||
and (
|
||||
payload["management_channel_ready"]
|
||||
or payload["local_console_channel_reachable"]
|
||||
)
|
||||
)
|
||||
payload["public_display_only"] = True
|
||||
payload["check_mode_package_execution_authorized_by_this_endpoint"] = False
|
||||
return payload
|
||||
|
||||
|
||||
def _alias_lists_match(package: dict[str, Any], windows99: dict[str, Any]) -> bool:
|
||||
return _strings(package.get("powered_off_aliases")) == _strings(
|
||||
windows99.get("powered_off_aliases")
|
||||
)
|
||||
|
||||
|
||||
def _package_has_action_chain(package: dict[str, Any]) -> bool:
|
||||
action_chain = _dict(package.get("action_chain"))
|
||||
target_selector = _dict(action_chain.get("target_selector"))
|
||||
return bool(
|
||||
action_chain.get("work_order_id")
|
||||
and action_chain.get("stage")
|
||||
and action_chain.get("next_executable_step")
|
||||
and target_selector.get("host_alias")
|
||||
)
|
||||
|
||||
|
||||
def build_windows99_vmware_autostart_check_mode_package(
|
||||
scorecard: dict[str, Any],
|
||||
*,
|
||||
generated_at: str | None = None,
|
||||
) -> dict[str, Any]:
|
||||
existing_package = _dict(
|
||||
scorecard.get("windows99_vmware_autostart_check_mode_package")
|
||||
)
|
||||
windows99 = _dict(scorecard.get("windows99_vmware_autostart"))
|
||||
package = (
|
||||
dict(existing_package)
|
||||
if existing_package
|
||||
and generated_at is None
|
||||
and _alias_lists_match(existing_package, windows99)
|
||||
and _package_has_action_chain(existing_package)
|
||||
else _build_windows99_vmware_autostart_check_mode_package(
|
||||
windows99,
|
||||
generated_at=generated_at
|
||||
or str(scorecard.get("generated_at") or _taipei_now_iso()),
|
||||
)
|
||||
)
|
||||
return _with_ui_counts(package, scorecard)
|
||||
|
||||
|
||||
def load_latest_windows99_vmware_autostart_check_mode_package() -> dict[str, Any]:
|
||||
return build_windows99_vmware_autostart_check_mode_package(
|
||||
load_latest_reboot_auto_recovery_slo_scorecard()
|
||||
)
|
||||
Reference in New Issue
Block a user