# ATVM Status Template Use this as the default ATVM automation run-status template for: - local status responses in the terminal - Mattermost status posts after a completed run ## Layout ```md ## ATVM Run Status ### **SUMMARY:** | Metric | Value | |---|---:| | finished | | | passed | | | failed | | | skipped | | **HOSTS:** | Host | Kernel | Status | Detail | |---|---|---|---| | | | ✅ PASS | completed | | | | ⚠️ FAIL | | | | | ⏳ RUN | in progress | | | | ⏭️ SKIP | | **TIMING:** | Metric | Value | |---|---| | start | | | end | | | total | | | quickest | - or n/a | | longest | - or n/a | | average | or n/a | **COVERAGE:** - template: `` - categorize mode: `enabled` or `disabled` - datastore/config family: `` - config file: `` - migration style: `` - integration/plugin path: `` when the template command actually uses one - run options: `` **TEST FLOW:** - **NOTES:** - - ``` ## Rules - Keep `SUMMARY:`, `HOSTS:`, `TIMING:`, `COVERAGE:`, `TEST FLOW:`, and `NOTES:` in that order. - Use the title format: - `## ATVM Run Status` - `### ` - Use flat bullet lists for `COVERAGE:` and `TEST FLOW:`. - Use Markdown tables for `SUMMARY:`, `HOSTS:`, and `TIMING:`. - Use one host per row in the `HOSTS:` section. - Include a `Kernel` column immediately after `Host` in the `HOSTS:` table. - For completed hosts, prefer: - `✅ PASS` - `⚠️ FAIL` - For in-progress or skipped hosts, use: - `⏳ RUN` - `⏭️ SKIP` - Keep `Detail` concise. - Put broader context under `NOTES:`, not in the host table. - When available, put the persistent Currents run URL in `NOTES:` so operators can open the exact recorded run directly. - Include the exact `cmc-templates.py` command used to trigger the run in `NOTES:`, without the outer `sshpass`/`ssh` wrapper. - Keep `NOTES:` limited to meaningful operator-facing items such as the Currents link, real anomalies, failure context, or important fallback behavior. - Do not include generic watcher bookkeeping lines in `NOTES:` such as "run artifacts were detected" or "final reporting artifacts were detected." - Do not include internal fallback notes in `NOTES:` such as "`check-xml-files.ts` validation passed" or "host details were derived from reporter artifacts." - `COVERAGE:` should describe what the run was intended to cover without listing target hosts. - `COVERAGE:` should mostly mirror the important `cmc-templates.py` command inputs such as template, categorize mode, config filename, any real integration/plugin path, and important flags like `--ignore_force_shutdown`. - Do not render template-command fields in `COVERAGE:` when that template did not use them. - If `categorize mode: enabled` is shown, do not also repeat `--categorize` under `run options`. - When grouped categorized timing is reconstructed from host reporter artifacts, still populate `quickest`, `longest`, and `average` from inferred per-host durations when possible. - `TEST FLOW:` should describe the template-specific numbered run flow once for the whole test, not per host. - The watcher resolves `TEST FLOW:` from the run template name. - `cmc-e2e` currently uses this flow: - `1. Verifying set up` - `2. Power on and obtain ip address and host name` - `3. Uninstall CMC if still exists` - `4. Setting up disk on the host` - `5. Copy CMC install command from GUI` - `6. Install CMC` - `7. Create migration session` - `8. Tracking Changes` - `9. Trigger cmotion and do I/O test before actual cutover` - `10. Verify data for cmotion` - `11. Trigger revert cmotion and do I/O test before and during cmotion` - `12. Verify data for revert cmotion` - `13. Trigger cmotion again` - `14. Finalize cutover` - `15. Create migration report` - `16. Delete migration session` - `17. Verify local destination disk` - `18. Remove enabled FC integration` - `19. Remove host and volumes` - `20. Uninstall CMC` - `21. Clean up iSCSI targets` - `22. Power off` - `cmc-systemOS` currently uses this flow: - `1. Verifying set up` - `2. Power on and obtain ip address and host name` - `3. Uninstall CMC if still exists` - `4. Attach destination disk on the host` - `5. Copy CMC install command from GUI` - `6. Install CMC on the host` - `7. Create migration session (Simple Migration)` - `8. Tracking Changes (Simple Migration)` - `9. Finalize cutover (Simple Migration)` - `10. Create migration report (Simple Migration)` - `11. Delete migration session (Simple Migration)` - `12. Power off the host` - `13. Detach original source OS disk` - `14. Reassign destination OS disk` - `15. Power on to verify destination disk` - `16. Power off the host` - `17. Detach destination OS disk` - `18. Attach original source OS disk back` - `19. Power on and obtain ip address and host name` - `20. Uninstall CMC on the host` - `21. Power off the host` - `cmc-reboot` currently uses this flow: - `1. Verifying set up` - `2. Power on and obtain ip address and host name` - `3. Uninstall CMC if still exists` - `4. Setting up disk on the host` - `5. Copy CMC install command from GUI` - `6. Install CMC on the host` - `7. Create migration session` - `8. Tracking Changes` - `9. Create reboot validation file on the source disk` - `10. Trigger cmotion` - `11. Reboot the host` - `12. Update disk info after power on` - `13. Mount source disk` - `14. Verify reboot validation file after reboot` - `15. Create second reboot validation file on the source disk` - `16. Revert cmotion` - `17. Reboot the host` - `18. Update disk info after power on` - `19. Mount source disk` - `20. Verify second reboot validation file after reboot` - `21. Trigger cmotion and do I/O test during cmotion` - `22. Revert cmotion` - `23. Verify data with md5 checksum for the I/O test` - `24. Trigger cmotion again` - `25. Finalize cutover` - `26. Create migration report` - `27. Delete migration session` - `28. Verify local destination disk` - `29. Remove host and disks` - `30. Remove enabled integration` - `31. Uninstall CMC on the host` - `32. Clean up iSCSI targets` - `33. Power off the host` - See `/home/aw/code/cds/atvm/docs/automation/examples.md` for `cmc-e2e` examples. - Resolve kernel values by cross-referencing hostnames against `/home/aw/code/cds/atvm/inventory/vm-inventory.md`. - If no kernel value can be verified from `vm-inventory.md`, use `unknown`. - Use the same template for Mattermost and local operator-visible status output.