aap-demo 2.0.0.dev0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. aap_demo-2.0.0.dev0/.ansible-lint +39 -0
  2. aap_demo-2.0.0.dev0/.claude/CLAUDE.md +98 -0
  3. aap_demo-2.0.0.dev0/.claude/skills/aap-demo/SKILL.md +343 -0
  4. aap_demo-2.0.0.dev0/.claude/skills/aap-demo/evals/evals.json +300 -0
  5. aap_demo-2.0.0.dev0/.commitlintrc.json +32 -0
  6. aap_demo-2.0.0.dev0/.editorconfig +26 -0
  7. aap_demo-2.0.0.dev0/.github/ISSUE_TEMPLATE/bug_report.yaml +18 -0
  8. aap_demo-2.0.0.dev0/.github/ISSUE_TEMPLATE/documentation.yaml +21 -0
  9. aap_demo-2.0.0.dev0/.github/ISSUE_TEMPLATE/github-plugin-apme.md +81 -0
  10. aap_demo-2.0.0.dev0/.github/PULL_REQUEST_TEMPLATE.md +32 -0
  11. aap_demo-2.0.0.dev0/.github/requirements/pypi-build.txt +13 -0
  12. aap_demo-2.0.0.dev0/.github/workflows/commitlint.yaml +54 -0
  13. aap_demo-2.0.0.dev0/.github/workflows/lint.yaml +171 -0
  14. aap_demo-2.0.0.dev0/.github/workflows/pr-checks.yaml +114 -0
  15. aap_demo-2.0.0.dev0/.github/workflows/pypi-publish.yaml +59 -0
  16. aap_demo-2.0.0.dev0/.github/workflows/python-tests.yaml +87 -0
  17. aap_demo-2.0.0.dev0/.github/workflows/status-badges.yaml +23 -0
  18. aap_demo-2.0.0.dev0/.github/workflows/test.yaml +133 -0
  19. aap_demo-2.0.0.dev0/.github/workflows/version-check.yaml +27 -0
  20. aap_demo-2.0.0.dev0/.gitignore +35 -0
  21. aap_demo-2.0.0.dev0/.markdown-link-check.json +33 -0
  22. aap_demo-2.0.0.dev0/.markdownlint.json +25 -0
  23. aap_demo-2.0.0.dev0/.pre-commit-config.yaml +119 -0
  24. aap_demo-2.0.0.dev0/.secrets.baseline +337 -0
  25. aap_demo-2.0.0.dev0/.shellcheckrc +2 -0
  26. aap_demo-2.0.0.dev0/.yamllint +51 -0
  27. aap_demo-2.0.0.dev0/LICENSE +202 -0
  28. aap_demo-2.0.0.dev0/Makefile +24 -0
  29. aap_demo-2.0.0.dev0/PKG-INFO +291 -0
  30. aap_demo-2.0.0.dev0/README.md +249 -0
  31. aap_demo-2.0.0.dev0/SECURITY.md +27 -0
  32. aap_demo-2.0.0.dev0/SKILL.md +226 -0
  33. aap_demo-2.0.0.dev0/VERSION +1 -0
  34. aap_demo-2.0.0.dev0/aap-demo.sh +3480 -0
  35. aap_demo-2.0.0.dev0/addons/ao/README.md +461 -0
  36. aap_demo-2.0.0.dev0/addons/ao/demos/README.md +30 -0
  37. aap_demo-2.0.0.dev0/addons/ao/deploy.sh +1767 -0
  38. aap_demo-2.0.0.dev0/addons/ao/lib/admin-password.sh +99 -0
  39. aap_demo-2.0.0.dev0/addons/ao/lib/install-plan-approval.sh +99 -0
  40. aap_demo-2.0.0.dev0/addons/ao/lib/replica-profile.sh +16 -0
  41. aap_demo-2.0.0.dev0/addons/ao/manifests/README.md +58 -0
  42. aap_demo-2.0.0.dev0/addons/ao/manifests/automationorchestrator-cr.yaml +43 -0
  43. aap_demo-2.0.0.dev0/addons/ao/manifests/operator-rbac.yaml +73 -0
  44. aap_demo-2.0.0.dev0/addons/ao/manifests/operator-subscription.yaml +28 -0
  45. aap_demo-2.0.0.dev0/addons/ao/manifests/postgres-cluster.yaml +62 -0
  46. aap_demo-2.0.0.dev0/addons/ao/playbooks/sync-ao-demos.yml +174 -0
  47. aap_demo-2.0.0.dev0/addons/ao/playbooks/tasks/sync_workflow.yml +188 -0
  48. aap_demo-2.0.0.dev0/addons/ao/scripts/generate-manifests.sh +44 -0
  49. aap_demo-2.0.0.dev0/addons/ao/scripts/import-demos.py +356 -0
  50. aap_demo-2.0.0.dev0/addons/ao/scripts/provision-aap-demos.py +282 -0
  51. aap_demo-2.0.0.dev0/addons/apme-eap/.gitignore +5 -0
  52. aap_demo-2.0.0.dev0/addons/apme-eap/README.md +489 -0
  53. aap_demo-2.0.0.dev0/addons/apme-eap/TEST_PLAN.md +551 -0
  54. aap_demo-2.0.0.dev0/addons/apme-eap/defaults.yml +46 -0
  55. aap_demo-2.0.0.dev0/addons/apme-eap/deploy.sh +872 -0
  56. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/apme-vars.example.yml +27 -0
  57. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/deploy_apme_portal.yml +134 -0
  58. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/aap_apme_prerequisites/defaults/main.yml +12 -0
  59. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/aap_apme_prerequisites/meta/main.yml +12 -0
  60. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/aap_apme_prerequisites/tasks/create_api_token.yml +72 -0
  61. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/aap_apme_prerequisites/tasks/create_oauth_app.yml +205 -0
  62. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/aap_apme_prerequisites/tasks/main.yml +84 -0
  63. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_gateway_helm/defaults/main.yml +6 -0
  64. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_gateway_helm/files/apme-values.yaml +102 -0
  65. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_gateway_helm/meta/main.yml +8 -0
  66. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_gateway_helm/tasks/main.yml +113 -0
  67. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_helm_bootstrap/defaults/main.yml +10 -0
  68. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_helm_bootstrap/tasks/main.yml +54 -0
  69. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_helm_values/defaults/main.yml +4 -0
  70. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_helm_values/files/portal-apme-values.yaml.template +2197 -0
  71. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_helm_values/meta/main.yml +8 -0
  72. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_helm_values/tasks/aap_auth_only.yml +36 -0
  73. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_helm_values/tasks/main.yml +217 -0
  74. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_helm_values/tasks/pah_integration.yml +25 -0
  75. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_helm_values/tasks/portal_app_config_substitution.yml +18 -0
  76. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_oci_push/defaults/main.yml +10 -0
  77. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_oci_push/meta/main.yml +8 -0
  78. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_oci_push/tasks/main.yml +75 -0
  79. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_pah_integration/defaults/main.yml +23 -0
  80. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_pah_integration/meta/main.yml +9 -0
  81. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_pah_integration/tasks/main.yml +87 -0
  82. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_pah_integration/tasks/seed_apme_galaxy_servers.yml +203 -0
  83. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_scm_secrets/defaults/main.yml +4 -0
  84. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_scm_secrets/meta/main.yml +8 -0
  85. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/apme_scm_secrets/tasks/main.yml +80 -0
  86. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/openshift_apme_setup/defaults/main.yml +17 -0
  87. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/openshift_apme_setup/files/apme-register-git-repository/content/catalog-info.yaml +24 -0
  88. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/openshift_apme_setup/files/apme-register-git-repository/template.yaml +128 -0
  89. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/openshift_apme_setup/meta/main.yml +8 -0
  90. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/openshift_apme_setup/tasks/main.yml +83 -0
  91. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/openshift_apme_setup/templates/registries-openshift-integrated.conf.j2 +13 -0
  92. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/portal_helm_install/defaults/main.yml +6 -0
  93. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/portal_helm_install/meta/main.yml +8 -0
  94. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/roles/portal_helm_install/tasks/main.yml +52 -0
  95. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/setup.yml +51 -0
  96. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/tasks/resolve_plugin_pack.yml +43 -0
  97. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/templates/deployment-info.md.j2 +49 -0
  98. aap_demo-2.0.0.dev0/addons/apme-eap/playbooks/templates/kubeconfig.j2 +21 -0
  99. aap_demo-2.0.0.dev0/addons/apme-eap/plugin_packs/.gitignore +1 -0
  100. aap_demo-2.0.0.dev0/addons/apme-eap/plugin_packs/README.md +6 -0
  101. aap_demo-2.0.0.dev0/addons/apme-eap/plugin_packs/apme-prototype-plugins-8593383-20260718025043.oci.tar.gz +4 -0
  102. aap_demo-2.0.0.dev0/addons/apme-eap/plugin_packs/plugin-pack.manifest.yml +2 -0
  103. aap_demo-2.0.0.dev0/addons/apme-eap/requirements.txt +13 -0
  104. aap_demo-2.0.0.dev0/addons/apme-eap/requirements.yml +13 -0
  105. aap_demo-2.0.0.dev0/addons/apme-eap/scripts/push_oci_archive.py +133 -0
  106. aap_demo-2.0.0.dev0/addons/devspaces/checluster.yaml +43 -0
  107. aap_demo-2.0.0.dev0/addons/devspaces/deploy.sh +138 -0
  108. aap_demo-2.0.0.dev0/addons/fleet/cloud-init/meta-data.template +2 -0
  109. aap_demo-2.0.0.dev0/addons/fleet/cloud-init/user-data.template +7 -0
  110. aap_demo-2.0.0.dev0/addons/fleet/deploy.sh +67 -0
  111. aap_demo-2.0.0.dev0/addons/fleet/fleet-aap.sh +471 -0
  112. aap_demo-2.0.0.dev0/addons/fleet/fleet.sh +692 -0
  113. aap_demo-2.0.0.dev0/addons/local-cache/README.md +81 -0
  114. aap_demo-2.0.0.dev0/addons/local-cache/deploy.sh +486 -0
  115. aap_demo-2.0.0.dev0/addons/mcp-server/README.md +89 -0
  116. aap_demo-2.0.0.dev0/addons/mcp-server/deploy.sh +349 -0
  117. aap_demo-2.0.0.dev0/addons/mcp-server/mcp-server.yaml +46 -0
  118. aap_demo-2.0.0.dev0/addons/ollama/README.md +102 -0
  119. aap_demo-2.0.0.dev0/addons/ollama/deploy.sh +179 -0
  120. aap_demo-2.0.0.dev0/addons/ollama/ollama.yaml +136 -0
  121. aap_demo-2.0.0.dev0/addons/olm/deploy.sh +178 -0
  122. aap_demo-2.0.0.dev0/addons/opa/README.md +385 -0
  123. aap_demo-2.0.0.dev0/addons/opa/deploy.sh +1050 -0
  124. aap_demo-2.0.0.dev0/addons/opa/playbooks/clear-policies.yml +40 -0
  125. aap_demo-2.0.0.dev0/addons/opa/playbooks/demo-policy.yml +229 -0
  126. aap_demo-2.0.0.dev0/addons/opa/playbooks/load-policies.yml +75 -0
  127. aap_demo-2.0.0.dev0/addons/opa/playbooks/test-policies.yml +22 -0
  128. aap_demo-2.0.0.dev0/addons/portal/README.md +514 -0
  129. aap_demo-2.0.0.dev0/addons/portal/deploy.sh +1100 -0
  130. aap_demo-2.0.0.dev0/addons/portal/values.yaml.template +37 -0
  131. aap_demo-2.0.0.dev0/addons/portal-operator/README.md +106 -0
  132. aap_demo-2.0.0.dev0/addons/portal-operator/deploy.sh +825 -0
  133. aap_demo-2.0.0.dev0/addons/product-demo-cloud/README.md +46 -0
  134. aap_demo-2.0.0.dev0/addons/product-demo-cloud/deploy.sh +137 -0
  135. aap_demo-2.0.0.dev0/addons/product-demo-linux/README.md +75 -0
  136. aap_demo-2.0.0.dev0/addons/product-demo-linux/deploy.sh +142 -0
  137. aap_demo-2.0.0.dev0/addons/product-demo-network/README.md +44 -0
  138. aap_demo-2.0.0.dev0/addons/product-demo-network/deploy.sh +135 -0
  139. aap_demo-2.0.0.dev0/addons/product-demo-openshift/README.md +55 -0
  140. aap_demo-2.0.0.dev0/addons/product-demo-openshift/deploy.sh +137 -0
  141. aap_demo-2.0.0.dev0/addons/product-demo-satellite/README.md +138 -0
  142. aap_demo-2.0.0.dev0/addons/product-demo-satellite/deploy.sh +131 -0
  143. aap_demo-2.0.0.dev0/addons/product-demo-windows/README.md +50 -0
  144. aap_demo-2.0.0.dev0/addons/product-demo-windows/deploy.sh +142 -0
  145. aap_demo-2.0.0.dev0/addons/product-demos/README.md +79 -0
  146. aap_demo-2.0.0.dev0/addons/product-demos/deploy.sh +108 -0
  147. aap_demo-2.0.0.dev0/addons/product-demos-base/README.md +285 -0
  148. aap_demo-2.0.0.dev0/addons/product-demos-base/deploy.sh +746 -0
  149. aap_demo-2.0.0.dev0/addons/product-demos-base/lib.sh +920 -0
  150. aap_demo-2.0.0.dev0/addons/product-demos-base/patches/README.md +20 -0
  151. aap_demo-2.0.0.dev0/addons/product-demos-base/patches/install-apd.yml +58 -0
  152. aap_demo-2.0.0.dev0/addons/product-demos-base/playbooks/install-apd-aap-demo.yml +40 -0
  153. aap_demo-2.0.0.dev0/addons/registry/deploy.sh +93 -0
  154. aap_demo-2.0.0.dev0/addons/registry/registry.yaml +136 -0
  155. aap_demo-2.0.0.dev0/addons/setup-pah/deploy.sh +62 -0
  156. aap_demo-2.0.0.dev0/config/crs/aap-controller-eda.yaml +16 -0
  157. aap_demo-2.0.0.dev0/config/crs/aap-controller.yaml +16 -0
  158. aap_demo-2.0.0.dev0/config/crs/aap-minimal-noingress.yaml +63 -0
  159. aap_demo-2.0.0.dev0/config/crs/aap-minimal-rwx.yaml +21 -0
  160. aap_demo-2.0.0.dev0/config/crs/aap-minimal.yaml +48 -0
  161. aap_demo-2.0.0.dev0/config/manifests/aap-ingress.yaml +51 -0
  162. aap_demo-2.0.0.dev0/config/manifests/aap-storage-pvcs.yaml +31 -0
  163. aap_demo-2.0.0.dev0/config/manifests/coredns-config.yaml +17 -0
  164. aap_demo-2.0.0.dev0/config/manifests/kustomization.yaml +13 -0
  165. aap_demo-2.0.0.dev0/config/manifests/local-path-provisioner.yaml +160 -0
  166. aap_demo-2.0.0.dev0/config/manifests/local-path-scc.yaml +24 -0
  167. aap_demo-2.0.0.dev0/config/manifests/nfs-provisioner.yaml +113 -0
  168. aap_demo-2.0.0.dev0/config/manifests/nfs-server.yaml +76 -0
  169. aap_demo-2.0.0.dev0/config/olm/catalogsource.yaml +27 -0
  170. aap_demo-2.0.0.dev0/config/olm/operatorgroup.yaml +15 -0
  171. aap_demo-2.0.0.dev0/config/olm/subscription.yaml +18 -0
  172. aap_demo-2.0.0.dev0/config/patches/controller-git-safe-directory.yaml +34 -0
  173. aap_demo-2.0.0.dev0/docs/CONTRIBUTING.md +302 -0
  174. aap_demo-2.0.0.dev0/docs/FULL-README.md +343 -0
  175. aap_demo-2.0.0.dev0/docs/LINTING-QUICK-REF.md +130 -0
  176. aap_demo-2.0.0.dev0/docs/LINTING-SETUP.md +319 -0
  177. aap_demo-2.0.0.dev0/docs/LINTING.md +503 -0
  178. aap_demo-2.0.0.dev0/docs/aap-mcp-server.md +76 -0
  179. aap_demo-2.0.0.dev0/docs/adr/000-template.md +65 -0
  180. aap_demo-2.0.0.dev0/docs/adr/001-project-cli-architecture.md +103 -0
  181. aap_demo-2.0.0.dev0/docs/adr/002-portal-helm-deployment.md +173 -0
  182. aap_demo-2.0.0.dev0/docs/adr/003-infrastructure-backend-selection.md +119 -0
  183. aap_demo-2.0.0.dev0/docs/adr/004-portal-helm-addon.md +402 -0
  184. aap_demo-2.0.0.dev0/docs/adr/005-olm-on-microshift.md +121 -0
  185. aap_demo-2.0.0.dev0/docs/adr/006-storage-architecture.md +108 -0
  186. aap_demo-2.0.0.dev0/docs/adr/007-coredns-route-resolution.md +106 -0
  187. aap_demo-2.0.0.dev0/docs/adr/008-addon-system.md +124 -0
  188. aap_demo-2.0.0.dev0/docs/adr/009-aap-operator-olm-deployment.md +149 -0
  189. aap_demo-2.0.0.dev0/docs/adr/010-cross-platform-cli.md +119 -0
  190. aap_demo-2.0.0.dev0/docs/adr/011-mcp-server-addon.md +104 -0
  191. aap_demo-2.0.0.dev0/docs/adr/012-scc-and-pod-security.md +112 -0
  192. aap_demo-2.0.0.dev0/docs/adr/013-in-cluster-registry.md +115 -0
  193. aap_demo-2.0.0.dev0/docs/adr/014-testing-strategy.md +103 -0
  194. aap_demo-2.0.0.dev0/docs/adr/015-ingress-ca-user-store-trust.md +199 -0
  195. aap_demo-2.0.0.dev0/docs/adr/016-console-pah-authentication.md +379 -0
  196. aap_demo-2.0.0.dev0/docs/adr/017-ao-addon.md +184 -0
  197. aap_demo-2.0.0.dev0/docs/adr/018-product-demos-addon.md +460 -0
  198. aap_demo-2.0.0.dev0/docs/adr/019-apme-playbook-addon.md +425 -0
  199. aap_demo-2.0.0.dev0/docs/adr/019b-apme-aap-native-execution.md +479 -0
  200. aap_demo-2.0.0.dev0/docs/adr/020-full-openshift-support.md +400 -0
  201. aap_demo-2.0.0.dev0/docs/adr/021-local-cache-addon.md +285 -0
  202. aap_demo-2.0.0.dev0/docs/adr/022-apme-prebuilt-portal-hub.md +293 -0
  203. aap_demo-2.0.0.dev0/docs/adr/023-addon-auto-wiring.md +152 -0
  204. aap_demo-2.0.0.dev0/docs/adr/024-ollama-addon.md +161 -0
  205. aap_demo-2.0.0.dev0/docs/adr/025-portal-operator-cpu-preflight.md +165 -0
  206. aap_demo-2.0.0.dev0/docs/adr/026-fleet-addon.md +157 -0
  207. aap_demo-2.0.0.dev0/docs/adr/027-low-resource-ao-replicas.md +102 -0
  208. aap_demo-2.0.0.dev0/docs/adr/028-ao-agentic-model-binding.md +79 -0
  209. aap_demo-2.0.0.dev0/docs/adr/029-windows-feature-parity.md +123 -0
  210. aap_demo-2.0.0.dev0/docs/adr/030-windows-native-addon-execution.md +60 -0
  211. aap_demo-2.0.0.dev0/docs/adr/031-windows-git-bash-wrapper.md +62 -0
  212. aap_demo-2.0.0.dev0/docs/adr/README.md +98 -0
  213. aap_demo-2.0.0.dev0/docs/collection-authentication.md +299 -0
  214. aap_demo-2.0.0.dev0/docs/environment-comparison.md +144 -0
  215. aap_demo-2.0.0.dev0/docs/plans/windows-feature-parity.md +103 -0
  216. aap_demo-2.0.0.dev0/docs/plans/windows-git-bash-wrapper.md +34 -0
  217. aap_demo-2.0.0.dev0/docs/plans/windows-native-addon-port.md +33 -0
  218. aap_demo-2.0.0.dev0/images/Containerfile.vm +123 -0
  219. aap_demo-2.0.0.dev0/images/config/microshift-config.yaml +5 -0
  220. aap_demo-2.0.0.dev0/images/config/policy.json +16 -0
  221. aap_demo-2.0.0.dev0/includes/aap-demo-notice.sh +43 -0
  222. aap_demo-2.0.0.dev0/includes/aap-demo-paths.sh +29 -0
  223. aap_demo-2.0.0.dev0/includes/aap-demo-version.sh +54 -0
  224. aap_demo-2.0.0.dev0/includes/aap-readiness.sh +20 -0
  225. aap_demo-2.0.0.dev0/includes/addon-wire.sh +1273 -0
  226. aap_demo-2.0.0.dev0/includes/ao-llm.sh +247 -0
  227. aap_demo-2.0.0.dev0/includes/crc-create.sh +810 -0
  228. aap_demo-2.0.0.dev0/includes/galaxy-auth.sh +231 -0
  229. aap_demo-2.0.0.dev0/includes/infra-api.sh +95 -0
  230. aap_demo-2.0.0.dev0/includes/infra-crc.sh +211 -0
  231. aap_demo-2.0.0.dev0/includes/ingress-ca-trust.sh +533 -0
  232. aap_demo-2.0.0.dev0/includes/json-utils.sh +62 -0
  233. aap_demo-2.0.0.dev0/includes/olm-catalog-signature.sh +367 -0
  234. aap_demo-2.0.0.dev0/includes/persistent-crio-store.sh +351 -0
  235. aap_demo-2.0.0.dev0/includes/temp-swap.sh +231 -0
  236. aap_demo-2.0.0.dev0/install.sh +279 -0
  237. aap_demo-2.0.0.dev0/lint.mk +90 -0
  238. aap_demo-2.0.0.dev0/powershell/README.md +330 -0
  239. aap_demo-2.0.0.dev0/powershell/aap-demo.ps1 +430 -0
  240. aap_demo-2.0.0.dev0/powershell/install.ps1 +260 -0
  241. aap_demo-2.0.0.dev0/powershell/native/AapDemo.psm1 +105 -0
  242. aap_demo-2.0.0.dev0/powershell/native/Private/Addons.ps1 +199 -0
  243. aap_demo-2.0.0.dev0/powershell/native/Private/Collections.ps1 +838 -0
  244. aap_demo-2.0.0.dev0/powershell/native/Private/Commands.ps1 +581 -0
  245. aap_demo-2.0.0.dev0/powershell/native/Private/Create.ps1 +215 -0
  246. aap_demo-2.0.0.dev0/powershell/native/Private/Deploy.ps1 +165 -0
  247. aap_demo-2.0.0.dev0/powershell/native/Private/Diagnose.ps1 +323 -0
  248. aap_demo-2.0.0.dev0/powershell/native/Private/Helpers.ps1 +1623 -0
  249. aap_demo-2.0.0.dev0/powershell/native/Private/NativeAddons.ps1 +245 -0
  250. aap_demo-2.0.0.dev0/powershell/native/Private/NativeAo.ps1 +360 -0
  251. aap_demo-2.0.0.dev0/powershell/native/Private/NativeAoWire.ps1 +298 -0
  252. aap_demo-2.0.0.dev0/powershell/native/Private/NativeProcess.ps1 +77 -0
  253. aap_demo-2.0.0.dev0/powershell/native/Private/Portal.ps1 +1545 -0
  254. aap_demo-2.0.0.dev0/powershell/native/Private/Prerequisites.ps1 +68 -0
  255. aap_demo-2.0.0.dev0/powershell/native/Private/Status.ps1 +191 -0
  256. aap_demo-2.0.0.dev0/powershell/native/Private/Watch.ps1 +143 -0
  257. aap_demo-2.0.0.dev0/pyproject.toml +99 -0
  258. aap_demo-2.0.0.dev0/requirements.yml +8 -0
  259. aap_demo-2.0.0.dev0/scripts/README.md +104 -0
  260. aap_demo-2.0.0.dev0/scripts/aap-demo-completion.bash +60 -0
  261. aap_demo-2.0.0.dev0/scripts/aap-demo-completion.zsh +57 -0
  262. aap_demo-2.0.0.dev0/scripts/check-version-bump.sh +152 -0
  263. aap_demo-2.0.0.dev0/scripts/enable-temp-swap.sh +54 -0
  264. aap_demo-2.0.0.dev0/scripts/local-prereq.sh +62 -0
  265. aap_demo-2.0.0.dev0/scripts/multi-host-test.ps1 +1118 -0
  266. aap_demo-2.0.0.dev0/scripts/preflight-checks.sh +120 -0
  267. aap_demo-2.0.0.dev0/scripts/require-tool.sh +17 -0
  268. aap_demo-2.0.0.dev0/scripts/setup-linting.sh +324 -0
  269. aap_demo-2.0.0.dev0/scripts/test-temp-swap-flow.sh +42 -0
  270. aap_demo-2.0.0.dev0/scripts/watch-aap.sh +225 -0
  271. aap_demo-2.0.0.dev0/src/aap_demo/__init__.py +6 -0
  272. aap_demo-2.0.0.dev0/src/aap_demo/__main__.py +10 -0
  273. aap_demo-2.0.0.dev0/src/aap_demo/cli/__init__.py +0 -0
  274. aap_demo-2.0.0.dev0/src/aap_demo/cli/_schema_args.py +137 -0
  275. aap_demo-2.0.0.dev0/src/aap_demo/cli/addons.py +21 -0
  276. aap_demo-2.0.0.dev0/src/aap_demo/cli/completion.py +16 -0
  277. aap_demo-2.0.0.dev0/src/aap_demo/cli/day2.py +17 -0
  278. aap_demo-2.0.0.dev0/src/aap_demo/cli/gui.py +12 -0
  279. aap_demo-2.0.0.dev0/src/aap_demo/cli/lifecycle.py +156 -0
  280. aap_demo-2.0.0.dev0/src/aap_demo/cli/main.py +565 -0
  281. aap_demo-2.0.0.dev0/src/aap_demo/cli/observe.py +68 -0
  282. aap_demo-2.0.0.dev0/src/aap_demo/cli/ops.py +378 -0
  283. aap_demo-2.0.0.dev0/src/aap_demo/cluster/__init__.py +3 -0
  284. aap_demo-2.0.0.dev0/src/aap_demo/cluster/aap.py +907 -0
  285. aap_demo-2.0.0.dev0/src/aap_demo/cluster/bootstrap.py +662 -0
  286. aap_demo-2.0.0.dev0/src/aap_demo/cluster/catalog_signature.py +575 -0
  287. aap_demo-2.0.0.dev0/src/aap_demo/cluster/coredns.py +337 -0
  288. aap_demo-2.0.0.dev0/src/aap_demo/cluster/deploy.py +369 -0
  289. aap_demo-2.0.0.dev0/src/aap_demo/cluster/ingress_ca.py +316 -0
  290. aap_demo-2.0.0.dev0/src/aap_demo/cluster/kubeconfig.py +190 -0
  291. aap_demo-2.0.0.dev0/src/aap_demo/cluster/namespace.py +136 -0
  292. aap_demo-2.0.0.dev0/src/aap_demo/cluster/olm.py +276 -0
  293. aap_demo-2.0.0.dev0/src/aap_demo/cluster/preflight.py +134 -0
  294. aap_demo-2.0.0.dev0/src/aap_demo/cluster/pull_secret.py +380 -0
  295. aap_demo-2.0.0.dev0/src/aap_demo/cluster/runtime.py +324 -0
  296. aap_demo-2.0.0.dev0/src/aap_demo/cluster/scc.py +174 -0
  297. aap_demo-2.0.0.dev0/src/aap_demo/cluster/status.py +582 -0
  298. aap_demo-2.0.0.dev0/src/aap_demo/cluster/storage.py +73 -0
  299. aap_demo-2.0.0.dev0/src/aap_demo/core/__init__.py +0 -0
  300. aap_demo-2.0.0.dev0/src/aap_demo/core/bash_v1.py +171 -0
  301. aap_demo-2.0.0.dev0/src/aap_demo/core/config.py +219 -0
  302. aap_demo-2.0.0.dev0/src/aap_demo/core/console.py +907 -0
  303. aap_demo-2.0.0.dev0/src/aap_demo/core/context.py +65 -0
  304. aap_demo-2.0.0.dev0/src/aap_demo/core/errors.py +84 -0
  305. aap_demo-2.0.0.dev0/src/aap_demo/core/events.py +135 -0
  306. aap_demo-2.0.0.dev0/src/aap_demo/core/migration.py +369 -0
  307. aap_demo-2.0.0.dev0/src/aap_demo/core/output.py +43 -0
  308. aap_demo-2.0.0.dev0/src/aap_demo/core/paths.py +173 -0
  309. aap_demo-2.0.0.dev0/src/aap_demo/core/prompts.py +51 -0
  310. aap_demo-2.0.0.dev0/src/aap_demo/core/schema.py +164 -0
  311. aap_demo-2.0.0.dev0/src/aap_demo/core/secrets.py +221 -0
  312. aap_demo-2.0.0.dev0/src/aap_demo/core/version.py +101 -0
  313. aap_demo-2.0.0.dev0/src/aap_demo/core/waiting.py +89 -0
  314. aap_demo-2.0.0.dev0/src/aap_demo/data/__init__.py +27 -0
  315. aap_demo-2.0.0.dev0/src/aap_demo/data/crc-release +1 -0
  316. aap_demo-2.0.0.dev0/src/aap_demo/data/crs/__init__.py +1 -0
  317. aap_demo-2.0.0.dev0/src/aap_demo/data/crs/aap-controller-eda.yaml +16 -0
  318. aap_demo-2.0.0.dev0/src/aap_demo/data/crs/aap-controller.yaml +16 -0
  319. aap_demo-2.0.0.dev0/src/aap_demo/data/crs/aap-minimal-noingress.yaml +63 -0
  320. aap_demo-2.0.0.dev0/src/aap_demo/data/crs/aap-minimal-rwx.yaml +21 -0
  321. aap_demo-2.0.0.dev0/src/aap_demo/data/crs/aap-minimal.yaml +48 -0
  322. aap_demo-2.0.0.dev0/src/aap_demo/data/manifests/__init__.py +1 -0
  323. aap_demo-2.0.0.dev0/src/aap_demo/data/manifests/aap-storage-pvcs.yaml +31 -0
  324. aap_demo-2.0.0.dev0/src/aap_demo/data/manifests/nfs-provisioner.yaml +113 -0
  325. aap_demo-2.0.0.dev0/src/aap_demo/data/manifests/nfs-server.yaml +76 -0
  326. aap_demo-2.0.0.dev0/src/aap_demo/data/olm/__init__.py +1 -0
  327. aap_demo-2.0.0.dev0/src/aap_demo/data/olm/catalogsource.yaml +27 -0
  328. aap_demo-2.0.0.dev0/src/aap_demo/data/olm/operatorgroup.yaml +15 -0
  329. aap_demo-2.0.0.dev0/src/aap_demo/data/olm/subscription.yaml +18 -0
  330. aap_demo-2.0.0.dev0/src/aap_demo/data/schema/__init__.py +0 -0
  331. aap_demo-2.0.0.dev0/src/aap_demo/data/schema/addons.yaml +30 -0
  332. aap_demo-2.0.0.dev0/src/aap_demo/data/schema/core.yaml +59 -0
  333. aap_demo-2.0.0.dev0/src/aap_demo/data/schema/crc.yaml +78 -0
  334. aap_demo-2.0.0.dev0/src/aap_demo/data/schema/deploy.yaml +74 -0
  335. aap_demo-2.0.0.dev0/src/aap_demo/data/schema/gui.yaml +52 -0
  336. aap_demo-2.0.0.dev0/src/aap_demo/data/schema/playbooks.yaml +88 -0
  337. aap_demo-2.0.0.dev0/src/aap_demo/data/schema/secrets.yaml +19 -0
  338. aap_demo-2.0.0.dev0/src/aap_demo/data/schema/trust.yaml +28 -0
  339. aap_demo-2.0.0.dev0/src/aap_demo/diagnostics/__init__.py +3 -0
  340. aap_demo-2.0.0.dev0/src/aap_demo/diagnostics/checks.py +388 -0
  341. aap_demo-2.0.0.dev0/src/aap_demo/diagnostics/report.py +55 -0
  342. aap_demo-2.0.0.dev0/src/aap_demo/exec/__init__.py +0 -0
  343. aap_demo-2.0.0.dev0/src/aap_demo/exec/kubectl.py +65 -0
  344. aap_demo-2.0.0.dev0/src/aap_demo/exec/oc.py +58 -0
  345. aap_demo-2.0.0.dev0/src/aap_demo/exec/operator_sdk.py +140 -0
  346. aap_demo-2.0.0.dev0/src/aap_demo/exec/runner.py +366 -0
  347. aap_demo-2.0.0.dev0/src/aap_demo/exec/ssh.py +152 -0
  348. aap_demo-2.0.0.dev0/src/aap_demo/infra/__init__.py +9 -0
  349. aap_demo-2.0.0.dev0/src/aap_demo/infra/crc.py +445 -0
  350. aap_demo-2.0.0.dev0/src/aap_demo/infra/crc_install.py +280 -0
  351. aap_demo-2.0.0.dev0/test/README.md +175 -0
  352. aap_demo-2.0.0.dev0/test/test-aap-readiness.sh +78 -0
  353. aap_demo-2.0.0.dev0/test/test-ao-admin-password.sh +117 -0
  354. aap_demo-2.0.0.dev0/test/test-ao-catalog-source.sh +115 -0
  355. aap_demo-2.0.0.dev0/test/test-ao-enable-provider.sh +129 -0
  356. aap_demo-2.0.0.dev0/test/test-ao-import-demos.py +169 -0
  357. aap_demo-2.0.0.dev0/test/test-ao-install-plan-approval.sh +84 -0
  358. aap_demo-2.0.0.dev0/test/test-ao-llm-provider.sh +97 -0
  359. aap_demo-2.0.0.dev0/test/test-ao-llm-wiring.sh +216 -0
  360. aap_demo-2.0.0.dev0/test/test-ao-llm-workflow-binding.sh +86 -0
  361. aap_demo-2.0.0.dev0/test/test-ao-mcp-integration.sh +20 -0
  362. aap_demo-2.0.0.dev0/test/test-ao-olm-approval.sh +20 -0
  363. aap_demo-2.0.0.dev0/test/test-ao-operator-subscription.sh +23 -0
  364. aap_demo-2.0.0.dev0/test/test-ao-replica-profile.sh +90 -0
  365. aap_demo-2.0.0.dev0/test/test-ao-scc.sh +64 -0
  366. aap_demo-2.0.0.dev0/test/test-cli-parsing.sh +21 -0
  367. aap_demo-2.0.0.dev0/test/test-core-commands.sh +252 -0
  368. aap_demo-2.0.0.dev0/test/test-crc-create-linux-does-not-require-windows-daemon.sh +77 -0
  369. aap_demo-2.0.0.dev0/test/test-crc-create-stability.sh +74 -0
  370. aap_demo-2.0.0.dev0/test/test-crc-create-windows-daemon-setup.sh +68 -0
  371. aap_demo-2.0.0.dev0/test/test-crc-kubectl-fallback.sh +12 -0
  372. aap_demo-2.0.0.dev0/test/test-crc-resource-prompt-condition.sh +64 -0
  373. aap_demo-2.0.0.dev0/test/test-crc-resource-prompt.sh +22 -0
  374. aap_demo-2.0.0.dev0/test/test-crc-version-check.sh +227 -0
  375. aap_demo-2.0.0.dev0/test/test-deploy-cache-order.sh +44 -0
  376. aap_demo-2.0.0.dev0/test/test-deploy-cache-skip.sh +16 -0
  377. aap_demo-2.0.0.dev0/test/test-destroy-invalid-state.sh +100 -0
  378. aap_demo-2.0.0.dev0/test/test-infra-crc-status.sh +44 -0
  379. aap_demo-2.0.0.dev0/test/test-ingress-ca-export.sh +121 -0
  380. aap_demo-2.0.0.dev0/test/test-install.sh +22 -0
  381. aap_demo-2.0.0.dev0/test/test-json-utils.sh +23 -0
  382. aap_demo-2.0.0.dev0/test/test-kubectl-child-fallback.sh +12 -0
  383. aap_demo-2.0.0.dev0/test/test-local-cache.sh +231 -0
  384. aap_demo-2.0.0.dev0/test/test-mcp-rollout-timeout.sh +20 -0
  385. aap_demo-2.0.0.dev0/test/test-nfs-capacity-diagnostics.sh +18 -0
  386. aap_demo-2.0.0.dev0/test/test-nfs-storage-size.sh +21 -0
  387. aap_demo-2.0.0.dev0/test/test-ollama.sh +260 -0
  388. aap_demo-2.0.0.dev0/test/test-olm-windows-gitbash.sh +14 -0
  389. aap_demo-2.0.0.dev0/test/test-persistent-crio-store.sh +53 -0
  390. aap_demo-2.0.0.dev0/test/test-portal-helm.sh +112 -0
  391. aap_demo-2.0.0.dev0/test/test-portal-operator.sh +112 -0
  392. aap_demo-2.0.0.dev0/test/test-powershell-crc-status.ps1 +44 -0
  393. aap_demo-2.0.0.dev0/test/test-powershell-deploy-prerequisites.ps1 +55 -0
  394. aap_demo-2.0.0.dev0/test/test-powershell-git-bash-addon.ps1 +84 -0
  395. aap_demo-2.0.0.dev0/test/test-powershell-git-bash-interactive.ps1 +72 -0
  396. aap_demo-2.0.0.dev0/test/test-powershell-installer-launcher.ps1 +18 -0
  397. aap_demo-2.0.0.dev0/test/test-powershell-native-addons.ps1 +55 -0
  398. aap_demo-2.0.0.dev0/test/test-powershell-parity.ps1 +60 -0
  399. aap_demo-2.0.0.dev0/test/test-powershell-portal-host-alias.ps1 +29 -0
  400. aap_demo-2.0.0.dev0/test/test-product-demos-api.sh +162 -0
  401. aap_demo-2.0.0.dev0/test/test-product-demos-overlay.sh +35 -0
  402. aap_demo-2.0.0.dev0/test/test-product-demos-project-sync.sh +29 -0
  403. aap_demo-2.0.0.dev0/test/test-provision-aap-demos.py +74 -0
  404. aap_demo-2.0.0.dev0/test/test-windows-deferred-addons.sh +14 -0
  405. aap_demo-2.0.0.dev0/test/test-windows-ingress-ca.sh +22 -0
  406. aap_demo-2.0.0.dev0/test/test-windows-jq-prerequisite.sh +24 -0
  407. aap_demo-2.0.0.dev0/test/test-windows-python-prerequisite.sh +28 -0
  408. aap_demo-2.0.0.dev0/tests/conftest.py +70 -0
  409. aap_demo-2.0.0.dev0/tests/fixtures/crc/status_running.json +11 -0
  410. aap_demo-2.0.0.dev0/tests/fixtures/crc/status_stopped.json +11 -0
  411. aap_demo-2.0.0.dev0/tests/fixtures/golden/aap-storage-pvcs.aap-operator.aap.yaml +31 -0
  412. aap_demo-2.0.0.dev0/tests/fixtures/golden/catalogsource.aap-operator.4.22.yaml +27 -0
  413. aap_demo-2.0.0.dev0/tests/fixtures/golden/cr.controller-eda.aap-operator.yaml +16 -0
  414. aap_demo-2.0.0.dev0/tests/fixtures/golden/cr.controller.aap-operator.yaml +16 -0
  415. aap_demo-2.0.0.dev0/tests/fixtures/golden/cr.minimal-noingress.public.yaml +63 -0
  416. aap_demo-2.0.0.dev0/tests/fixtures/golden/cr.minimal-rwx.aap-operator.yaml +22 -0
  417. aap_demo-2.0.0.dev0/tests/fixtures/golden/cr.minimal.aap-operator.yaml +49 -0
  418. aap_demo-2.0.0.dev0/tests/fixtures/golden/operatorgroup.aap-operator.yaml +15 -0
  419. aap_demo-2.0.0.dev0/tests/fixtures/golden/subscription.aap-operator.stable-2.6.BUGGY.yaml +18 -0
  420. aap_demo-2.0.0.dev0/tests/fixtures/golden/subscription.aap-operator.stable-2.7.yaml +18 -0
  421. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/addons_only/.aap-demo/config +1 -0
  422. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/empty_config/.aap-demo/config +0 -0
  423. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/full/.aap-demo/atf-vault-password +1 -0
  424. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/full/.aap-demo/config +10 -0
  425. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/full/.aap-demo/crc-ingress-ca.crt +4 -0
  426. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/full/.aap-demo/galaxy-token +1 -0
  427. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/full/.aap-demo/kubeconfig.microshift +1 -0
  428. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/full/.aap-demo/local-cache/microshift/image.tar +1 -0
  429. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/full/.aap-demo/pah-token +1 -0
  430. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/full/.aap-demo/pull-secret.txt +1 -0
  431. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/no_config/.aap-demo/pull-secret.txt +1 -0
  432. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/partial/.aap-demo/config +2 -0
  433. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/partial/.aap-demo/galaxy-token +1 -0
  434. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/partial/.aap-demo/kubeconfig.microshift +1 -0
  435. aap_demo-2.0.0.dev0/tests/fixtures/legacy_home/retired_addons/.aap-demo/config +2 -0
  436. aap_demo-2.0.0.dev0/tests/integration/__init__.py +0 -0
  437. aap_demo-2.0.0.dev0/tests/integration/conftest.py +84 -0
  438. aap_demo-2.0.0.dev0/tests/integration/test_deploy_live.py +255 -0
  439. aap_demo-2.0.0.dev0/tests/unit/test_bash_v1.py +153 -0
  440. aap_demo-2.0.0.dev0/tests/unit/test_bootstrap.py +387 -0
  441. aap_demo-2.0.0.dev0/tests/unit/test_catalog_signature.py +377 -0
  442. aap_demo-2.0.0.dev0/tests/unit/test_cli_observe.py +165 -0
  443. aap_demo-2.0.0.dev0/tests/unit/test_cli_surface.py +260 -0
  444. aap_demo-2.0.0.dev0/tests/unit/test_cluster_aap.py +678 -0
  445. aap_demo-2.0.0.dev0/tests/unit/test_cluster_deploy.py +610 -0
  446. aap_demo-2.0.0.dev0/tests/unit/test_cluster_kubeconfig.py +227 -0
  447. aap_demo-2.0.0.dev0/tests/unit/test_cluster_namespace_scc.py +411 -0
  448. aap_demo-2.0.0.dev0/tests/unit/test_cluster_olm.py +230 -0
  449. aap_demo-2.0.0.dev0/tests/unit/test_cluster_preflight.py +263 -0
  450. aap_demo-2.0.0.dev0/tests/unit/test_cluster_status.py +407 -0
  451. aap_demo-2.0.0.dev0/tests/unit/test_config_store.py +127 -0
  452. aap_demo-2.0.0.dev0/tests/unit/test_console_report.py +99 -0
  453. aap_demo-2.0.0.dev0/tests/unit/test_console_tasks.py +353 -0
  454. aap_demo-2.0.0.dev0/tests/unit/test_crc_install.py +98 -0
  455. aap_demo-2.0.0.dev0/tests/unit/test_diagnostics_checks.py +321 -0
  456. aap_demo-2.0.0.dev0/tests/unit/test_events.py +103 -0
  457. aap_demo-2.0.0.dev0/tests/unit/test_exec_ssh.py +183 -0
  458. aap_demo-2.0.0.dev0/tests/unit/test_infra_crc.py +164 -0
  459. aap_demo-2.0.0.dev0/tests/unit/test_ingress_ca.py +212 -0
  460. aap_demo-2.0.0.dev0/tests/unit/test_migration.py +308 -0
  461. aap_demo-2.0.0.dev0/tests/unit/test_ops_redhat_status.py +120 -0
  462. aap_demo-2.0.0.dev0/tests/unit/test_ops_ssh_kubeconfig.py +208 -0
  463. aap_demo-2.0.0.dev0/tests/unit/test_paths.py +134 -0
  464. aap_demo-2.0.0.dev0/tests/unit/test_pull_secret.py +62 -0
  465. aap_demo-2.0.0.dev0/tests/unit/test_render_golden.py +184 -0
  466. aap_demo-2.0.0.dev0/tests/unit/test_runner.py +140 -0
  467. aap_demo-2.0.0.dev0/tests/unit/test_runtime.py +120 -0
  468. aap_demo-2.0.0.dev0/tests/unit/test_schema_parity.py +180 -0
  469. aap_demo-2.0.0.dev0/tests/unit/test_secrets.py +242 -0
  470. aap_demo-2.0.0.dev0/tests/unit/test_waiting.py +110 -0
  471. aap_demo-2.0.0.dev0/tests/unit/test_yaml_loader.py +69 -0
@@ -0,0 +1,39 @@
1
+ ---
2
+ # Ansible-lint configuration for aap-demo
3
+ # https://ansible.readthedocs.io/projects/lint/
4
+
5
+ profile: production
6
+
7
+ exclude_paths:
8
+ - .git/
9
+ - .github/
10
+ - .serena/
11
+ - test/
12
+ - config/
13
+ - includes/
14
+
15
+ # Skip specific rules
16
+ skip_list:
17
+ - yaml[line-length] # Line too long (handled by yamllint)
18
+ - name[casing] # Task names don't follow capitalization
19
+ - role-name # Role name doesn't match requirements
20
+ - yaml[document-start] # Allow '---' at the start of YAML files
21
+
22
+ # Warn only
23
+ warn_list:
24
+ - experimental
25
+ - no-changed-when
26
+ - command-instead-of-module
27
+
28
+ # Enable offline mode (no external requirements)
29
+ offline: true
30
+
31
+ # Use default rules with modifications
32
+ use_default_rules: true
33
+
34
+ # Mock modules and roles (if needed)
35
+ mock_modules: []
36
+ mock_roles: []
37
+
38
+ # Verbosity
39
+ verbosity: 1
@@ -0,0 +1,98 @@
1
+ # AAP Demo — AI Assistant Context
2
+
3
+ ## What is aap-demo?
4
+
5
+ aap-demo is a tool for deploying Ansible Automation Platform (AAP) 2.7 to OpenShift Local (MicroShift) for development and testing.
6
+
7
+ ## Key Commands
8
+
9
+ ```
10
+ aap-demo create # Create local MicroShift cluster
11
+ aap-demo deploy # Deploy AAP 2.7
12
+ aap-demo status # Show cluster status, routes, credentials
13
+ aap-demo diagnose # Quick health check (cluster, storage, SCCs, pods)
14
+ aap-demo diagnose --ai # Health check + AI-powered root cause analysis (requires claude CLI)
15
+ aap-demo must-gather # Collect full diagnostics for troubleshooting
16
+ aap-demo idle true # Scale down AAP to save resources (operator deploys only)
17
+ aap-demo idle false # Scale back up
18
+ aap-demo ssh # SSH into cluster node
19
+ aap-demo stop / start # Stop/start cluster
20
+ aap-demo destroy # Delete cluster
21
+ aap-demo help # Full command reference
22
+ ```
23
+
24
+ ## Architecture
25
+
26
+ - **OpenShift Local**: OpenShift Local VM running MicroShift, managed by `crc` CLI
27
+ - **Storage**: LVMS (topolvm-provisioner) for RWO, in-cluster NFS server for RWX (nfs-local-rwx)
28
+ - **OLM**: Installed via operator-sdk for operator lifecycle management
29
+ - **Namespace**: `aap-operator` (default), configurable via `NAMESPACE=`
30
+
31
+ ## Common Issues and Fixes
32
+
33
+ ### Pod creation failures (SCC)
34
+ **Symptom**: Pods fail with "unable to validate against any security context constraint"
35
+ **Cause**: Service accounts missing anyuid/privileged SCCs
36
+ **Fix**:
37
+ ```bash
38
+ oc adm policy add-scc-to-group anyuid system:serviceaccounts:aap-operator
39
+ oc adm policy add-scc-to-group privileged system:serviceaccounts:aap-operator
40
+ ```
41
+
42
+ ### PVC pending (hub file storage)
43
+ **Symptom**: `aap-hub-file-storage` PVC stuck in Pending
44
+ **Cause**: Missing nfs-local-rwx StorageClass or NFS server not running
45
+ **Fix**: Check `kubectl get sc` for nfs-local-rwx. If missing, re-run `aap-demo create`. If present, check NFS server: `kubectl get pods -n nfs-storage`
46
+
47
+ ### CatalogSource not ready (latest deploys)
48
+ **Symptom**: CatalogSource stuck in TRANSIENT_FAILURE
49
+ **Cause**: Catalog pod can't start due to SCC or pull secret issues
50
+ **Fix**: Check `kubectl get pods -n aap-operator` for catalog pod. Verify pull secret exists: `kubectl get secret redhat-operators-pull-secret -n aap-operator`
51
+
52
+ ### Gateway CrashLoopBackOff
53
+ **Symptom**: Gateway pod crashes with EACCES on socket
54
+ **Cause**: Startup ordering — gateway starts before dependencies are ready
55
+ **Fix**: Usually resolves after operator reconciliation. If persistent, delete the pod: `kubectl delete pod -l app.kubernetes.io/name=gateway -n aap-operator`
56
+
57
+ ### DNS resolution failures
58
+ **Symptom**: Pods can't resolve nip.io routes or cluster services
59
+ **Cause**: CoreDNS config not persisted after CRC restart
60
+ **Fix**: `aap-demo start` (re-applies CoreDNS config) or `kubectl rollout restart daemonset/dns-default -n openshift-dns`
61
+
62
+ ### Disk space
63
+ **Symptom**: Pods evicted or images fail to pull
64
+ **Fix**: `aap-demo ssh` then `sudo crictl rmi --prune` to clean unused images
65
+
66
+ ## File Structure
67
+
68
+ ```
69
+ aap-demo.sh # Main CLI script
70
+ includes/
71
+ crc-create.sh # OpenShift Local cluster creation (nip.io, NFS, metrics-server)
72
+ config/
73
+ crs/ # AAP Custom Resource templates
74
+ aap-minimal.yaml # Default CR (RWX via nfs-local-rwx)
75
+ manifests/
76
+ nfs-server.yaml # In-cluster NFS server
77
+ nfs-provisioner.yaml # NFS subdir provisioner (__NFS_SERVER_IP__ template)
78
+ olm/ # OLM subscription and catalog
79
+ addons/ # Optional addons (console, registry, mcp-server, etc.)
80
+ ansible/ # Ansible playbook alternative
81
+ ```
82
+
83
+ ## Key Technical Details
84
+
85
+ - **SCCs**: Granted at namespace group level (`system:serviceaccounts:$NAMESPACE`) not per-SA
86
+ - **nfs-local-rwx**: In-cluster NFS server backed by topolvm PVC. Provisioner manifest uses `__NFS_SERVER_IP__` placeholder resolved at deploy time because kubelet can't resolve cluster DNS for NFS mounts on MicroShift
87
+ - **idle_aap**: Standard AAP CR field — patches `spec.idle_aap: true/false` to scale all components via the gateway operator
88
+ - **KUBECONFIG**: CRC uses `~/.crc/machines/crc/kubeconfig`
89
+ - **Config file**: `~/.aap-demo/config` stores INFRA type, CRC preset, addons
90
+
91
+ ## When Helping Users
92
+
93
+ 1. Run `aap-demo diagnose` first to identify obvious issues
94
+ 2. If diagnose shows failures, suggest the specific fix listed
95
+ 3. For complex issues, suggest `aap-demo diagnose --ai` for AI-powered root cause analysis
96
+ 4. If still unclear, run `aap-demo must-gather` to collect full diagnostics
97
+ 5. Check `aap-demo status` for routes and credentials
98
+ 6. For deployment issues, check operator logs: `kubectl logs -l app.kubernetes.io/managed-by=aap-gateway-operator -n aap-operator --tail=50`
@@ -0,0 +1,343 @@
1
+ ---
2
+ name: aap-demo
3
+ description: >
4
+ Manages AAP (Ansible Automation Platform) development environments on local
5
+ MicroShift clusters. Handles cluster lifecycle (create, deploy, destroy),
6
+ diagnostics, troubleshooting, and local validation. Activate when users want
7
+ to deploy AAP, check cluster health, fix deployment issues, run local tests,
8
+ or manage their aap-demo environment.
9
+ allowed-tools:
10
+ - Bash(aap-demo *)
11
+ - Bash(kubectl *)
12
+ - Bash(oc *)
13
+ argument-hint: "[command, question, or intent]"
14
+ ---
15
+
16
+ # aap-demo Skill
17
+
18
+ You manage AAP development environments using the `aap-demo` CLI. Delegate to
19
+ CLI commands — do not reimplement their logic.
20
+
21
+ ## SECURITY NOTICE — DEVELOPMENT ENVIRONMENT ONLY
22
+
23
+ **aap-demo is a LOCAL DEVELOPMENT tool and must NEVER be used in production.**
24
+
25
+ This environment includes characteristics specific to local development:
26
+
27
+ - **Self-signed certificates are trusted** in the MCP server addon using `NODE_EXTRA_CA_CERTS`
28
+ - **Router ClusterIP addresses** may become stale after cluster rebuild
29
+ - **All routes use localhost** (`127.0.0.1.nip.io`)
30
+
31
+ **DO NOT use aap-demo configurations or patterns in production environments.**
32
+
33
+ ## Commands Reference
34
+
35
+ | Intent | Command |
36
+ |--------|---------|
37
+ | Create cluster | `aap-demo create` |
38
+ | Deploy AAP 2.7 | `aap-demo deploy` |
39
+ | Check status & creds | `aap-demo status` |
40
+ | Health check | `aap-demo diagnose` |
41
+ | AI-powered diagnostics | `aap-demo diagnose --ai` |
42
+ | Collect full diagnostics | `aap-demo must-gather` |
43
+ | Scale down (save resources) | `aap-demo idle true` |
44
+ | Scale back up | `aap-demo idle false` |
45
+ | Remove AAP (keep cluster) | `aap-demo clean` |
46
+ | Destroy entire cluster | `aap-demo destroy` |
47
+ | Stop/start cluster | `aap-demo stop` / `aap-demo start` |
48
+ | SSH into cluster node | `aap-demo ssh` |
49
+ | Run local tests | `./test/test-core-commands.sh` and the focused scripts under `test/` |
50
+ | Enable addon | `aap-demo enable <name>` |
51
+ | Disable addon | `aap-demo disable <name>` |
52
+ | Destroy and rebuild from scratch | `aap-demo redeploy-all` |
53
+ | Show help | `aap-demo help` |
54
+
55
+ Available addons: olm, console, registry, mcp-server, devspaces, prometheus, portal, **ao** (Automation Orchestrator)
56
+
57
+ ## Portal Addon
58
+
59
+ Helm-based Self-Service Portal on OpenShift (`aap-demo enable portal`):
60
+
61
+ - Auto-detects cluster CPU (`amd64` vs `arm64`) and selects x86 or ARM image profile
62
+ - Namespace: `redhat-rhaap-portal`
63
+ - Architecture: see `docs/adr/002-portal-helm-deployment.md`
64
+
65
+ **Access**: `aap-demo status portal` for route URL. Sign in with AAP OAuth (admin credentials).
66
+
67
+ **Prerequisites**: AAP deployed, `registry.redhat.io` pull secret for OCI plugins.
68
+ Helm 3.10+ is installed automatically if missing.
69
+
70
+ ## Automation Orchestrator (`ao`) Addon
71
+
72
+ GA install via checked-in GitOps manifests (`aap-demo enable ao`):
73
+
74
+ - **Requires `mcp-server`** — enabled automatically; AO wiring registers both AAP and MCP integrations
75
+ - **No `aapctl` required** at install time — see [`addons/ao/README.md`](addons/ao/README.md)
76
+ - Namespace: `automation-orchestrator`
77
+ - AO operator OLM + catalog live in **app namespace** (not `aap-operator` — avoids MultipleOperatorGroupsFound)
78
+ - Default channel: `stable` (`AO_OPERATOR_CHANNEL=early-access` to override)
79
+ - Dev Postgres: CloudNativePG upstream manifest (not Red Hat supported)
80
+ - Force reinstall after password drift: `FORCE=1 aap-demo enable ao`
81
+
82
+ **Access**: `aap-demo status` or `kubectl get routes -n automation-orchestrator`. Admin password in `automation-orchestrator-initial-admin-password`.
83
+
84
+ ## Workflow
85
+
86
+ Before any command, run `aap-demo status` to understand current state. The standard
87
+ lifecycle is: `create` -> `deploy` -> use -> `idle`/`clean` -> `destroy`.
88
+
89
+ - Deploy auto-creates the cluster if needed — no need to run create first
90
+ - After deploy completes, run `aap-demo status` to show routes and credentials
91
+ - **Destructive operations** (clean, destroy, redeploy-all): always confirm with the user first
92
+ - Use `QUIET=true` prefix to skip interactive prompts when running non-interactively
93
+
94
+ ## Environment Awareness
95
+
96
+ Before suggesting commands, check the user's environment:
97
+
98
+ 1. Read `~/.aap-demo/config` to determine INFRA type (crc, minc, lab)
99
+ 2. Check `KUBECONFIG`:
100
+ - CRC: `~/.crc/machines/crc/kubeconfig`
101
+ - MINC: `~/.aap-demo/kubeconfig.microshift`
102
+ - Lab: user's own kubeconfig
103
+ 3. Run `aap-demo status` to see running deployments, namespaces, and pod counts
104
+
105
+ When the user has multiple AAP deployments (e.g., operator in `aap-operator` + aap-demo in
106
+ `aap27`), always clarify which deployment they mean before acting.
107
+
108
+ ## Pull Secret Management
109
+
110
+ Pull secrets are required for image pulls and live in `~/.aap-demo/`:
111
+ - `pull-secret.txt` or `pull-secret.json` (from console.redhat.com)
112
+
113
+ If image pulls fail with 403/unauthorized, check: # pragma: allowlist secret
114
+ 1. Correct pull secret exists in `~/.aap-demo/` # pragma: allowlist secret
115
+ 2. Pull secret is injected into the namespace: `kubectl get secret -n $NAMESPACE | grep pull` # pragma: allowlist secret
116
+ 3. ServiceAccount has imagePullSecrets: `kubectl get sa default -n $NAMESPACE -o yaml`
117
+
118
+ ## Diagnostics Loop
119
+
120
+ When troubleshooting:
121
+
122
+ 1. Run `aap-demo diagnose` — parse output for `✗` (fail) and `⚠` (warn) markers
123
+ 2. Apply the matching fix from the table below
124
+ 3. Re-run `aap-demo diagnose` to verify
125
+ 4. If issues persist after 2 attempts, run `aap-demo must-gather` for deeper analysis
126
+ 5. Check operator logs: `kubectl logs -l app.kubernetes.io/managed-by=aap-gateway-operator -n $NAMESPACE --tail=100`
127
+
128
+ ## Known Fixes
129
+
130
+ | Diagnose Output | Fix |
131
+ |-----------------|-----|
132
+ | SCC validation failure | `oc adm policy add-scc-to-group anyuid system:serviceaccounts:$NAMESPACE && oc adm policy add-scc-to-group privileged system:serviceaccounts:$NAMESPACE` |
133
+ | PVC pending (hub-file-storage) | Check `kubectl get sc nfs-local-rwx`. Missing: re-run `aap-demo create`. Present but pending: check NFS server `kubectl get pods -n nfs-storage` |
134
+ | CatalogSource TRANSIENT_FAILURE | DNS race condition. Check catalog pod: `kubectl get pods -n $NAMESPACE -l olm.catalogSource`. If pod is running but catalog stuck, restart catalog-operator: `kubectl rollout restart deployment/catalog-operator -n openshift-operator-lifecycle-manager`. Verify pull secret exists. |
135
+ | Gateway CrashLoopBackOff (EACCES) | Usually self-resolves after reconciliation. If persistent: `kubectl delete pod -l app.kubernetes.io/name=gateway -n $NAMESPACE` |
136
+ | DNS resolution failures | `aap-demo start` (re-applies CoreDNS config) or `kubectl rollout restart daemonset/dns-default -n openshift-dns`. Root cause: CoreDNS template plugin returns router ClusterIP directly for *.nip.io — if router IP changes after restart, CoreDNS config is stale. |
137
+ | AO: `base_url must not resolve to a private...` / `AAP_NOT_CONFIGURED` | CoreDNS rewrite missing so AO cannot resolve the AAP route. `aap-demo wire` (or `aap-demo enable ao` / `aap-demo start`) restores the rewrite and re-wires integrations. |
138
+ | Disk space / pod eviction | `aap-demo ssh` then `sudo crictl rmi --prune` |
139
+ | Pods stuck Pending (resources) | `kubectl describe node | grep -A 5 Allocated` — consider `aap-demo idle true` on other deployments |
140
+ | Stale pod mounts after crash | Restart kube-proxy and CoreDNS: `kubectl rollout restart daemonset/kube-proxy -n kube-proxy && kubectl rollout restart daemonset/dns-default -n openshift-dns`. Symptom: "transport endpoint is not connected" or "executable file not found" |
141
+ | ImagePullBackOff | Pull secret missing or incorrect. Needs `pull-secret.txt` for registry.redhat.io. Check `~/.aap-demo/` for correct file. |
142
+ | OLM not installed | `aap-demo enable olm` — MicroShift does not include OLM by default, it's installed during `aap-demo create` but may be missing on older setups |
143
+
144
+ ## Test Orchestration
145
+
146
+ - Run the non-destructive shell and Python tests under `test/` locally or via CI.
147
+ - Use `aap-demo diagnose` before investigating failures that require a live cluster.
148
+ - For deployment and addon changes, record live CRC lifecycle checks in the PR
149
+ Test Plan; the repository no longer bundles the obsolete internal ATF runner.
150
+
151
+ ## Post-Deploy Verification
152
+
153
+ After any deployment, verify health with this sequence:
154
+
155
+ 1. `aap-demo status` — check all pods are running, routes are accessible
156
+ 2. `aap-demo diagnose` — automated health checks
157
+ 3. If diagnose shows issues, apply fixes from the Known Fixes table
158
+ 4. For latest deployments, check AAP CR status: `kubectl get aap -n $NAMESPACE -o jsonpath='{.items[0].status.conditions}'`
159
+
160
+ The AAP CR goes through phases: Pending → Running → Successful. A deployment typically
161
+ takes 5-10 minutes. If stuck in Running for >15 minutes, check operator logs and diagnose.
162
+
163
+ ## AAP Interaction Tooling
164
+
165
+ **NEVER use awxkit for AAP operations.** awxkit causes:
166
+ - Inconsistent tooling across environments
167
+ - Python dependency conflicts
168
+ - Complex authentication setup
169
+ - Windows compatibility issues
170
+
171
+ ### Priority Order for AAP Interactions
172
+
173
+ Use the following tools in this order of preference:
174
+
175
+ #### 1. MCP Server (Preferred)
176
+
177
+ Check if `aap-mcp` MCP server is configured:
178
+
179
+ ```bash
180
+ # Check MCP server availability
181
+ aap-demo status | grep -i mcp
182
+ ```
183
+
184
+ If configured, use MCP tools for AAP operations:
185
+ - `aap-controller-*` tools for Controller operations
186
+ - `aap-eda-*` tools for Event-Driven Ansible
187
+ - `aap-hub-*` tools for Automation Hub
188
+
189
+ MCP provides typed, validated API interactions without authentication complexity.
190
+
191
+ #### 2. kubectl/oc for Operator Resources
192
+
193
+ For operator-deployed AAP, use kubectl/oc to manage AAP resources directly:
194
+
195
+ **Check AAP deployment status:**
196
+ ```bash
197
+ kubectl get aap -n aap-operator -o yaml
198
+ kubectl get aap -n aap-operator -o jsonpath='{.items[0].status.conditions}'
199
+ ```
200
+
201
+ **Get AAP credentials:**
202
+ ```bash
203
+ # Admin password
204
+ kubectl get secret aap-admin-password -n aap-operator -o jsonpath='{.data.password}' | base64 -d
205
+
206
+ # Database credentials
207
+ kubectl get secret aap-postgres-configuration -n aap-operator -o yaml
208
+ ```
209
+
210
+ **Get AAP routes:**
211
+ ```bash
212
+ kubectl get routes -n aap-operator
213
+ kubectl get route gateway -n aap-operator -o jsonpath='{.spec.host}'
214
+ ```
215
+
216
+ **Manage AAP components via CR:**
217
+ ```bash
218
+ # Scale down AAP (idle mode)
219
+ kubectl patch aap aap -n aap-operator --type=merge -p '{"spec":{"idle_aap":true}}'
220
+
221
+ # Scale back up
222
+ kubectl patch aap aap -n aap-operator --type=merge -p '{"spec":{"idle_aap":false}}'
223
+ ```
224
+
225
+ #### 3. Direct REST API via curl
226
+
227
+ For AAP gateway endpoints when kubectl is insufficient:
228
+
229
+ **Get authentication token:**
230
+ ```bash
231
+ # Extract admin password
232
+ ADMIN_PASSWORD=$(kubectl get secret aap-admin-password -n aap-operator -o jsonpath='{.data.password}' | base64 -d)
233
+
234
+ # Get gateway route
235
+ GATEWAY_HOST=$(kubectl get route gateway -n aap-operator -o jsonpath='{.spec.host}')
236
+
237
+ # Authenticate and get token
238
+ TOKEN=$(curl -sk -X POST "https://${GATEWAY_HOST}/api/gateway/v1/tokens/" \
239
+ -H "Content-Type: application/json" \
240
+ -d "{\"username\":\"admin\",\"password\":\"${ADMIN_PASSWORD}\"}" | jq -r '.token')
241
+ ```
242
+
243
+ **Common API operations:**
244
+
245
+ ```bash
246
+ # List organizations
247
+ curl -sk -H "Authorization: Bearer ${TOKEN}" \
248
+ "https://${GATEWAY_HOST}/api/controller/v2/organizations/"
249
+
250
+ # List job templates
251
+ curl -sk -H "Authorization: Bearer ${TOKEN}" \
252
+ "https://${GATEWAY_HOST}/api/controller/v2/job_templates/"
253
+
254
+ # Launch job template
255
+ curl -sk -X POST -H "Authorization: Bearer ${TOKEN}" \
256
+ -H "Content-Type: application/json" \
257
+ "https://${GATEWAY_HOST}/api/controller/v2/job_templates/${TEMPLATE_ID}/launch/" \
258
+ -d '{"extra_vars": "{}"}'
259
+
260
+ # Check job status
261
+ curl -sk -H "Authorization: Bearer ${TOKEN}" \
262
+ "https://${GATEWAY_HOST}/api/controller/v2/jobs/${JOB_ID}/"
263
+ ```
264
+
265
+ **EDA API examples:**
266
+
267
+ ```bash
268
+ # List activations
269
+ curl -sk -H "Authorization: Bearer ${TOKEN}" \
270
+ "https://${GATEWAY_HOST}/api/eda/v1/activations/"
271
+
272
+ # List rulebook activations
273
+ curl -sk -H "Authorization: Bearer ${TOKEN}" \
274
+ "https://${GATEWAY_HOST}/api/eda/v1/rulebook-activations/"
275
+ ```
276
+
277
+ **Hub API examples:**
278
+
279
+ ```bash
280
+ # List collections
281
+ curl -sk -H "Authorization: Bearer ${TOKEN}" \
282
+ "https://${GATEWAY_HOST}/api/galaxy/_ui/v1/collection-versions/"
283
+
284
+ # List execution environments
285
+ curl -sk -H "Authorization: Bearer ${TOKEN}" \
286
+ "https://${GATEWAY_HOST}/api/galaxy/pulp/api/v3/distributions/container/container/"
287
+ ```
288
+
289
+ #### 4. Ansible Modules (Last Resort)
290
+
291
+ Use Ansible modules only when kubectl/curl are insufficient for complex workflows:
292
+
293
+ ```yaml
294
+ # ansible.controller modules
295
+ - name: Create organization
296
+ ansible.controller.organization:
297
+ controller_host: "{{ gateway_host }}"
298
+ controller_username: admin
299
+ controller_password: "{{ admin_password }}"
300
+ name: "Demo Org"
301
+ state: present
302
+ validate_certs: false
303
+
304
+ # ansible.eda modules
305
+ - name: Create EDA project
306
+ ansible.eda.project:
307
+ controller_host: "{{ gateway_host }}"
308
+ controller_username: admin
309
+ controller_password: "{{ admin_password }}"
310
+ name: "Demo Project"
311
+ url: "https://github.com/example/repo.git"
312
+ state: present
313
+ validate_certs: false
314
+ ```
315
+
316
+ **When to use Ansible modules:**
317
+ - Complex multi-step AAP configuration workflows
318
+ - Idempotent configuration management
319
+ - Integration with existing Ansible playbooks
320
+ - When MCP/kubectl/curl would require excessive scripting
321
+
322
+ ### Authentication Best Practices
323
+
324
+ **For MCP:** Authentication is handled by the MCP server configuration — no manual auth required.
325
+
326
+ **For curl:** Always extract credentials from Kubernetes secrets, never hardcode. Use environment variables for tokens.
327
+
328
+ **For Ansible modules:** Use `controller_host`, `controller_username`, `controller_password` parameters. Set `validate_certs: false` for local development environments.
329
+
330
+ ## Key Details
331
+
332
+ - Default namespace: `aap-operator` (override with `NAMESPACE=<ns>`)
333
+ - CRC kubeconfig: `~/.crc/machines/crc/kubeconfig`
334
+ - Config file: `~/.aap-demo/config` (stores infra type, addons, preferences)
335
+ - Backends: CRC (macOS, recommended) uses a VM; MINC (Linux) uses a Podman container
336
+ - SCCs are granted at namespace group level, not per ServiceAccount
337
+ - NFS provisioner uses `__NFS_SERVER_IP__` placeholder resolved at deploy time
338
+ - MicroShift lacks `ingresses.config.openshift.io` API — route hosts use nip.io
339
+ - OLM is not built into MicroShift — installed via `operator-sdk olm install` during create
340
+ - Latest CatalogSource for **AAP** must be in `aap-operator` namespace (no `openshift-marketplace` on MicroShift)
341
+ - **AO addon** copies its own `redhat-operators` CatalogSource into `automation-orchestrator` (see ADR-017)
342
+ - Bundle unpack jobs need `privileged` SCC (not just `anyuid`) due to seccomp annotations
343
+ - `inotify` sysctl limits (`max_user_instances=2099999999`) are critical for operator performance