Skip to content

[PRODENG-3608] Fix inaccuracies and completeness gaps found during PRODENG-3608 e2e validation - #52

Open
sgajlekar-spec wants to merge 4 commits into
Mirantis:mainfrom
sgajlekar-spec:PRODENG-3608-xt-statistic-e2e-revalidate
Open

[PRODENG-3608] Fix inaccuracies and completeness gaps found during PRODENG-3608 e2e validation#52
sgajlekar-spec wants to merge 4 commits into
Mirantis:mainfrom
sgajlekar-spec:PRODENG-3608-xt-statistic-e2e-revalidate

Conversation

@sgajlekar-spec

Copy link
Copy Markdown
Collaborator

Summary

While running a full e2e validation for PRODENG-3608 (provision → install → no-touch join → upgrade attempts), I cross-checked every doc under docs/ against the actual ansible tasks/vars, terraform modules, and live cluster behavior. This PR fixes what didn't hold up:

  • install-bootc-mke3.md: mke_config_src must hold literal TOML content, not a path — ansible/tasks/mke-toml-config.yml uses copy: content:, not src:. Also fixes the "last step" claim for the SSH/sudo hardening play, which actually runs before the post-install controller installs.
  • install-controllers.md: same ordering fix, plus a troubleshooting row for machine-config-controller's confirmed CrashLoopBackOff (its pinned chart 0.1.4 ships a ClusterRole with no upgrade.cattle.io/plans rule).
  • controller-security-analysis.md: flags that its RBAC table for machine-config-controller doesn't match what the pinned chart actually ships — live-confirmed via the CrashLoopBackOff above.
  • provisioning.md: fixes a contradiction with the vSphere terraform module, which actually configures VMs via cloud-init (guestinfo), not kickstart, despite being ISO-provisioned.
  • provision-terraform-vsphere.md: documents required vm_user/firmware vars (no defaults), fixes the mngr/ctr naming example, notes a Terraform-version prerequisite gap vs. the AWS doc.
  • provision-terraform-aws.md / terraform/aws/README.md: documents that per-nodegroup user_data is silently ignored whenever is_bootc_based=true.
  • ansible-inventory-input.md: flags mke_url and the managers/workers group names as hard requirements, not just examples.
  • access-cluster.md: documents the existing mke-client-bundle-playbook.yml as a third, simpler option.
  • machine-config-operations.md: adds a troubleshooting row for the confirmed CrashLoopBackOff.
  • upgrade-with-controller.md: links the filed upstream issue (Mirantis/bootc-mirantis#178) for the overlayfs/overlay2 blocker, and states explicitly that the check is blind to the upgrade target — confirmed live against two separate ClusterUpgrade attempts (same-version, and a real version bump to the latest release). Also notes backupDir has a CRD default.
  • upgrade-with-ansible.md: documents upgrade_worker_batch_size.
  • mixed-cluster.md: adds a missing registry-access prerequisite.

All fixes are backed by direct evidence gathered live this session (a real 11-node AWS e2e cluster) or by reading the actual source they describe (ansible tasks/vars, terraform variables/modules, live CRDs) — not just prose review.

Test plan

  • Cross-checked every changed claim against the actual ansible task/var file, terraform module source, or live cluster CRD/behavior it describes.
  • Verified all pre-existing internal markdown links/anchors still resolve (no links were broken by these edits).
  • Docs-only change — no code paths affected; no additional test run needed beyond review.

🤖 Generated with Claude Code

…8 e2e validation

Confirmed against actual ansible tasks/vars, terraform modules, and live
cluster behavior during a full e2e run (provision, install, no-touch join,
upgrade attempts):

- install-bootc-mke3.md: mke_config_src must hold literal TOML content, not
  a path (ansible/tasks/mke-toml-config.yml uses copy:content, not src:);
  fix "last step" ordering claim for the SSH/sudo hardening play, which
  actually runs before the post-install controller installs.
- install-controllers.md: same ordering fix; add a troubleshooting row for
  machine-config-controller's confirmed CrashLoopBackOff (chart 0.1.4 ships
  a ClusterRole with no upgrade.cattle.io/plans rule).
- controller-security-analysis.md: flag that the RBAC table's machine-config-
  controller claims don't match what the pinned chart (0.1.4) actually
  ships, live-confirmed via the CrashLoopBackOff above.
- provisioning.md: fix contradiction with the vSphere terraform module,
  which actually configures VMs via cloud-init (guestinfo), not kickstart.
- provision-terraform-vsphere.md: document required vm_user/firmware vars
  (no defaults), fix the mngr/ctr naming example, note the terraform-version
  prerequisite gap vs the AWS doc.
- provision-terraform-aws.md / terraform/aws/README.md: document that
  per-nodegroup user_data is silently ignored whenever is_bootc_based=true.
- ansible-inventory-input.md: flag mke_url and the managers/workers group
  names as hard requirements, not just examples.
- access-cluster.md: document the existing mke-client-bundle-playbook.yml
  automation as a third option.
- machine-config-operations.md: add a troubleshooting row for the confirmed
  CrashLoopBackOff.
- upgrade-with-controller.md: link the filed upstream issue
  (Mirantis/bootc-mirantis#178) for the overlayfs/overlay2 blocker, and
  state explicitly that the check is blind to the upgrade target (confirmed
  live against two separate ClusterUpgrade attempts); note backupDir has a
  CRD default.
- upgrade-with-ansible.md: document upgrade_worker_batch_size.
- mixed-cluster.md: add missing registry-access prerequisite.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@sgajlekar-spec sgajlekar-spec changed the title docs: fix inaccuracies and completeness gaps found during PRODENG-3608 e2e validation [PRODENG-3608] Fix inaccuracies and completeness gaps found during PRODENG-3608 e2e validation Aug 10, 2026
@sgajlekar-spec
sgajlekar-spec requested a review from nekwar August 10, 2026 07:53
| `machine-config-controller` deployment not found in namespace `mke` | Its chart hardcodes `targetNamespace: system-upgrade`; look there instead | Not a fault — expected behavior |
| Locked out of SSH and sudo on every node | `disable_sshd_after_install`/`revoke_sudo_after_install` ran at the end of install (see [install runbook](install-bootc-mke3.md#post-install-automation)) | Break-glass recovery below |
| Locked out of SSH and sudo on every node | `disable_sshd_after_install`/`revoke_sudo_after_install` ran during install, before the controller installs (see [install runbook](install-bootc-mke3.md#post-install-automation)) | Break-glass recovery below |
| `machine-config-controller` pod stuck in `CrashLoopBackOff`, logs show `plans.upgrade.cattle.io is forbidden` and `Could not wait for Cache to sync` | Its pinned chart (`registry.mirantis.com/machine-config-controller/charts/machine-config-controller:0.1.4`, the `machine_config_controller_version` default in `vars/common-vars.yml`) ships a `ClusterRole` with no rule for `upgrade.cattle.io`/`plans`, so its `Plan`-watching informer never syncs and the manager exits every ~2 minutes | Known chart defect, not an installer misconfiguration — no workaround via Ansible vars. Track upstream fix in `machine-config-controller`'s chart RBAC template |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

instead of documenting it, I would suggest to fix it first without merging this PR

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, reverted document to original state

2. IP addresses of managers, workers and gateway should be configured according to vSphere network configuration. DNS should be reachable by VMs.
3. `cluster_name` variable will be used as a prefix for VM names. E.g. if cluster_name = "bootc-mke3-cluster", then names of managers will look like this: `bootc-mke3-cluster-ctr1`, `bootc-mke3-cluster-ctr2`, etc. Names of workers will look like this: `bootc-mke3-cluster-wrk1`, `bootc-mke3-cluster-wrk2`, etc.
3. `cluster_name` variable will be used as a prefix for VM names. E.g. if cluster_name = "bootc-mke3-cluster", then names of managers will look like this: `bootc-mke3-cluster-mngr1`, `bootc-mke3-cluster-mngr2`, etc. Names of workers will look like this: `bootc-mke3-cluster-wrk1`, `bootc-mke3-cluster-wrk2`, etc.
4. `vm_user` (required, no default) — the username the deployed VMs are

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is not fully accurate. Yes, previously we had vsphere as a platform for our builds and it contained cloud-init with some other packages specific for vsphere. Now we're using bare variant to perform testing on vsphere with providing kickstart

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that is probably my bad - I think I directed this comment.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should I revert this changes? Are there any suggestions?

Comment thread docs/installation-guide/provisioning.md Outdated
> primarily used for internal testing. Where this documentation offers both
> mechanisms, prefer kickstart unless you are specifically working with a
> cloud build.
> is available on the cloud-platform builds (AMI/QCOW2) and is primarily

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated please check again

Comment thread docs/operations-guide/access-cluster.md Outdated
> Use `-k`/`--insecure` only while MKE still serves its self-signed
> certificate; drop it once MKE has a trusted certificate installed.

### Option 3 — Fetch the bundle with the provided Ansible playbook

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we re-order options and make this the first one, as this is the simplest one?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

| Symptom | Likely cause | Remediation |
|---|---|---|
| `kubectl apply` fails `strict decoding error: unknown field "spec.reboot"` (or any other module) | The controller's CRD is stale relative to its chart | See the [controllers runbook](../installation-guide/install-controllers.md#machine-config-controllers-chart-is-the-exception--it-registry-pulls-by-default) for `kubectl apply -f <chart>/crds/*.yaml` |
| `machine-config-controller` never becomes healthy — `CrashLoopBackOff` before you've applied any `MachineConfigChange` at all | Known RBAC gap in chart `0.1.4` (the default `machine_config_controller_version`): its `ClusterRole` has no rule for `plans.upgrade.cattle.io`, so the controller can never sync and repeatedly exits | Not something this runbook covers — the controller isn't usable at all in this state. See the [controllers runbook](../installation-guide/install-controllers.md) troubleshooting table |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed


> [!WARNING]
> **Known issue, tracked separately**: the embedded `mirantis/ucp upgrade
> **Known issue, tracked upstream ([Mirantis/bootc-mirantis#178](https://github.com/Mirantis/bootc-mirantis/issues/178))**: the embedded `mirantis/ucp upgrade

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed

Comment thread docs/installation-guide/provisioning.md Outdated
> primarily used for internal testing. Where this documentation offers both
> mechanisms, prefer kickstart unless you are specifically working with a
> cloud build.
> is available on the cloud-platform builds (AMI/QCOW2) and is primarily

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we announce the qcow downloads in our public docs IIRC, so we should not consider it an internal artifact.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed, please check once again if its correct now

### 3.1 RBAC footprint

Source: kubebuilder markers in `internal/controller/machineconfigchange_controller.go:64-69`, rendered to `charts/machine-config-controller/templates/{clusterrole,role,leader-election-role}.yaml`.
Source: kubebuilder markers in `internal/controller/machineconfigchange_controller.go:64-69` at the analyzed commit `6b2b670`, rendered to `charts/machine-config-controller/templates/{clusterrole,role,leader-election-role}.yaml`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should probably drop the specific commit reference, and keep this document either leading edge, or more abstract.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, removed commit version

> `0.1.4` — the two were not confirmed to be the same artifact. Do not treat
> §3.1 as an accurate description of the default install's RBAC footprint
> until re-verified against the actual pinned chart version. See the
> [controllers runbook](../installation-guide/install-controllers.md) troubleshooting table for the live symptom.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's confirm that this isn't related to the issue of our current chart points to the url instead of an in-built chart: #51

PRODENG-3608-E2E-VALIDATION-REPORT.md and terraform/aws/inventory.yaml are
local session artifacts, not meant to ship in this PR.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants