11 KiB
11 KiB
ATVM AGENTS Guide
This file defines how to operate and maintain the ATVM workspace in /home/aw/code/cds/atvm.
Workspace Layout
README.md- human entry point for the folder
scripts/- executable workflow assets
docs/setup/- setup/bootstrap procedure and run learnings
docs/automation/- ATVM Cypress automation procedure, examples, and run learnings
docs/workflow/- shared conventions for how the docs are maintained
inventory/- environment reference, credentials, IP allocations, and inventory indexes
archive/imported-notes/- preserved original long-form source material
Authoritative Sources
- Setup/bootstrap procedure:
docs/setup/guide.md
- Setup/bootstrap learnings:
docs/setup/run-learnings.md
- Automation execution procedure:
docs/automation/guide.md
- Automation command examples:
docs/automation/examples.md
- Automation run learnings:
docs/automation/run-learnings.md
- Workspace conventions:
docs/workflow/conventions.md
Setup Track Defaults
- ATVM static IP target:
192.168.3.191/22 - Gateway:
192.168.0.1 - DNS:
8.8.8.8,8.8.4.4 - Default Linux setup credential source:
/home/aw/code/cds/.env.credentials.localviaATVM_TARGET_USERandATVM_TARGET_PASSWORD - Client log file:
atvm_setup_script.log - Treat
192.168.3.191as the default ATVM target host reference. - For SSH to
192.168.3.191, ignore host key mismatch by default with-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null. - For Linux SSH to
192.168.3.191, source/home/aw/code/cds/.env.credentials.localand useATVM_TARGET_USERplusATVM_TARGET_PASSWORDunless explicitly overridden. - Use
ATVM_WINDOWS_TARGET_USERplusATVM_WINDOWS_TARGET_PASSWORDfor Windows guest access to the same ATVM target IP unless explicitly overridden.
Automation Track Defaults
- Controller host:
atvm-cypres-vm-1 - Controller IP:
192.168.3.190 - Controller credential source:
/home/aw/code/cds/.env.credentials.localviaATVM_CONTROLLER_USERandATVM_CONTROLLER_PASSWORD - Detailed test artifact root on controller:
/root/cdc-e2e-cyp-12.17.4/cypress/cmcReporter - Default Mattermost status destination config:
/home/aw/code/cds/.env.credentials.local - Default plugin-bearing template plugin:
--use_specified_plugin iscsi - Always include
--ignore_force_shutdownunless explicitly told not to. - Always include
--test_partitionunless explicitly told not to. - For
cmc-migrateops-compute-migrationto VMware, default to--vm_platforms vmwareand--set_static_ip_destunless explicitly told otherwise. - For ATVM automation runs that involve Windows guests, default the runner command to
--hang_retries 0unless explicitly told otherwise. - Default config family:
gold - Treat
cmc-systemOSas not using plugin or integration-type arguments. Do not auto-add--use_specified_plugin,--integration_type, or watcher integration/plugin metadata for that template. - Do not auto-add the maintained
--exclude_partial_matchblacklist when the operator explicitly targets named VMs with--specify_vms. - Even for explicit
--specify_vmsrequests, first check whether any requested VM is on the maintained blacklist and stop if it is.
Required Operating Rules
- Never run setup without operator-provided
--expected-ipand--expected-hostname. - Keep static IP configuration as the final setup step.
- Before any automation run, always check whether automation is already running.
- Treat every new ATVM run request as requiring a fresh live controller running-state check; never rely on the immediately previous status check when deciding whether a new run may start.
- For ATVM automation runs, execute without a pre-run approval gate unless the operator explicitly asks to review commands first.
- Default all ATVM automation runs to watcher-backed execution unless the operator explicitly says to run without watcher.
- After starting an ATVM automation run, report the exact executed
cmc-templates.pyandrun-sorry-cypress.pycommands. - Treat git/commit requests as a separate approval gate.
- Follow
/home/aw/code/cds/atvm/git-guide.mdfor ATVM git command drafting and commit-request handling, including the rule that the controllere2e cypressrepo behavior only applies when the operator explicitly asks for thee2e cypressrepo or a close variation, the rule to draft plain git commands rather than SSH-wrapped controller login commands unless explicitly requested, the SSH-prefixed push example requirement for that repo, and the rule that phrases such ascreate me a git,create a git,create a git description,make me a git,make a git,make me a git description,create me a git description, and close variations are prepare-only until the operator explicitly approves the displayed commit command. - Never execute
git pushfrom the assistant for this workspace. - After creating a local commit for the explicitly requested
e2e cypresscontroller repo, stop and give the operator the exact manual SSH-prefixed push command reference fromgit-guide.md, unless they explicitly ask for a different remote or branch. - Do not treat
approveafter a commit as permission to push; pushing requires separate explicit wording and still remains manual-reference-only unless the operator explicitly overrides this workspace rule. - After
cmc-templates.py, always verify that the generated spec files and the configspecPatternstill include every requested VM before startingrun-sorry-cypress.py. - If any requested VM is missing after template generation, stop and report the mismatch instead of launching the runner.
- Do not infer plugin behavior from the mere presence of plugin-specific strings or code blocks in a generated spec file.
- For plugin selection questions, determine expected behavior from the template/runtime gate such as
Cypress.env(...)conditions or other execution guards, and only treat it as a mismatch if the runtime logic would execute the wrong plugin path. - For
cmc-reboot, treat--use_specified_plugin bothas a separate confirmation gate, not a normal plugin selection. - When a planned reboot command uses
--use_specified_plugin both, warn that FC+iSCSI together may have a "chicken before the egg" timing issue where iSCSI disks are not attached before mTDI / CMC services start, and ask the operator to confirm thatbothis really intended. - Unless the operator explicitly reconfirms
bothforcmc-reboot, prefer onlyfcor onlyiscsi, not both. - For default watcher-backed runs, start the watcher before
run-sorry-cypress.py. - For default watcher-backed runs, build the watcher-start command so it automatically includes the exact
cmc-templates.pycommand via--template-commandand the exactrun-sorry-cypress.pycommand via--runner-command; the operator should not need to restate them separately. - When watcher-backed execution is used, prefer the controller-local
atvm-runner@...systemd service over detached SSH background launch patterns forrun-sorry-cypress.py. - Do not start the runner before the watcher, because the watcher helper clears stale
/tmp/<build-name>.logand can delete the fresh live runner log if the runner starts first. - Prefer the combined
start-atvm-run.shwrapper when starting both services so watcher and runner are never launched in parallel against the same/tmp/<build-name>.log. - For host-level test detail and failed-test investigation, use
/root/cdc-e2e-cyp-12.17.4/cypress/cmcReporter, especiallylogs/,xml/, andmochawesome/. - Apply failed-host detail recovery consistently for every ATVM template run, not just
cmc-reboot. - For any failed ATVM host, recover failure detail in this order when available: consolidated run log,
mochawesome, structured reporter artifacts (json/xml), then text reporter artifacts. - Keep the
HOSTSdetail column compact with the failing step plus a short error summary only. - Put richer per-host error excerpts in a dedicated
FAILURE NOTES:section, and reserveNOTES:for non-failure context such as the template command, Currents URL, and operator-facing caveats. - When reporting
TEST FLOW:for an ATVM run, prefer the numbered steps extracted from the generated spec for that exact run. - If the generated spec exists, do not rely on a static template flow list for
TEST FLOW:. - Only fall back to template-level or static flow definitions when the generated spec cannot be located or parsed.
- Treat
/var/lib/atvm-run-watcher/<build>/state.jsonas cached watcher output, not the source of truth for a completed-run confirmation. - Before confirming a completed ATVM run status, verify in this order: live launch log, matching reporter artifacts,
Cloud Run Finishedsummary / Currents URL, then compare against saved watcher state. - If saved watcher state disagrees with the launch log or a replay of the exact artifacts through the current watcher code, treat the saved state as stale and do not report from it.
- Never confirm a completed ATVM run from
state.jsonalone. - For categorized runs, never report a grouped sub-run as
PASSfrom watcherhost_results, grouped XML, or a lonecheck-xml-files.tsresult by itself. - Before reporting a categorized grouped sub-run as
PASS, confirm that the matching child batch also passed in the live launch log or the finalCloud Run Finishedsummary for that child run. - If the operator asks for ATVM run status without mentioning Mattermost, respond locally only and do not post externally.
- If the operator asks to send ATVM run status to Mattermost, use
MATTERMOST_ATVM_WEBHOOKandMATTERMOST_ATVM_CHANNELfrom/home/aw/code/cds/.env.credentials.localby default and send the final status only after the run has fully completed, whether the run passed or failed. - For vCenter VM snapshot requests, default the snapshot name to
VM Snapshot [m/d/yyyy], [h:mm:ss AM/PM]in the localAmerica/New_Yorktimezone unless the operator explicitly requests a different name. - Do not call out expected, harmless
systemctl reset-failed ... unit not loadedoutput in routine run updates; mention it only if it blocks startup or matters for debugging. - Treat
docs/automation/examples.mdas reference-only, not default operator intent. - Put reusable workflow rules in
guide.mdfiles. - Put dated lessons only in
run-learnings.mdfiles. - Keep durable environment reference in
inventory/. - Preserve imported long-form notes in
archive/imported-notes/; do not treat them as the primary runbook.
Maintenance Rules
- When changing workflow behavior, update the corresponding
guide.md. - When adding a reusable command pattern, update
docs/automation/examples.md. - When a run produces a new lesson, update the appropriate
run-learnings.md. - Keep filesystem paths in docs aligned with the actual repo layout.
- Do not remove detailed inventory or credential information from this workspace unless explicitly instructed.