This is page 2 of 126. Use http://codebase.md/controlplaneio-fluxcd/flux-operator?lines=true&page={x} to view the full context.
# Directory Structure
```
├── .github
│ ├── actions
│ │ └── runner-cleanup
│ │ └── action.yml
│ ├── copilot-instructions.md
│ ├── dependabot.yaml
│ └── workflows
│ ├── actions-test.yaml
│ ├── e2e-olm.yaml
│ ├── preview.yaml
│ ├── push-manifests.yaml
│ ├── release.yaml
│ └── test.yaml
├── .gitignore
├── .golangci.yml
├── .goreleaser.yml
├── actions
│ └── setup
│ ├── action.yaml
│ └── README.md
├── AGENTS.md
├── api
│ └── v1
│ ├── common_types_test.go
│ ├── common_types.go
│ ├── fluxinstance_types.go
│ ├── fluxreport_types.go
│ ├── groupversion_info.go
│ ├── history_types_test.go
│ ├── history_types.go
│ ├── resourceset_types.go
│ ├── resourcesetinputprovider_types.go
│ ├── schedule_types.go
│ └── zz_generated.deepcopy.go
├── cmd
│ ├── cli
│ │ ├── build_instance.go
│ │ ├── build_resourceset_test.go
│ │ ├── build_resourceset.go
│ │ ├── build.go
│ │ ├── client.go
│ │ ├── completion_bash.go
│ │ ├── completion_fish.go
│ │ ├── completion_powershell.go
│ │ ├── completion_zsh.go
│ │ ├── completion.go
│ │ ├── create_secret_basicauth_test.go
│ │ ├── create_secret_basicauth.go
│ │ ├── create_secret_githubapp.go
│ │ ├── create_secret_proxy_test.go
│ │ ├── create_secret_proxy.go
│ │ ├── create_secret_registry_test.go
│ │ ├── create_secret_registry.go
│ │ ├── create_secret_sops_test.go
│ │ ├── create_secret_sops.go
│ │ ├── create_secret_ssh.go
│ │ ├── create_secret_tls.go
│ │ ├── create_secret.go
│ │ ├── create.go
│ │ ├── debug_web_cookie.go
│ │ ├── debug_web.go
│ │ ├── debug.go
│ │ ├── delete_inputprovider_test.go
│ │ ├── delete_inputprovider.go
│ │ ├── delete_instance_test.go
│ │ ├── delete_instance.go
│ │ ├── delete_resourceset_test.go
│ │ ├── delete_resourceset.go
│ │ ├── delete.go
│ │ ├── distro_decrypt_manifests_test.go
│ │ ├── distro_decrypt_manifests.go
│ │ ├── distro_decrypt_token_test.go
│ │ ├── distro_decrypt_token.go
│ │ ├── distro_decrypt.go
│ │ ├── distro_encrypt_manifests_test.go
│ │ ├── distro_encrypt_manifests.go
│ │ ├── distro_encrypt_token_test.go
│ │ ├── distro_encrypt_token.go
│ │ ├── distro_encrypt.go
│ │ ├── distro_keygen_enc_test.go
│ │ ├── distro_keygen_enc.go
│ │ ├── distro_keygen_sig_test.go
│ │ ├── distro_keygen_sig.go
│ │ ├── distro_keygen.go
│ │ ├── distro_revoke_license_key_test.go
│ │ ├── distro_revoke_license_key.go
│ │ ├── distro_revoke.go
│ │ ├── distro_sign_artifacts_test.go
│ │ ├── distro_sign_artifacts.go
│ │ ├── distro_sign_license_key_test.go
│ │ ├── distro_sign_license_key.go
│ │ ├── distro_sign_manifests_test.go
│ │ ├── distro_sign_manifests.go
│ │ ├── distro_sign.go
│ │ ├── distro_verify_artifacts_test.go
│ │ ├── distro_verify_artifacts.go
│ │ ├── distro_verify_license_key_test.go
│ │ ├── distro_verify_license_key.go
│ │ ├── distro_verify_manifests_test.go
│ │ ├── distro_verify_manifests.go
│ │ ├── distro_verify.go
│ │ ├── distro.go
│ │ ├── Dockerfile
│ │ ├── export_report_test.go
│ │ ├── export_report.go
│ │ ├── export_resource_test.go
│ │ ├── export_resource.go
│ │ ├── export.go
│ │ ├── get_inputprovider_test.go
│ │ ├── get_inputprovider.go
│ │ ├── get_instance.go
│ │ ├── get_resources.go
│ │ ├── get_resourceset_test.go
│ │ ├── get_resourceset.go
│ │ ├── get.go
│ │ ├── install.go
│ │ ├── main.go
│ │ ├── README.md
│ │ ├── reconcile_inputprovider.go
│ │ ├── reconcile_instance.go
│ │ ├── reconcile_resource.go
│ │ ├── reconcile_resources.go
│ │ ├── reconcile_resourceset.go
│ │ ├── reconcile.go
│ │ ├── resume_inputprovider.go
│ │ ├── resume_instance.go
│ │ ├── resume_resource.go
│ │ ├── resume_resourceset.go
│ │ ├── resume.go
│ │ ├── stats.go
│ │ ├── suite_test.go
│ │ ├── suspend_inputprovider.go
│ │ ├── suspend_instance.go
│ │ ├── suspend_resource.go
│ │ ├── suspend_resourceset.go
│ │ ├── suspend.go
│ │ ├── testdata
│ │ │ └── build_resourceset
│ │ │ ├── golden-labeled.yaml
│ │ │ ├── golden-named.yaml
│ │ │ ├── golden-permuted.yaml
│ │ │ ├── golden.yaml
│ │ │ ├── inputs.yaml
│ │ │ ├── rset-standalone.yaml
│ │ │ ├── rset-with-rsip-labeled.yaml
│ │ │ ├── rset-with-rsip-named.yaml
│ │ │ ├── rset-with-rsip-permuted.yaml
│ │ │ ├── rset-with-rsip.yaml
│ │ │ ├── rsip-labeled.yaml
│ │ │ ├── rsip-named.yaml
│ │ │ └── rsip.yaml
│ │ ├── trace_test.go
│ │ ├── trace_types.go
│ │ ├── trace.go
│ │ ├── tree_helmrelease.go
│ │ ├── tree_kustomization.go
│ │ ├── tree_resourceset_test.go
│ │ ├── tree_resourceset.go
│ │ ├── tree.go
│ │ ├── uninstall.go
│ │ ├── version_test.go
│ │ ├── version.go
│ │ ├── wait_inputprovider_test.go
│ │ ├── wait_inputprovider.go
│ │ ├── wait_instance_test.go
│ │ ├── wait_instance.go
│ │ ├── wait_resourceset_test.go
│ │ ├── wait_resourceset.go
│ │ └── wait.go
│ ├── mcp
│ │ ├── Dockerfile
│ │ ├── k8s
│ │ │ ├── actions_test.go
│ │ │ ├── actions.go
│ │ │ ├── client_test.go
│ │ │ ├── client.go
│ │ │ ├── config.go
│ │ │ ├── events_test.go
│ │ │ ├── events.go
│ │ │ ├── export_test.go
│ │ │ ├── export.go
│ │ │ ├── helm.go
│ │ │ ├── logs.go
│ │ │ ├── metrics.go
│ │ │ └── suite_test.go
│ │ ├── main.go
│ │ ├── prompter
│ │ │ ├── debug_helmrelease_test.go
│ │ │ ├── debug_helmrelease.go
│ │ │ ├── debug_kustomization_test.go
│ │ │ ├── debug_kustomization.go
│ │ │ ├── index.go
│ │ │ └── manager.go
│ │ ├── README.md
│ │ └── toolbox
│ │ ├── apply_manifest_test.go
│ │ ├── apply_manifest.go
│ │ ├── delete_resource_test.go
│ │ ├── delete_resource.go
│ │ ├── get_apis_test.go
│ │ ├── get_apis.go
│ │ ├── get_contexts_test.go
│ │ ├── get_contexts.go
│ │ ├── get_instance_test.go
│ │ ├── get_instance.go
│ │ ├── get_logs_test.go
│ │ ├── get_logs.go
│ │ ├── get_metrics_test.go
│ │ ├── get_metrics.go
│ │ ├── get_resource_test.go
│ │ ├── get_resource.go
│ │ ├── helpers.go
│ │ ├── indexer
│ │ │ └── main.go
│ │ ├── install_instance_test.go
│ │ ├── install_instance.go
│ │ ├── library
│ │ │ ├── bm25_test.go
│ │ │ ├── bm25.go
│ │ │ ├── index.go
│ │ │ ├── index.gob
│ │ │ ├── library.go
│ │ │ ├── search_test.go
│ │ │ ├── search.go
│ │ │ ├── tokenizer_test.go
│ │ │ └── tokenizer.go
│ │ ├── manager_test.go
│ │ ├── manager.go
│ │ ├── reconcile_helmrelease_test.go
│ │ ├── reconcile_helmrelease.go
│ │ ├── reconcile_kustomization_test.go
│ │ ├── reconcile_kustomization.go
│ │ ├── reconcile_resourceset_test.go
│ │ ├── reconcile_resourceset.go
│ │ ├── reconcile_source_test.go
│ │ ├── reconcile_source.go
│ │ ├── resume_reconciliation_test.go
│ │ ├── resume_reconciliation.go
│ │ ├── scopes_test.go
│ │ ├── scopes.go
│ │ ├── search_flux_docs_test.go
│ │ ├── search_flux_docs.go
│ │ ├── set_context_test.go
│ │ ├── set_context.go
│ │ ├── suspend_reconciliation_test.go
│ │ ├── suspend_reconciliation.go
│ │ └── testdata
│ │ ├── kubeconfig_golden.yaml
│ │ └── kubeconfig.yaml
│ └── operator
│ └── main.go
├── config
│ ├── crd
│ │ ├── bases
│ │ │ ├── fluxcd.controlplane.io_fluxinstances.yaml
│ │ │ ├── fluxcd.controlplane.io_fluxreports.yaml
│ │ │ ├── fluxcd.controlplane.io_resourcesetinputproviders.yaml
│ │ │ └── fluxcd.controlplane.io_resourcesets.yaml
│ │ ├── kustomization.yaml
│ │ └── kustomizeconfig.yaml
│ ├── data
│ │ ├── flux
│ │ │ ├── v2.2.3
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ └── source-controller.yaml
│ │ │ ├── v2.3.0
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ └── source-controller.yaml
│ │ │ ├── v2.4.0
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ └── source-controller.yaml
│ │ │ ├── v2.5.0
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ └── source-controller.yaml
│ │ │ ├── v2.5.1
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ └── source-controller.yaml
│ │ │ ├── v2.6.0
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ └── source-controller.yaml
│ │ │ ├── v2.6.1
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ └── source-controller.yaml
│ │ │ ├── v2.6.2
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ └── source-controller.yaml
│ │ │ ├── v2.6.3
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ └── source-controller.yaml
│ │ │ ├── v2.6.4
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ └── source-controller.yaml
│ │ │ ├── v2.7.0
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ ├── source-controller.yaml
│ │ │ │ └── source-watcher.yaml
│ │ │ ├── v2.7.1
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ ├── source-controller.yaml
│ │ │ │ └── source-watcher.yaml
│ │ │ ├── v2.7.2
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ ├── source-controller.yaml
│ │ │ │ └── source-watcher.yaml
│ │ │ ├── v2.7.3
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ ├── source-controller.yaml
│ │ │ │ └── source-watcher.yaml
│ │ │ ├── v2.7.4
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ ├── source-controller.yaml
│ │ │ │ └── source-watcher.yaml
│ │ │ └── v2.7.5
│ │ │ ├── helm-controller.yaml
│ │ │ ├── image-automation-controller.yaml
│ │ │ ├── image-reflector-controller.yaml
│ │ │ ├── kustomize-controller.yaml
│ │ │ ├── notification-controller.yaml
│ │ │ ├── policies.yaml
│ │ │ ├── rbac.yaml
│ │ │ ├── source-controller.yaml
│ │ │ └── source-watcher.yaml
│ │ ├── flux-images
│ │ │ ├── v2.2.0
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.2.1
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.2.2
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.2.3
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.3.0
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.4.0
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.5.0
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.5.1
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless-fips.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.6.0
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.6.1
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.6.2
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.6.3
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.6.4
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless-fips.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.7.0
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.7.1
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.7.2
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.7.3
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.7.4
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── v2.7.5
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless-fips.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ └── VERSION
│ │ └── flux-vex
│ │ ├── v2.2.json
│ │ ├── v2.3.json
│ │ ├── v2.4.json
│ │ ├── v2.5.json
│ │ ├── v2.6.json
│ │ └── v2.7.json
│ ├── default
│ │ ├── kustomization.yaml
│ │ ├── namespace.yaml
│ │ └── rbac.yaml
│ ├── manager
│ │ ├── account.yaml
│ │ ├── deployment.yaml
│ │ ├── kustomization.yaml
│ │ └── service.yaml
│ ├── mcp
│ │ ├── deployment.yaml
│ │ ├── kustomization.yaml
│ │ └── service.yaml
│ ├── monitoring
│ │ ├── dashboards
│ │ │ ├── flux-k8s-api-performance.json
│ │ │ └── flux-performance.json
│ │ ├── flux-controllers.yaml
│ │ ├── flux-operator.yaml
│ │ └── kustomization.yaml
│ ├── olm
│ │ ├── build
│ │ │ └── Dockerfile
│ │ ├── bundle
│ │ │ ├── manifests
│ │ │ │ ├── flux-operator.clusterserviceversion.yaml
│ │ │ │ ├── flux-operator.service.yaml
│ │ │ │ ├── fluxinstances.fluxcd.controlplane.io.crd.yaml
│ │ │ │ ├── fluxreports.fluxcd.controlplane.io.crd.yaml
│ │ │ │ ├── resourcesetinputproviders.fluxcd.controlplane.io.crd.yaml
│ │ │ │ └── resourcesets.fluxcd.controlplane.io.crd.yaml
│ │ │ ├── metadata
│ │ │ │ └── annotations.yaml
│ │ │ └── tests
│ │ │ └── scorecard
│ │ │ └── config.yaml
│ │ ├── ci.yaml
│ │ └── test
│ │ ├── bundle.Dockerfile
│ │ ├── olm.yaml
│ │ └── opm.Dockerfile
│ ├── rbac
│ │ ├── fluxinstance_editor_role.yaml
│ │ ├── fluxinstance_viewer_role.yaml
│ │ ├── fluxreport_editor_role.yaml
│ │ ├── fluxreport_viewer_role.yaml
│ │ ├── kustomization.yaml
│ │ ├── leader_election_role_binding.yaml
│ │ ├── leader_election_role.yaml
│ │ ├── resourceset_editor_role.yaml
│ │ ├── resourceset_viewer_role.yaml
│ │ ├── role_binding.yaml
│ │ ├── role.yaml
│ │ └── service_account.yaml
│ ├── samples
│ │ ├── fluxcd_v1_fluxinstance.yaml
│ │ ├── fluxcd_v1_fluxreport.yaml
│ │ ├── fluxcd_v1_resourceset.yaml
│ │ ├── fluxcd_v1_resourcesetinputprovider.yaml
│ │ └── kustomization.yaml
│ └── terraform
│ ├── main.tf
│ ├── outputs.tf
│ ├── providers.tf
│ ├── README.md
│ ├── values
│ │ └── components.yaml
│ ├── variables.tf
│ └── versions.tf
├── CONTRIBUTING.md
├── Dockerfile
├── docs
│ ├── api
│ │ └── v1
│ │ ├── fluxinstance.md
│ │ ├── fluxreport.md
│ │ ├── resourceset.md
│ │ └── resourcesetinputprovider.md
│ ├── dev
│ │ └── README.md
│ ├── guides
│ │ ├── instance
│ │ │ ├── instance-controllers.md
│ │ │ ├── instance-customization.md
│ │ │ ├── instance-monitoring.md
│ │ │ ├── instance-sharding.md
│ │ │ └── instance-sync.md
│ │ ├── operator
│ │ │ ├── operator-install.md
│ │ │ └── operator-migration.md
│ │ └── resourcesets
│ │ ├── rset-app-definition.md
│ │ ├── rset-github-pull-requests.md
│ │ ├── rset-gitlab-environments.md
│ │ ├── rset-gitlab-merge-requests.md
│ │ ├── rset-image-automation.md
│ │ ├── rset-introduction.md
│ │ └── rset-time-based-delivery.md
│ ├── lkm
│ │ └── README.md
│ ├── logo
│ │ ├── flux-operator-banner.png
│ │ ├── flux-operator-banner.svg
│ │ ├── flux-operator-icon.png
│ │ ├── flux-operator-icon.svg
│ │ ├── flux-operator-logo.png
│ │ └── flux-operator-logo.svg
│ ├── mcp
│ │ ├── instructions.md
│ │ ├── mcp-config.md
│ │ ├── mcp-install.md
│ │ ├── mcp-prompting.md
│ │ ├── prompts.md
│ │ └── tools.md
│ └── web
│ ├── web-config-api.md
│ ├── web-ingress.md
│ ├── web-sso-dex.md
│ ├── web-sso-keycloak.md
│ ├── web-sso-openshift.md
│ ├── web-standalone.md
│ └── web-user-management.md
├── go.mod
├── go.sum
├── hack
│ ├── boilerplate.go.txt
│ ├── build-dist-manifests.sh
│ ├── build-olm-images.sh
│ ├── build-olm-manifests.sh
│ ├── install-operator-sdk.sh
│ ├── prep-release.sh
│ ├── vendor-flux-manifests.sh
│ └── web-ui-load-test.sh
├── internal
│ ├── builder
│ │ ├── build_test.go
│ │ ├── build.go
│ │ ├── components.go
│ │ ├── digest.go
│ │ ├── images_test.go
│ │ ├── images.go
│ │ ├── options.go
│ │ ├── preflight_test.go
│ │ ├── preflight.go
│ │ ├── profiles.go
│ │ ├── pull.go
│ │ ├── resourceset_test.go
│ │ ├── resourceset.go
│ │ ├── result.go
│ │ ├── semver_test.go
│ │ ├── semver.go
│ │ ├── templates.go
│ │ ├── testdata
│ │ │ ├── flux
│ │ │ │ ├── v2.2.0
│ │ │ │ │ └── .gitkeep
│ │ │ │ ├── v2.2.1
│ │ │ │ │ └── .gitkeep
│ │ │ │ └── v2.3.0
│ │ │ │ └── .gitkeep
│ │ │ ├── flux-images
│ │ │ │ └── v2.3.0
│ │ │ │ ├── enterprise-alpine.yaml
│ │ │ │ ├── enterprise-distroless.yaml
│ │ │ │ └── upstream-alpine.yaml
│ │ │ ├── resourceset
│ │ │ │ ├── dedup.golden.yaml
│ │ │ │ ├── dedup.yaml
│ │ │ │ ├── empty.yaml
│ │ │ │ ├── exclude.golden.yaml
│ │ │ │ ├── exclude.yaml
│ │ │ │ ├── invalid-output.yaml
│ │ │ │ ├── missing-inputs.yaml
│ │ │ │ ├── multi-doc-template.golden.yaml
│ │ │ │ ├── multi-doc-template.yaml
│ │ │ │ ├── nestedinputs.golden.yaml
│ │ │ │ ├── nestedinputs.yaml
│ │ │ │ ├── noinputs.golden.yaml
│ │ │ │ ├── noinputs.yaml
│ │ │ │ ├── slugify.golden.yaml
│ │ │ │ └── slugify.yaml
│ │ │ ├── v2.3.0
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ └── source-controller.yaml
│ │ │ ├── v2.3.0-golden
│ │ │ │ ├── default.kustomization.yaml
│ │ │ │ ├── patches.kustomization.yaml
│ │ │ │ ├── profiles.kustomization.yaml
│ │ │ │ ├── sharding.kustomization.yaml
│ │ │ │ ├── storage.kustomization.yaml
│ │ │ │ └── sync.kustomization.yaml
│ │ │ ├── v2.6.0
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ └── source-controller.yaml
│ │ │ ├── v2.6.0-golden
│ │ │ │ ├── shard1.kustomization.yaml
│ │ │ │ ├── shard2.kustomization.yaml
│ │ │ │ ├── sharding.kustomization.yaml
│ │ │ │ ├── size.large.kustomization.yaml
│ │ │ │ ├── size.medium.kustomization.yaml
│ │ │ │ └── size.small.kustomization.yaml
│ │ │ ├── v2.7.0
│ │ │ │ ├── helm-controller.yaml
│ │ │ │ ├── image-automation-controller.yaml
│ │ │ │ ├── image-reflector-controller.yaml
│ │ │ │ ├── kustomize-controller.yaml
│ │ │ │ ├── notification-controller.yaml
│ │ │ │ ├── policies.yaml
│ │ │ │ ├── rbac.yaml
│ │ │ │ ├── source-controller.yaml
│ │ │ │ └── source-watcher.yaml
│ │ │ └── v2.7.0-golden
│ │ │ └── source-watcher.kustomization.yaml
│ │ └── workload_identity.go
│ ├── controller
│ │ ├── common.go
│ │ ├── entitlement_controller_test.go
│ │ ├── entitlement_controller.go
│ │ ├── fluxinstance_artifact_controller_test.go
│ │ ├── fluxinstance_artifact_controller.go
│ │ ├── fluxinstance_artifact_manager_test.go
│ │ ├── fluxinstance_artifact_manager.go
│ │ ├── fluxinstance_controller_test.go
│ │ ├── fluxinstance_controller.go
│ │ ├── fluxinstance_manager.go
│ │ ├── fluxinstance_migrator.go
│ │ ├── fluxinstance_uninstaller.go
│ │ ├── fluxreport_controller_test.go
│ │ ├── fluxreport_controller.go
│ │ ├── resourceset_controller_test.go
│ │ ├── resourceset_controller.go
│ │ ├── resourceset_manager_test.go
│ │ ├── resourceset_manager.go
│ │ ├── resourcesetinputprovider_controller_git_test.go
│ │ ├── resourcesetinputprovider_controller_oci_test.go
│ │ ├── resourcesetinputprovider_controller_test.go
│ │ ├── resourcesetinputprovider_controller.go
│ │ ├── resourcesetinputprovider_manager.go
│ │ ├── suite_test.go
│ │ └── testdata
│ │ └── rsa-private-key.pem
│ ├── entitlement
│ │ ├── aws.go
│ │ ├── client_test.go
│ │ ├── client.go
│ │ ├── default_test.go
│ │ └── default.go
│ ├── filtering
│ │ ├── filters_test.go
│ │ └── filters.go
│ ├── gitprovider
│ │ ├── azuredevops_test.go
│ │ ├── azuredevops.go
│ │ ├── github_test.go
│ │ ├── github.go
│ │ ├── gitlab_test.go
│ │ ├── gitlab.go
│ │ ├── interface.go
│ │ ├── options.go
│ │ ├── result_test.go
│ │ └── result.go
│ ├── inputs
│ │ ├── combine_test.go
│ │ ├── combine.go
│ │ ├── flattener.go
│ │ ├── id.go
│ │ ├── json_test.go
│ │ ├── json.go
│ │ ├── keys_test.go
│ │ ├── keys.go
│ │ ├── permuter_test.go
│ │ ├── permuter.go
│ │ └── provider.go
│ ├── install
│ │ ├── autoupdate.go
│ │ ├── client.go
│ │ ├── credentials.go
│ │ ├── deploy.go
│ │ ├── download.go
│ │ ├── events.go
│ │ ├── installer.go
│ │ ├── options.go
│ │ └── uninstall.go
│ ├── inventory
│ │ ├── inventory_test.go
│ │ ├── inventory.go
│ │ ├── reader_test.go
│ │ ├── reader.go
│ │ └── testdata
│ │ ├── inventory1.yaml
│ │ └── inventory2.yaml
│ ├── lkm
│ │ ├── artifacts_attestation_test.go
│ │ ├── artifacts_attestation.go
│ │ ├── attestation_test.go
│ │ ├── attestation.go
│ │ ├── doc.go
│ │ ├── errors.go
│ │ ├── fetch_test.go
│ │ ├── fetch.go
│ │ ├── jwe_test.go
│ │ ├── jwe.go
│ │ ├── jwt_test.go
│ │ ├── jwt.go
│ │ ├── keygen_test.go
│ │ ├── keygen.go
│ │ ├── keyset_test.go
│ │ ├── keyset.go
│ │ ├── license_test.go
│ │ ├── license.go
│ │ ├── licensekey.go
│ │ ├── manifests_attestation_test.go
│ │ ├── manifests_attestation.go
│ │ ├── revocation_test.go
│ │ └── revocation.go
│ ├── notifier
│ │ └── notifier.go
│ ├── reporter
│ │ ├── cluster.go
│ │ ├── components.go
│ │ ├── crds.go
│ │ ├── distribution.go
│ │ ├── metrics_test.go
│ │ ├── metrics.go
│ │ ├── reconcilers.go
│ │ ├── reporter.go
│ │ └── sync.go
│ ├── schedule
│ │ ├── scheduler_test.go
│ │ └── scheduler.go
│ ├── tests
│ │ ├── fluxinstance
│ │ │ ├── health_check_test.go
│ │ │ └── suite_test.go
│ │ └── resourceset
│ │ ├── health_check_test.go
│ │ └── suite_test.go
│ ├── testutils
│ │ ├── log.go
│ │ └── time.go
│ └── web
│ ├── action_test.go
│ ├── action.go
│ ├── auth
│ │ ├── claims_test.go
│ │ ├── claims.go
│ │ ├── cookies_test.go
│ │ ├── cookies.go
│ │ ├── errors_test.go
│ │ ├── errors.go
│ │ ├── middlewares_test.go
│ │ ├── middlewares.go
│ │ ├── oauth2_test.go
│ │ ├── oauth2.go
│ │ └── oidc.go
│ ├── config
│ │ ├── authentication_types_test.go
│ │ ├── authentication_types.go
│ │ ├── config_types_test.go
│ │ ├── config_types.go
│ │ ├── groupversion_info.go
│ │ ├── loader_test.go
│ │ ├── loader.go
│ │ ├── user_actions_types_test.go
│ │ ├── user_actions_types.go
│ │ └── watcher.go
│ ├── events_test.go
│ ├── events.go
│ ├── favorites_test.go
│ ├── favorites.go
│ ├── fs.go
│ ├── handler.go
│ ├── inventory.go
│ ├── kubeclient
│ │ ├── client_test.go
│ │ ├── client.go
│ │ └── suite_test.go
│ ├── middlewares_test.go
│ ├── middlewares.go
│ ├── report_test.go
│ ├── report.go
│ ├── resource_test.go
│ ├── resource.go
│ ├── resources_test.go
│ ├── resources.go
│ ├── search_test.go
│ ├── search.go
│ ├── server_test.go
│ ├── server.go
│ ├── source.go
│ ├── suite_test.go
│ ├── user
│ │ ├── user_test.go
│ │ └── user.go
│ ├── workload_test.go
│ ├── workload.go
│ ├── workloads_test.go
│ └── workloads.go
├── LICENSE
├── Makefile
├── PROJECT
├── README.md
├── SECURITY.md
├── test
│ ├── e2e
│ │ ├── e2e_suite_test.go
│ │ ├── e2e_test.go
│ │ ├── instance_test.go
│ │ └── utils.go
│ └── olm
│ ├── e2e_suite_test.go
│ ├── e2e_test.go
│ ├── instance_test.go
│ └── scorecard_test.go
└── web
├── .gitignore
├── embed.go
├── eslint.config.js
├── index.html
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
│ ├── favicon.svg
│ └── fonts
│ └── inter.woff2
├── README.md
├── src
│ ├── app.jsx
│ ├── app.test.jsx
│ ├── components
│ │ ├── auth
│ │ │ ├── LoginPage.jsx
│ │ │ └── LoginPage.test.jsx
│ │ ├── dashboards
│ │ │ ├── cluster
│ │ │ │ ├── ClusterPage.jsx
│ │ │ │ ├── ClusterPage.test.jsx
│ │ │ │ ├── ControllersPanel.jsx
│ │ │ │ ├── ControllersPanel.test.jsx
│ │ │ │ ├── InfoPanel.jsx
│ │ │ │ ├── InfoPanel.test.jsx
│ │ │ │ ├── OverallStatusPanel.jsx
│ │ │ │ ├── OverallStatusPanel.test.jsx
│ │ │ │ ├── ReconcilersPanel.jsx
│ │ │ │ ├── ReconcilersPanel.test.jsx
│ │ │ │ ├── SyncPanel.jsx
│ │ │ │ └── SyncPanel.test.jsx
│ │ │ ├── common
│ │ │ │ ├── panel.jsx
│ │ │ │ ├── panel.test.jsx
│ │ │ │ ├── yaml.jsx
│ │ │ │ └── yaml.test.jsx
│ │ │ └── resource
│ │ │ ├── ActionBar.jsx
│ │ │ ├── ActionBar.test.jsx
│ │ │ ├── ArtifactPanel.jsx
│ │ │ ├── ArtifactPanel.test.jsx
│ │ │ ├── ExportedInputsPanel.jsx
│ │ │ ├── ExportedInputsPanel.test.jsx
│ │ │ ├── GraphTabContent.jsx
│ │ │ ├── GraphTabContent.test.jsx
│ │ │ ├── HistoryTimeline.jsx
│ │ │ ├── HistoryTimeline.test.jsx
│ │ │ ├── InputsPanel.jsx
│ │ │ ├── InputsPanel.test.jsx
│ │ │ ├── InventoryPanel.jsx
│ │ │ ├── InventoryPanel.test.jsx
│ │ │ ├── ReconcilerPanel.jsx
│ │ │ ├── ReconcilerPanel.test.jsx
│ │ │ ├── ResourcePage.jsx
│ │ │ ├── ResourcePage.test.jsx
│ │ │ ├── SourcePanel.jsx
│ │ │ ├── SourcePanel.test.jsx
│ │ │ ├── WorkloadsTabContent.jsx
│ │ │ └── WorkloadsTabContent.test.jsx
│ │ ├── favorites
│ │ │ ├── FavoriteCard.jsx
│ │ │ ├── FavoriteCard.test.jsx
│ │ │ ├── FavoritesHeader.jsx
│ │ │ ├── FavoritesHeader.test.jsx
│ │ │ ├── FavoritesPage.jsx
│ │ │ ├── FavoritesPage.test.jsx
│ │ │ ├── FavoritesSearch.jsx
│ │ │ └── FavoritesSearch.test.jsx
│ │ ├── layout
│ │ │ ├── ConnectionStatus.jsx
│ │ │ ├── ConnectionStatus.test.jsx
│ │ │ ├── Footer.jsx
│ │ │ ├── Footer.test.jsx
│ │ │ ├── Header.jsx
│ │ │ ├── Header.test.jsx
│ │ │ ├── Icons.jsx
│ │ │ ├── NotFoundPage.jsx
│ │ │ ├── NotFoundPage.test.jsx
│ │ │ ├── ThemeToggle.jsx
│ │ │ ├── ThemeToggle.test.jsx
│ │ │ ├── UserMenu.jsx
│ │ │ └── UserMenu.test.jsx
│ │ └── search
│ │ ├── EventList.jsx
│ │ ├── EventList.test.jsx
│ │ ├── FilterForm.jsx
│ │ ├── FilterForm.test.jsx
│ │ ├── QuickSearch.jsx
│ │ ├── QuickSearch.test.jsx
│ │ ├── ResourceDetailsView.jsx
│ │ ├── ResourceDetailsView.test.jsx
│ │ ├── ResourceList.jsx
│ │ ├── ResourceList.test.jsx
│ │ ├── StatusChart.jsx
│ │ └── StatusChart.test.jsx
│ ├── index.css
│ ├── main.jsx
│ ├── mock
│ │ ├── action.js
│ │ ├── events.js
│ │ ├── events.test.js
│ │ ├── report.js
│ │ ├── resource.js
│ │ ├── resources.js
│ │ ├── resources.test.js
│ │ ├── workload.js
│ │ └── workload.test.js
│ └── utils
│ ├── constants.js
│ ├── cookies.js
│ ├── cookies.test.js
│ ├── favorites.js
│ ├── favorites.test.js
│ ├── fetch.js
│ ├── fetch.test.js
│ ├── hash.js
│ ├── hash.test.js
│ ├── meta.js
│ ├── meta.test.js
│ ├── navHistory.js
│ ├── navHistory.test.js
│ ├── routing.js
│ ├── routing.test.js
│ ├── scroll.js
│ ├── scroll.test.js
│ ├── status.js
│ ├── status.test.js
│ ├── theme.js
│ ├── theme.test.js
│ ├── time.js
│ ├── time.test.js
│ ├── version.js
│ └── version.test.js
├── tailwind.config.js
├── vite.config.js
└── vitest.setup.js
```
# Files
--------------------------------------------------------------------------------
/config/data/flux/v2.6.4/policies.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-egress
5 | spec:
6 | egress:
7 | - {}
8 | ingress:
9 | - from:
10 | - podSelector: {}
11 | podSelector: {}
12 | policyTypes:
13 | - Ingress
14 | - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 | name: allow-scraping
20 | spec:
21 | ingress:
22 | - from:
23 | - namespaceSelector: {}
24 | ports:
25 | - port: 8080
26 | protocol: TCP
27 | podSelector: {}
28 | policyTypes:
29 | - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 | name: allow-webhooks
35 | spec:
36 | ingress:
37 | - from:
38 | - namespaceSelector: {}
39 | podSelector:
40 | matchLabels:
41 | app: notification-controller
42 | policyTypes:
43 | - Ingress
44 |
```
--------------------------------------------------------------------------------
/config/data/flux/v2.7.0/policies.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-egress
5 | spec:
6 | egress:
7 | - {}
8 | ingress:
9 | - from:
10 | - podSelector: {}
11 | podSelector: {}
12 | policyTypes:
13 | - Ingress
14 | - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 | name: allow-scraping
20 | spec:
21 | ingress:
22 | - from:
23 | - namespaceSelector: {}
24 | ports:
25 | - port: 8080
26 | protocol: TCP
27 | podSelector: {}
28 | policyTypes:
29 | - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 | name: allow-webhooks
35 | spec:
36 | ingress:
37 | - from:
38 | - namespaceSelector: {}
39 | podSelector:
40 | matchLabels:
41 | app: notification-controller
42 | policyTypes:
43 | - Ingress
44 |
```
--------------------------------------------------------------------------------
/config/data/flux/v2.7.1/policies.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-egress
5 | spec:
6 | egress:
7 | - {}
8 | ingress:
9 | - from:
10 | - podSelector: {}
11 | podSelector: {}
12 | policyTypes:
13 | - Ingress
14 | - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 | name: allow-scraping
20 | spec:
21 | ingress:
22 | - from:
23 | - namespaceSelector: {}
24 | ports:
25 | - port: 8080
26 | protocol: TCP
27 | podSelector: {}
28 | policyTypes:
29 | - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 | name: allow-webhooks
35 | spec:
36 | ingress:
37 | - from:
38 | - namespaceSelector: {}
39 | podSelector:
40 | matchLabels:
41 | app: notification-controller
42 | policyTypes:
43 | - Ingress
44 |
```
--------------------------------------------------------------------------------
/config/data/flux/v2.7.2/policies.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-egress
5 | spec:
6 | egress:
7 | - {}
8 | ingress:
9 | - from:
10 | - podSelector: {}
11 | podSelector: {}
12 | policyTypes:
13 | - Ingress
14 | - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 | name: allow-scraping
20 | spec:
21 | ingress:
22 | - from:
23 | - namespaceSelector: {}
24 | ports:
25 | - port: 8080
26 | protocol: TCP
27 | podSelector: {}
28 | policyTypes:
29 | - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 | name: allow-webhooks
35 | spec:
36 | ingress:
37 | - from:
38 | - namespaceSelector: {}
39 | podSelector:
40 | matchLabels:
41 | app: notification-controller
42 | policyTypes:
43 | - Ingress
44 |
```
--------------------------------------------------------------------------------
/config/data/flux/v2.7.3/policies.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-egress
5 | spec:
6 | egress:
7 | - {}
8 | ingress:
9 | - from:
10 | - podSelector: {}
11 | podSelector: {}
12 | policyTypes:
13 | - Ingress
14 | - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 | name: allow-scraping
20 | spec:
21 | ingress:
22 | - from:
23 | - namespaceSelector: {}
24 | ports:
25 | - port: 8080
26 | protocol: TCP
27 | podSelector: {}
28 | policyTypes:
29 | - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 | name: allow-webhooks
35 | spec:
36 | ingress:
37 | - from:
38 | - namespaceSelector: {}
39 | podSelector:
40 | matchLabels:
41 | app: notification-controller
42 | policyTypes:
43 | - Ingress
44 |
```
--------------------------------------------------------------------------------
/config/data/flux/v2.7.4/policies.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-egress
5 | spec:
6 | egress:
7 | - {}
8 | ingress:
9 | - from:
10 | - podSelector: {}
11 | podSelector: {}
12 | policyTypes:
13 | - Ingress
14 | - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 | name: allow-scraping
20 | spec:
21 | ingress:
22 | - from:
23 | - namespaceSelector: {}
24 | ports:
25 | - port: 8080
26 | protocol: TCP
27 | podSelector: {}
28 | policyTypes:
29 | - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 | name: allow-webhooks
35 | spec:
36 | ingress:
37 | - from:
38 | - namespaceSelector: {}
39 | podSelector:
40 | matchLabels:
41 | app: notification-controller
42 | policyTypes:
43 | - Ingress
44 |
```
--------------------------------------------------------------------------------
/config/data/flux/v2.7.5/policies.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-egress
5 | spec:
6 | egress:
7 | - {}
8 | ingress:
9 | - from:
10 | - podSelector: {}
11 | podSelector: {}
12 | policyTypes:
13 | - Ingress
14 | - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 | name: allow-scraping
20 | spec:
21 | ingress:
22 | - from:
23 | - namespaceSelector: {}
24 | ports:
25 | - port: 8080
26 | protocol: TCP
27 | podSelector: {}
28 | policyTypes:
29 | - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 | name: allow-webhooks
35 | spec:
36 | ingress:
37 | - from:
38 | - namespaceSelector: {}
39 | podSelector:
40 | matchLabels:
41 | app: notification-controller
42 | policyTypes:
43 | - Ingress
44 |
```
--------------------------------------------------------------------------------
/internal/builder/testdata/v2.3.0/policies.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-egress
5 | spec:
6 | egress:
7 | - {}
8 | ingress:
9 | - from:
10 | - podSelector: {}
11 | podSelector: {}
12 | policyTypes:
13 | - Ingress
14 | - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 | name: allow-scraping
20 | spec:
21 | ingress:
22 | - from:
23 | - namespaceSelector: {}
24 | ports:
25 | - port: 8080
26 | protocol: TCP
27 | podSelector: {}
28 | policyTypes:
29 | - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 | name: allow-webhooks
35 | spec:
36 | ingress:
37 | - from:
38 | - namespaceSelector: {}
39 | podSelector:
40 | matchLabels:
41 | app: notification-controller
42 | policyTypes:
43 | - Ingress
44 |
```
--------------------------------------------------------------------------------
/internal/builder/testdata/v2.6.0/policies.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-egress
5 | spec:
6 | egress:
7 | - {}
8 | ingress:
9 | - from:
10 | - podSelector: {}
11 | podSelector: {}
12 | policyTypes:
13 | - Ingress
14 | - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 | name: allow-scraping
20 | spec:
21 | ingress:
22 | - from:
23 | - namespaceSelector: {}
24 | ports:
25 | - port: 8080
26 | protocol: TCP
27 | podSelector: {}
28 | policyTypes:
29 | - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 | name: allow-webhooks
35 | spec:
36 | ingress:
37 | - from:
38 | - namespaceSelector: {}
39 | podSelector:
40 | matchLabels:
41 | app: notification-controller
42 | policyTypes:
43 | - Ingress
44 |
```
--------------------------------------------------------------------------------
/internal/builder/testdata/v2.7.0/policies.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-egress
5 | spec:
6 | egress:
7 | - {}
8 | ingress:
9 | - from:
10 | - podSelector: {}
11 | podSelector: {}
12 | policyTypes:
13 | - Ingress
14 | - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 | name: allow-scraping
20 | spec:
21 | ingress:
22 | - from:
23 | - namespaceSelector: {}
24 | ports:
25 | - port: 8080
26 | protocol: TCP
27 | podSelector: {}
28 | policyTypes:
29 | - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 | name: allow-webhooks
35 | spec:
36 | ingress:
37 | - from:
38 | - namespaceSelector: {}
39 | podSelector:
40 | matchLabels:
41 | app: notification-controller
42 | policyTypes:
43 | - Ingress
44 |
```
--------------------------------------------------------------------------------
/cmd/cli/completion_fish.go:
--------------------------------------------------------------------------------
```go
1 | // Copyright 2025 Stefan Prodan.
2 | // SPDX-License-Identifier: AGPL-3.0
3 |
4 | package main
5 |
6 | import (
7 | "os"
8 |
9 | "github.com/spf13/cobra"
10 | )
11 |
12 | var completionFishCmd = &cobra.Command{
13 | Use: "fish",
14 | Short: "Generates fish completion scripts",
15 | Example: `To configure your fish shell to load completions for each session write this script to your completions dir:
16 |
17 | flux-operator completion fish > ~/.config/fish/completions/flux-operator.fish
18 |
19 | See http://fishshell.com/docs/current/index.html#completion-own for more details`,
20 | Run: func(cmd *cobra.Command, args []string) {
21 | rootCmd.GenFishCompletion(os.Stdout, true) //nolint:errcheck
22 | },
23 | }
24 |
25 | func init() {
26 | completionCmd.AddCommand(completionFishCmd)
27 | }
28 |
```
--------------------------------------------------------------------------------
/internal/builder/digest.go:
--------------------------------------------------------------------------------
```go
1 | // Copyright 2024 Stefan Prodan.
2 | // SPDX-License-Identifier: AGPL-3.0
3 |
4 | package builder
5 |
6 | import (
7 | "context"
8 | "fmt"
9 | "strings"
10 |
11 | "github.com/google/go-containerregistry/pkg/authn"
12 | "github.com/google/go-containerregistry/pkg/crane"
13 | )
14 |
15 | // GetArtifactDigest looks up an artifact from an OCI repository and returns the digest of the artifact.
16 | func GetArtifactDigest(ctx context.Context, ociURL string, keyChain authn.Keychain) (string, error) {
17 | digest, err := crane.Digest(strings.TrimPrefix(ociURL, "oci://"), crane.WithContext(ctx), crane.WithAuthFromKeychain(keyChain))
18 | if err != nil {
19 | return "", fmt.Errorf("fetching digest for artifact %s failed: %w", ociURL, err)
20 | }
21 | return digest, nil
22 | }
23 |
```
--------------------------------------------------------------------------------
/cmd/mcp/toolbox/testdata/kubeconfig.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: v1
2 | kind: Config
3 | clusters:
4 | - cluster:
5 | certificate-authority-data: cGFzc3dvcmQ=
6 | server: https://127.0.0.1:57975
7 | name: kind-dev
8 | - cluster:
9 | certificate-authority-data: dGVzdDI=
10 | server: https://127.0.0.1:57974
11 | name: kind-staging
12 | contexts:
13 | - context:
14 | cluster: kind-dev
15 | user: kind-dev
16 | name: kind-dev
17 | - context:
18 | cluster: kind-staging
19 | user: kind-staging
20 | name: kind-staging
21 | current-context: kind-dev
22 | preferences: {}
23 | users:
24 | - name: kind-dev
25 | user:
26 | client-certificate-data: cGFzc3dvcmQ=
27 | client-key-data: test
28 | - name: kind-staging
29 | user:
30 | client-certificate-data: dGVzdDI=
31 | client-key-data: test
32 |
```
--------------------------------------------------------------------------------
/internal/inputs/flattener.go:
--------------------------------------------------------------------------------
```go
1 | // Copyright 2025 Stefan Prodan.
2 | // SPDX-License-Identifier: AGPL-3.0
3 |
4 | package inputs
5 |
6 | // Flattener is a strategy that flattens the inputs from multiple providers
7 | // into a single list by concatenating them.
8 | type Flattener struct {
9 | combined Combined
10 | }
11 |
12 | // NewFlattener returns a new initialized *Flattener.
13 | func NewFlattener() *Flattener {
14 | return &Flattener{}
15 | }
16 |
17 | // AddProvider adds the inputs from a provider to the flattener.
18 | func (f *Flattener) AddProvider(name string, inputs []map[string]any) error {
19 | f.combined = append(f.combined, ToCombined(inputs)...)
20 | return nil
21 | }
22 |
23 | // Combine returns the combined inputs as a single flattened list.
24 | func (f *Flattener) Combine() Combined {
25 | return f.combined
26 | }
27 |
```
--------------------------------------------------------------------------------
/config/rbac/role.yaml:
--------------------------------------------------------------------------------
```yaml
1 | ---
2 | apiVersion: rbac.authorization.k8s.io/v1
3 | kind: ClusterRole
4 | metadata:
5 | name: manager-role
6 | rules:
7 | - apiGroups:
8 | - fluxcd.controlplane.io
9 | resources:
10 | - fluxinstances
11 | - fluxreports
12 | - resourcesetinputproviders
13 | - resourcesets
14 | verbs:
15 | - create
16 | - delete
17 | - get
18 | - list
19 | - patch
20 | - update
21 | - watch
22 | - apiGroups:
23 | - fluxcd.controlplane.io
24 | resources:
25 | - fluxinstances/finalizers
26 | - fluxreports/finalizers
27 | - resourcesetinputproviders/finalizers
28 | - resourcesets/finalizers
29 | verbs:
30 | - update
31 | - apiGroups:
32 | - fluxcd.controlplane.io
33 | resources:
34 | - fluxinstances/status
35 | - fluxreports/status
36 | - resourcesetinputproviders/status
37 | - resourcesets/status
38 | verbs:
39 | - get
40 | - patch
41 | - update
42 |
```
--------------------------------------------------------------------------------
/internal/entitlement/client_test.go:
--------------------------------------------------------------------------------
```go
1 | // Copyright 2024 Stefan Prodan.
2 | // SPDX-License-Identifier: AGPL-3.0
3 |
4 | package entitlement
5 |
6 | import (
7 | "testing"
8 |
9 | . "github.com/onsi/gomega"
10 | )
11 |
12 | func TestNewClient_DefaultVendor(t *testing.T) {
13 | g := NewWithT(t)
14 |
15 | // Unset the environment variable
16 | t.Setenv(MarketplaceTypeEnvKey, "")
17 |
18 | client, err := NewClient()
19 | g.Expect(err).ToNot(HaveOccurred())
20 | g.Expect(client).ToNot(BeNil())
21 | g.Expect(client.GetVendor()).To(Equal(DefaultVendor))
22 | }
23 |
24 | func TestNewClient_UnsupportedVendor(t *testing.T) {
25 | g := NewWithT(t)
26 |
27 | // Set the environment variable to an unsupported value
28 | t.Setenv(MarketplaceTypeEnvKey, "unsupported")
29 |
30 | client, err := NewClient()
31 | g.Expect(err).To(HaveOccurred())
32 | g.Expect(client).To(BeNil())
33 | }
34 |
```
--------------------------------------------------------------------------------
/api/v1/groupversion_info.go:
--------------------------------------------------------------------------------
```go
1 | // Copyright 2024 Stefan Prodan.
2 | // SPDX-License-Identifier: AGPL-3.0
3 |
4 | // Package v1 contains API Schema definitions for the fluxcd v1 API group
5 | // +kubebuilder:object:generate=true
6 | // +groupName=fluxcd.controlplane.io
7 | package v1
8 |
9 | import (
10 | "k8s.io/apimachinery/pkg/runtime/schema"
11 | "sigs.k8s.io/controller-runtime/pkg/scheme"
12 | )
13 |
14 | var (
15 | // GroupVersion is group version used to register these objects
16 | GroupVersion = schema.GroupVersion{Group: "fluxcd.controlplane.io", Version: "v1"}
17 |
18 | // SchemeBuilder is used to add go types to the GroupVersionKind scheme
19 | SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}
20 |
21 | // AddToScheme adds the types in this group-version to the given scheme.
22 | AddToScheme = SchemeBuilder.AddToScheme
23 | )
24 |
```
--------------------------------------------------------------------------------
/internal/gitprovider/interface.go:
--------------------------------------------------------------------------------
```go
1 | // Copyright 2024 Stefan Prodan.
2 | // SPDX-License-Identifier: AGPL-3.0
3 |
4 | package gitprovider
5 |
6 | import (
7 | "context"
8 | )
9 |
10 | // Interface that all Git SaaS providers must implement.
11 | type Interface interface {
12 | // ListTags returns a list of tags that match the filters.
13 | ListTags(ctx context.Context, opts Options) ([]Result, error)
14 |
15 | // ListBranches returns a list of branches that match the filters.
16 | ListBranches(ctx context.Context, opts Options) ([]Result, error)
17 |
18 | // ListRequests returns a list of pull/merge requests that match the filters.
19 | ListRequests(ctx context.Context, opts Options) ([]Result, error)
20 |
21 | // ListEnvironments returns a list of environments that match the filters.
22 | ListEnvironments(ctx context.Context, opts Options) ([]Result, error)
23 | }
24 |
```
--------------------------------------------------------------------------------
/cmd/mcp/prompter/manager.go:
--------------------------------------------------------------------------------
```go
1 | // Copyright 2025 Stefan Prodan.
2 | // SPDX-License-Identifier: AGPL-3.0
3 |
4 | package prompter
5 |
6 | import (
7 | "github.com/modelcontextprotocol/go-sdk/mcp"
8 | )
9 |
10 | type SystemPrompt struct {
11 | Prompt *mcp.Prompt
12 | Handler mcp.PromptHandler
13 | }
14 |
15 | // Manager represents an entity responsible for managing and
16 | // registering prompts and their handlers in a server.
17 | type Manager struct{}
18 |
19 | // NewManager creates and returns a new instance of Manager
20 | // for managing and registering prompts and their handlers.
21 | func NewManager() *Manager {
22 | return &Manager{}
23 | }
24 |
25 | // RegisterPrompts registers all prompts in the Manager's PromptSet with the provided server.
26 | func (m *Manager) RegisterPrompts(server *mcp.Server) {
27 | for _, p := range m.PromptSet() {
28 | server.AddPrompt(p.Prompt, p.Handler)
29 | }
30 | }
31 |
```
--------------------------------------------------------------------------------
/internal/testutils/log.go:
--------------------------------------------------------------------------------
```go
1 | // Copyright 2025 Stefan Prodan.
2 | // SPDX-License-Identifier: AGPL-3.0
3 |
4 | package testutils
5 |
6 | import (
7 | "testing"
8 |
9 | "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
10 | "k8s.io/apimachinery/pkg/runtime"
11 | "sigs.k8s.io/yaml"
12 |
13 | fluxcdv1 "github.com/controlplaneio-fluxcd/flux-operator/api/v1"
14 | )
15 |
16 | // LogObjectStatus logs the status fields of a FluxObject in YAML format.
17 | func LogObjectStatus(t *testing.T, obj fluxcdv1.FluxObject) {
18 | u, _ := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
19 | status, _, _ := unstructured.NestedFieldCopy(u, "status")
20 | sts, _ := yaml.Marshal(status)
21 | t.Log(obj.GetName(), "status:\n", string(sts))
22 | }
23 |
24 | // LogObject logs the entire FluxObject in YAML format.
25 | func LogObject(t *testing.T, obj fluxcdv1.FluxObject) {
26 | sts, _ := yaml.Marshal(obj)
27 | t.Log("object:\n", string(sts))
28 | }
29 |
```
--------------------------------------------------------------------------------
/internal/builder/testdata/resourceset/dedup.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: fluxcd.controlplane.io/v1
2 | kind: ResourceSet
3 | metadata:
4 | name: app1
5 | namespace: apps
6 | spec:
7 | inputs:
8 | - tenant: team1
9 | replicas: "2"
10 | - tenant: team2
11 | replicas: "3"
12 | resources:
13 | - apiVersion: source.toolkit.fluxcd.io/v1beta2
14 | kind: OCIRepository
15 | metadata:
16 | name: app1
17 | namespace: apps
18 | spec:
19 | interval: 10m
20 | url: oci://ghcr.io/org/charts/app1
21 | ref:
22 | semver: '*'
23 | - apiVersion: helm.toolkit.fluxcd.io/v2
24 | kind: HelmRelease
25 | metadata:
26 | name: app1-<< inputs.tenant >>
27 | namespace: apps
28 | spec:
29 | interval: 1h
30 | releaseName: app1-<< inputs.tenant >>
31 | chartRef:
32 | kind: OCIRepository
33 | name: app1
34 | values:
35 | replicas: << inputs.replicas | int >>
36 |
```
--------------------------------------------------------------------------------
/config/olm/test/olm.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: flux-system
5 | ---
6 | apiVersion: operators.coreos.com/v1alpha1
7 | kind: CatalogSource
8 | metadata:
9 | name: custom
10 | namespace: flux-system
11 | spec:
12 | description: custom
13 | displayName: custom
14 | image: ghcr.io/controlplaneio-fluxcd/openshift-flux-operator-index:v${FLUX_OPERATOR_VERSION}
15 | publisher: custom
16 | sourceType: grpc
17 | updateStrategy:
18 | registryPoll:
19 | interval: 30m
20 | ---
21 | apiVersion: operators.coreos.com/v1alpha1
22 | kind: Subscription
23 | metadata:
24 | name: flux-subscription
25 | namespace: flux-system
26 | spec:
27 | channel: stable
28 | name: flux-operator
29 | source: custom
30 | sourceNamespace: flux-system
31 | startingCSV: flux-operator.v${FLUX_OPERATOR_VERSION}
32 | ---
33 | apiVersion: operators.coreos.com/v1alpha2
34 | kind: OperatorGroup
35 | metadata:
36 | name: flux-system-group
37 | namespace: flux-system
38 |
```
--------------------------------------------------------------------------------
/internal/builder/testdata/resourceset/invalid-output.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: fluxcd.controlplane.io/v1
2 | kind: ResourceSet
3 | metadata:
4 | name: app1
5 | namespace: apps
6 | spec:
7 | inputs:
8 | - tenant: team1
9 | semver: ">=1.0.0-rc.0"
10 | - tenant: team2
11 | semver: ">=1.0.0-rc.0"
12 | resources:
13 | - apiVersion: source.toolkit.fluxcd.io/v1beta2
14 | kind: OCIRepository
15 | metadata:
16 | name: app1-<< inputs.tenant >>
17 | namespace: apps
18 | spec:
19 | interval: 10m
20 | url: oci://ghcr.io/org/charts/app1
21 | ref:
22 | semver: << inputs.semver >>
23 | - apiVersion: helm.toolkit.fluxcd.io/v2
24 | kind: HelmRelease
25 | metadata:
26 | name: app1-<< inputs.tenant >>
27 | namespace: apps
28 | spec:
29 | interval: 1h
30 | releaseName: app1-<< inputs.tenant >>
31 | chartRef:
32 | kind: OCIRepository
33 | name: app1-<< inputs.tenant >>
34 |
```
--------------------------------------------------------------------------------
/cmd/cli/get.go:
--------------------------------------------------------------------------------
```go
1 | // Copyright 2025 Stefan Prodan.
2 | // SPDX-License-Identifier: AGPL-3.0
3 |
4 | package main
5 |
6 | import (
7 | "io"
8 |
9 | "github.com/olekukonko/tablewriter"
10 | "github.com/spf13/cobra"
11 | )
12 |
13 | var getCmd = &cobra.Command{
14 | Use: "get",
15 | Short: "List Flux Operator resources",
16 | }
17 |
18 | func init() {
19 | rootCmd.AddCommand(getCmd)
20 | }
21 |
22 | func printTable(writer io.Writer, header []string, rows [][]string) {
23 | table := tablewriter.NewWriter(writer)
24 | table.SetHeader(header)
25 | table.SetAutoWrapText(false)
26 | table.SetAutoFormatHeaders(true)
27 | table.SetHeaderAlignment(tablewriter.ALIGN_LEFT)
28 | table.SetAlignment(tablewriter.ALIGN_LEFT)
29 | table.SetCenterSeparator("")
30 | table.SetColumnSeparator("")
31 | table.SetRowSeparator("")
32 | table.SetHeaderLine(false)
33 | table.SetBorder(false)
34 | table.SetTablePadding("\t")
35 | table.SetNoWhiteSpace(true)
36 | table.AppendBulk(rows)
37 | table.Render()
38 | }
39 |
```
--------------------------------------------------------------------------------
/web/vite.config.js:
--------------------------------------------------------------------------------
```javascript
1 | import { defineConfig } from 'vite'
2 | import preact from '@preact/preset-vite'
3 |
4 | export default defineConfig(() => {
5 | const useMockData = process.env.VITE_USE_MOCK_DATA === 'true'
6 |
7 | return {
8 | plugins: [preact()],
9 | test: {
10 | globals: true,
11 | environment: 'jsdom',
12 | setupFiles: './vitest.setup.js',
13 | env: {
14 | MODE: 'test',
15 | VITE_USE_MOCK_DATA: 'false'
16 | }
17 | },
18 | build: {
19 | outDir: 'dist',
20 | emptyOutDir: true,
21 | assetsDir: 'assets',
22 | rollupOptions: {
23 | output: {
24 | manualChunks: undefined,
25 | },
26 | },
27 | },
28 | // API proxy for development server (disabled when using mock data)
29 | server: useMockData ? {} : {
30 | proxy: {
31 | '/api': {
32 | target: 'http://localhost:9080',
33 | changeOrigin: true,
34 | },
35 | },
36 | },
37 | }
38 | })
39 |
```
--------------------------------------------------------------------------------
/cmd/cli/testdata/build_resourceset/rset-with-rsip-named.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: fluxcd.controlplane.io/v1
2 | kind: ResourceSet
3 | metadata:
4 | name: app1
5 | namespace: apps
6 | spec:
7 | inputsFrom:
8 | - name: app1-tenant1
9 | - name: app1-tenant2
10 | resources:
11 | - apiVersion: source.toolkit.fluxcd.io/v1
12 | kind: OCIRepository
13 | metadata:
14 | name: app1-<< inputs.tenant >>
15 | namespace: apps
16 | spec:
17 | interval: 10m
18 | url: oci://my.registry/org/charts/app1
19 | ref:
20 | semver: << inputs.app.version | quote >>
21 | - apiVersion: helm.toolkit.fluxcd.io/v2
22 | kind: HelmRelease
23 | metadata:
24 | name: app1-<< inputs.tenant >>
25 | namespace: apps
26 | spec:
27 | interval: 1h
28 | releaseName: app1-<< inputs.tenant >>
29 | chartRef:
30 | kind: OCIRepository
31 | name: app1-<< inputs.tenant >>
32 | values:
33 | replicaCount: << inputs.app.replicas | int >>
```
--------------------------------------------------------------------------------
/config/rbac/kustomization.yaml:
--------------------------------------------------------------------------------
```yaml
1 | resources:
2 | # All RBAC will be applied under this service account in
3 | # the deployment namespace. You may comment out this resource
4 | # if your manager will use a service account that exists at
5 | # runtime. Be sure to update RoleBinding and ClusterRoleBinding
6 | # subjects if changing service account names.
7 | - service_account.yaml
8 | - role.yaml
9 | - role_binding.yaml
10 | - leader_election_role.yaml
11 | - leader_election_role_binding.yaml
12 | # For each CRD, "Editor" and "Viewer" roles are scaffolded by
13 | # default, aiding admins in cluster management. Those roles are
14 | # not used by the Project itself. You can comment the following lines
15 | # if you do not want those helpers be installed with your Project.
16 | - fluxreport_editor_role.yaml
17 | - fluxreport_viewer_role.yaml
18 | - fluxinstance_editor_role.yaml
19 | - fluxinstance_viewer_role.yaml
20 | - resourceset_editor_role.yaml
21 | - resourceset_viewer_role.yaml
22 |
23 |
```
--------------------------------------------------------------------------------
/cmd/cli/completion_powershell.go:
--------------------------------------------------------------------------------
```go
1 | // Copyright 2025 Stefan Prodan.
2 | // SPDX-License-Identifier: AGPL-3.0
3 |
4 | package main
5 |
6 | import (
7 | "os"
8 |
9 | "github.com/spf13/cobra"
10 | )
11 |
12 | var completionPowerShellCmd = &cobra.Command{
13 | Use: "powershell",
14 | Short: "Generates powershell completion scripts",
15 | Example: `To load completion run
16 |
17 | . <(flux-operator completion powershell)
18 |
19 | To configure your powershell shell to load completions for each session add to your powershell profile
20 |
21 | Windows:
22 |
23 | cd "$env:USERPROFILE\Documents\WindowsPowerShell\Modules"
24 | flux-operator completion >> flux-operator-completion.ps1
25 |
26 | Linux:
27 |
28 | cd "${XDG_CONFIG_HOME:-"$HOME/.config/"}/powershell/modules"
29 | flux-operator completion >> flux-operator-completions.ps1`,
30 | Run: func(cmd *cobra.Command, args []string) {
31 | rootCmd.GenPowerShellCompletion(os.Stdout) //nolint:errcheck
32 | },
33 | }
34 |
35 | func init() {
36 | completionCmd.AddCommand(completionPowerShellCmd)
37 | }
38 |
```
--------------------------------------------------------------------------------
/config/olm/bundle/metadata/annotations.yaml:
--------------------------------------------------------------------------------
```yaml
1 | annotations:
2 | # Core bundle annotations.
3 | operators.operatorframework.io.bundle.channels.v1: stable
4 | operators.operatorframework.io.bundle.channel.default.v1: stable
5 | operators.operatorframework.io.bundle.manifests.v1: manifests/
6 | operators.operatorframework.io.bundle.mediatype.v1: registry+v1
7 | operators.operatorframework.io.bundle.metadata.v1: metadata/
8 | operators.operatorframework.io.bundle.package.v1: flux-operator
9 | operators.operatorframework.io.metrics.builder: operator-sdk-v1.41.0
10 | operators.operatorframework.io.metrics.mediatype.v1: metrics+v1
11 | operators.operatorframework.io.metrics.project_layout: go.kubebuilder.io/v4
12 |
13 | # Annotations for testing.
14 | operators.operatorframework.io.test.mediatype.v1: scorecard+v1
15 | operators.operatorframework.io.test.config.v1: tests/scorecard/
16 |
17 | # OpenShift specific annotations
18 | com.redhat.openshift.versions: "v4.12-v4.19"
19 |
```
--------------------------------------------------------------------------------
/web/package.json:
--------------------------------------------------------------------------------
```json
1 | {
2 | "name": "flux-status-page",
3 | "version": "0.0.1",
4 | "type": "module",
5 | "scripts": {
6 | "dev": "vite",
7 | "build": "vite build",
8 | "preview": "vite preview",
9 | "lint": "eslint src --ext .jsx",
10 | "lint:fix": "eslint src --ext .jsx --fix",
11 | "test": "vitest --run"
12 | },
13 | "dependencies": {
14 | "@preact/signals": "^2.5.1",
15 | "js-yaml": "^4.1.1",
16 | "preact": "^10.28.2",
17 | "preact-iso": "^2.11.1",
18 | "prismjs": "^1.30.0"
19 | },
20 | "devDependencies": {
21 | "@eslint/js": "^9.39.0",
22 | "@preact/preset-vite": "^2.10.2",
23 | "@testing-library/jest-dom": "^6.9.1",
24 | "@testing-library/preact": "^3.2.4",
25 | "@testing-library/user-event": "^14.6.1",
26 | "@vitest/coverage-v8": "^4.0.16",
27 | "autoprefixer": "^10.4.23",
28 | "eslint": "^9.39.2",
29 | "jsdom": "^27.4.0",
30 | "postcss": "^8.5.6",
31 | "tailwindcss": "^3.4.19",
32 | "vite": "^7.3.1",
33 | "vitest": "^4.0.9"
34 | }
35 | }
36 |
```
--------------------------------------------------------------------------------
/cmd/mcp/Dockerfile:
--------------------------------------------------------------------------------
```dockerfile
1 | # Build the Flux MCP server binary using Docker's Debian image.
2 | FROM --platform=${BUILDPLATFORM} golang:1.25 AS builder
3 | ARG TARGETOS
4 | ARG TARGETARCH
5 | ARG VERSION
6 | WORKDIR /workspace
7 |
8 | # Copy the Go Modules manifests.
9 | COPY go.mod go.mod
10 | COPY go.sum go.sum
11 |
12 | # Cache the Go Modules
13 | RUN go mod download
14 |
15 | # Copy the Go sources.
16 | COPY cmd/mcp/ cmd/mcp/
17 | COPY api/ api/
18 | COPY internal/ internal/
19 |
20 | # Build the server binary.
21 | RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} \
22 | go build -ldflags="-s -w -X main.VERSION=${VERSION}" -a -o flux-operator-mcp ./cmd/mcp/
23 |
24 | # Run the server binary using Google's Distroless image.
25 | FROM gcr.io/distroless/static:nonroot
26 | WORKDIR /
27 |
28 | # Copy the license.
29 | COPY LICENSE /licenses/LICENSE
30 |
31 | # Copy the server binary.
32 | COPY --from=builder /workspace/flux-operator-mcp .
33 |
34 | # Run the server under a non-root user.
35 | USER 65532:65532
36 | ENTRYPOINT ["/flux-operator-mcp"]
37 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.3.0/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.3.0
4 | digest: sha256:161da425b16b64dda4b3cec2ba0f8d7442973aba29bb446db3b340626181a0bc
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.3.0
7 | digest: sha256:48a032574dd45c39750ba0f1488e6f1ae36756a38f40976a6b7a588d83acefc1
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.0.1
10 | digest: sha256:a67a037faa850220ff94d8090253732079589ad9ff10b6ddf294f3b7cd0f3424
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.3.0
13 | digest: sha256:c0fab940c7e578ea519097d36c040238b0cc039ce366fdb753947428bbf0c3d6
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v0.32.0
16 | digest: sha256:aed795c7a8b85bca93f6d199d5a14bbefaf925ad5aa5316b32a716cfa4070d0b
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v0.38.0
19 | digest: sha256:ab5097213194f3cd9f0e68d8a937d94c4fc7e821f6544453211e94815b282aa2
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.4.0/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.4.1
4 | digest: sha256:3c5f0f022f990ffc0daf00e5b199548fc0fa6e7119e972318f0267081a332963
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.4.0
7 | digest: sha256:e3b0cf847e9cdf47b19af0fbcfe22786b80b598e0caeea8b6d2a5f9c26a48a24
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.1.0
10 | digest: sha256:4c75ca6c24ceb1f1bd7e935d9287a93e4f925c512f206763ec5a47de3ef3ff48
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.4.0
13 | digest: sha256:425309a159b15e07f7d97622effc79bc432a37ed55289dd465d37fa217a92a7d
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v0.33.0
16 | digest: sha256:c6864684f96cfbb3a91c816084032bb019b302af8b63b0e06b12b4018a9a8242
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v0.39.0
19 | digest: sha256:5b6c2e97055cfe69fe8996f48b53db039c136210dbc98c5631864a9e573d0e20
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.5.0/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.5.0
4 | digest: sha256:00cd9316a3790f3e212132f38c849f87d6e6eeca6272ec9557387be3cec054be
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.5.0
7 | digest: sha256:590deed942202f1e4097b9996a4d2892995605af94f730635169c7f15f9e79e3
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.2.0
10 | digest: sha256:62eaa9c9a9296a22684f9a77befa4f7fbf850fc314da47b3d6c28ad2e34ba965
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.5.0
13 | digest: sha256:9fe4b5fb312eace22e43969975938deca08d64282c9a1e2783afe91be3da2869
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v0.34.0
16 | digest: sha256:d002d16ab3bd4b370b23d989525182c19a068d5c1d63764acb14e43709d1949b
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v0.40.0
19 | digest: sha256:8c9de4b247271d6b02293f0cbc901e79b14b57b7ef0d8989dfdf3ec6151df8d5
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.5.1/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.5.0
4 | digest: sha256:00cd9316a3790f3e212132f38c849f87d6e6eeca6272ec9557387be3cec054be
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.5.1
7 | digest: sha256:b89935f9428764c389c5192fdb8f6c53b66e365fa09ac8cec597e82273e9f518
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.2.0
10 | digest: sha256:62eaa9c9a9296a22684f9a77befa4f7fbf850fc314da47b3d6c28ad2e34ba965
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.5.0
13 | digest: sha256:9fe4b5fb312eace22e43969975938deca08d64282c9a1e2783afe91be3da2869
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v0.34.0
16 | digest: sha256:d002d16ab3bd4b370b23d989525182c19a068d5c1d63764acb14e43709d1949b
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v0.40.0
19 | digest: sha256:8c9de4b247271d6b02293f0cbc901e79b14b57b7ef0d8989dfdf3ec6151df8d5
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.0/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.6.0
4 | digest: sha256:44ea51a40e4da2c0f19427df3219f29b86c8fce38539d227f6ffc2bdc944036f
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.6.0
7 | digest: sha256:d8c5445003196791441354f2d549e96cc6e69bb9ef6c5a7e440918dab0503776
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:db55d9d9f9b5106acd8c21da6916b8e285fcfc5572f214361ececd1a8571a4f0
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:80174ff676407af7a6feff67b0c2f100de9f7f89df4c26fc871e4d4c4006544d
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v0.35.0
16 | digest: sha256:dcfb9bfd6dea79f608788dc1e9821f297cf62c053bb51b482fcaf5b674a3198a
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v0.41.0
19 | digest: sha256:868010070f063758282bf0c64cf17c6150b51d6eee49d40647706ccbd93c109d
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.1/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.6.0
4 | digest: sha256:44ea51a40e4da2c0f19427df3219f29b86c8fce38539d227f6ffc2bdc944036f
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.6.0
7 | digest: sha256:d8c5445003196791441354f2d549e96cc6e69bb9ef6c5a7e440918dab0503776
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:db55d9d9f9b5106acd8c21da6916b8e285fcfc5572f214361ececd1a8571a4f0
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:80174ff676407af7a6feff67b0c2f100de9f7f89df4c26fc871e4d4c4006544d
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v0.35.1
16 | digest: sha256:65e68ed78cac29a9f42b83098ec8fa1e40a6ef554f89303da1520cff68ec5a05
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v0.41.0
19 | digest: sha256:868010070f063758282bf0c64cf17c6150b51d6eee49d40647706ccbd93c109d
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.2/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.6.1
4 | digest: sha256:a9dbd7872344ceadea48a89ea24c8a761a2a1008a2cdbbc1ffa3ed95dd2a00ce
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.6.0
7 | digest: sha256:d8c5445003196791441354f2d549e96cc6e69bb9ef6c5a7e440918dab0503776
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:db55d9d9f9b5106acd8c21da6916b8e285fcfc5572f214361ececd1a8571a4f0
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:80174ff676407af7a6feff67b0c2f100de9f7f89df4c26fc871e4d4c4006544d
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v0.35.2
16 | digest: sha256:4df89798b23a1ba7ec86bab327dcb50417af1517fe7986e511e28f62f40b8f61
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v0.41.1
19 | digest: sha256:b622ed93cddf31ac4086e7f6847cafc990ba363f8f4af49d3217313b50582282
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.3/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.6.2
4 | digest: sha256:11c8e14df885eff86586533d9941293ec8a1e9fff71bacf119edc79fdf3c63e3
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.6.0
7 | digest: sha256:d8c5445003196791441354f2d549e96cc6e69bb9ef6c5a7e440918dab0503776
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:db55d9d9f9b5106acd8c21da6916b8e285fcfc5572f214361ececd1a8571a4f0
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:80174ff676407af7a6feff67b0c2f100de9f7f89df4c26fc871e4d4c4006544d
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v0.35.2
16 | digest: sha256:4df89798b23a1ba7ec86bab327dcb50417af1517fe7986e511e28f62f40b8f61
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v0.41.2
19 | digest: sha256:e5b90e065e0d91690dbcd83dab3d03207ed030b068e26e9dac88c8d7b4fdfbe4
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.4/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.6.2
4 | digest: sha256:11c8e14df885eff86586533d9941293ec8a1e9fff71bacf119edc79fdf3c63e3
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.6.1
7 | digest: sha256:1a50730537bafb7827365b9af95c4eb71ca3d9b0bed9bc9bc765880e976972ef
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:db55d9d9f9b5106acd8c21da6916b8e285fcfc5572f214361ececd1a8571a4f0
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:80174ff676407af7a6feff67b0c2f100de9f7f89df4c26fc871e4d4c4006544d
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v0.35.2
16 | digest: sha256:4df89798b23a1ba7ec86bab327dcb50417af1517fe7986e511e28f62f40b8f61
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v0.41.2
19 | digest: sha256:e5b90e065e0d91690dbcd83dab3d03207ed030b068e26e9dac88c8d7b4fdfbe4
20 |
```
--------------------------------------------------------------------------------
/internal/builder/testdata/flux-images/v2.3.0/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.3.0
4 | digest: sha256:161da425b16b64dda4b3cec2ba0f8d7442973aba29bb446db3b340626181a0bc
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.3.0
7 | digest: sha256:48a032574dd45c39750ba0f1488e6f1ae36756a38f40976a6b7a588d83acefc1
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.0.1
10 | digest: sha256:a67a037faa850220ff94d8090253732079589ad9ff10b6ddf294f3b7cd0f3424
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.3.0
13 | digest: sha256:c0fab940c7e578ea519097d36c040238b0cc039ce366fdb753947428bbf0c3d6
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v0.32.0
16 | digest: sha256:aed795c7a8b85bca93f6d199d5a14bbefaf925ad5aa5316b32a716cfa4070d0b
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v0.38.0
19 | digest: sha256:ab5097213194f3cd9f0e68d8a937d94c4fc7e821f6544453211e94815b282aa2
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.0/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.2.2
4 | digest: sha256:b4baf93ab71c47f139723856991d71f61a408cf3894caf71f14bb997568faa35
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.2.0
7 | digest: sha256:bdda2e77e84225be33f673cdbdeb868932edc1a4fb76d028084bbb9951ae51fa
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v0.37.0
10 | digest: sha256:a5af89c471285a569e9e27c81b5b2fb771f7a4110ef9da1cda53c89d24b536eb
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.2.2
13 | digest: sha256:226f92f9dbcf82d9bdc907dd80521c43c34dbca2c893995c7334c80320faea2f
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v0.31.1
16 | digest: sha256:f13e83876e349b6429b8700424c26d1dfa1a3779ad7a9d385990be1a7a0a4e31
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v0.37.0
19 | digest: sha256:ff00a016cbb81b724add28d7d46ae9114592fd8c484473c0ec76ce1c5875ac91
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.1/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.2.3
4 | digest: sha256:e84056875b43d7bdf76e8ac97515d4c631f4bc739c01a7d9e35423682438de9f
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.2.1
7 | digest: sha256:c03819bcf5235384c008c0f70a3ce15d91c0683045d09b2bc7d769fafcba6691
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v0.37.1
10 | digest: sha256:6b28d0c8aadcb811474d1f4bcc11b7fec2c807d4d059a9b36a485a6ea2cb54d9
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.2.3
13 | digest: sha256:b2a6d66fed996522ef7af2885a7da4aa558c0fcc9f0a56644ca5f165c406ff39
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v0.31.1
16 | digest: sha256:f13e83876e349b6429b8700424c26d1dfa1a3779ad7a9d385990be1a7a0a4e31
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v0.37.0
19 | digest: sha256:ff00a016cbb81b724add28d7d46ae9114592fd8c484473c0ec76ce1c5875ac91
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.2/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.2.3
4 | digest: sha256:e84056875b43d7bdf76e8ac97515d4c631f4bc739c01a7d9e35423682438de9f
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.2.1
7 | digest: sha256:c03819bcf5235384c008c0f70a3ce15d91c0683045d09b2bc7d769fafcba6691
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v0.37.2
10 | digest: sha256:09fcd4c4c6460e439d60be07f4e2d4a86a61fc655ed20280bba28eca257109a5
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.2.3
13 | digest: sha256:b2a6d66fed996522ef7af2885a7da4aa558c0fcc9f0a56644ca5f165c406ff39
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v0.31.1
16 | digest: sha256:f13e83876e349b6429b8700424c26d1dfa1a3779ad7a9d385990be1a7a0a4e31
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v0.37.0
19 | digest: sha256:ff00a016cbb81b724add28d7d46ae9114592fd8c484473c0ec76ce1c5875ac91
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.3/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.2.4
4 | digest: sha256:34106b52d88d67d2889fabd2df19682dda30f32030488c9ae5c72e26239080fb
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.2.2
7 | digest: sha256:2df190255fc09131412472b900524c5c72a43464b3c2e99163c1ee143c5c2e22
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v0.37.4
10 | digest: sha256:6280691e55935f0f72cce166c63c0bc1208e68e1e048cf086a2e03d2ed6e2637
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.2.4
13 | digest: sha256:3e1292b9e8bab71c248307a0611bacfa1fd804231c99c79f113809436566fc3b
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v0.31.2
16 | digest: sha256:561c17eec9d4afe54be775d5e221e53d9955d0a1ba43b7fdcf365fa562baf273
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v0.37.1
19 | digest: sha256:97a8895cab8594af7509a5f2bc5495c03b7346722afc4e1e70bf6e445b7e575d
20 |
```
--------------------------------------------------------------------------------
/internal/entitlement/default.go:
--------------------------------------------------------------------------------
```go
1 | // Copyright 2024 Stefan Prodan.
2 | // SPDX-License-Identifier: AGPL-3.0
3 |
4 | package entitlement
5 |
6 | import (
7 | "context"
8 | "fmt"
9 |
10 | "github.com/opencontainers/go-digest"
11 | )
12 |
13 | // DefaultClient is an offline entitlement client.
14 | // This client uses a SHA256 digest to generate and verify tokens.
15 | type DefaultClient struct {
16 | Vendor string
17 | }
18 |
19 | // RegisterUsage registers the usage with the default entitlement client.
20 | func (c *DefaultClient) RegisterUsage(ctx context.Context, id string) (string, error) {
21 | d := digest.FromString(fmt.Sprintf("%s-%s", c.Vendor, id))
22 | return d.Encoded(), nil
23 | }
24 |
25 | // Verify verifies the token matches the SHA256 digest of the vendor id.
26 | func (c *DefaultClient) Verify(token, id string) (bool, error) {
27 | d := digest.FromString(fmt.Sprintf("%s-%s", c.Vendor, id))
28 | return token == d.Encoded(), nil
29 | }
30 |
31 | // GetVendor returns the vendor name.
32 | func (c *DefaultClient) GetVendor() string {
33 | return c.Vendor
34 | }
35 |
```
--------------------------------------------------------------------------------
/hack/install-operator-sdk.sh:
--------------------------------------------------------------------------------
```bash
1 | #!/usr/bin/env bash
2 |
3 | # Copyright 2025 Stefan Prodan.
4 | # SPDX-License-Identifier: AGPL-3.0
5 |
6 | set -euo pipefail
7 |
8 | VERSION=$1
9 | REPOSITORY_ROOT=$(git rev-parse --show-toplevel)
10 | DEST_DIR="${REPOSITORY_ROOT}/bin"
11 |
12 | info() {
13 | echo '[INFO] ' "$@"
14 | }
15 |
16 | fatal() {
17 | echo '[ERROR] ' "$@" >&2
18 | exit 1
19 | }
20 |
21 | OS=$(echo "${RUNNER_OS}" | tr '[:upper:]' '[:lower:]')
22 | if [[ "$OS" == "macos" ]]; then
23 | OS="darwin"
24 | fi
25 |
26 | ARCH=$(echo "${RUNNER_ARCH}" | tr '[:upper:]' '[:lower:]')
27 | if [[ "$ARCH" == "x64" ]]; then
28 | ARCH="amd64"
29 | elif [[ "$ARCH" == "x86" ]]; then
30 | ARCH="386"
31 | fi
32 |
33 | mkdir -p "${DEST_DIR}"
34 |
35 | DOWNLOAD_URL="https://github.com/operator-framework/operator-sdk/releases/download/${VERSION}/operator-sdk_${OS}_${ARCH}"
36 | EXEC_FILE="operator-sdk-${VERSION}"
37 |
38 | info "Downloading operator-sdk ${VERSION} for ${OS}/${ARCH}..."
39 | curl -sL "${DOWNLOAD_URL}" -o "${DEST_DIR}/${EXEC_FILE}"
40 | chmod +x "${DEST_DIR}/${EXEC_FILE}"
41 |
42 | ${DEST_DIR}/${EXEC_FILE} version
43 |
```
--------------------------------------------------------------------------------
/config/olm/test/bundle.Dockerfile:
--------------------------------------------------------------------------------
```dockerfile
1 | FROM scratch
2 |
3 | # Core bundle labels.
4 | LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1
5 | LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/
6 | LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/
7 | LABEL operators.operatorframework.io.bundle.package.v1=flux-operator
8 | LABEL operators.operatorframework.io.bundle.channels.v1=stable
9 | LABEL operators.operatorframework.io.bundle.channel.default.v1=stable
10 | LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.29.0
11 | LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1
12 | LABEL operators.operatorframework.io.metrics.project_layout=unknown
13 |
14 | # Labels for testing.
15 | LABEL operators.operatorframework.io.test.mediatype.v1=scorecard+v1
16 | LABEL operators.operatorframework.io.test.config.v1=tests/scorecard/
17 |
18 | # Copy files to locations specified by labels.
19 | COPY manifests /manifests/
20 | COPY metadata /metadata/
21 | COPY tests/scorecard /tests/scorecard/
22 |
```
--------------------------------------------------------------------------------
/docs/mcp/prompts.md:
--------------------------------------------------------------------------------
```markdown
1 | ---
2 | title: Flux MCP Server Prompts
3 | description: MCP Server predefined prompts for troubleshooting FluxCD
4 | ---
5 |
6 | # Flux MCP Server Prompts
7 |
8 | The Flux MCP Server comes with a set of predefined prompts that instruct the AI assistant
9 | to perform complex tasks by chaining together multiple MCP [tools](tools.md).
10 |
11 | ## Debugging Prompts
12 |
13 | These prompts are designed to help you quickly identify and resolve issues with your GitOps pipeline.
14 |
15 | ### debug_flux_kustomization
16 |
17 | Troubleshoot a Flux Kustomization and provide root cause analysis for any issues.
18 |
19 | **Parameters:**
20 |
21 | - `name` (required): The name of the Kustomization
22 | - `namespace` (required): The namespace of the Kustomization
23 | - `cluster` (optional): The cluster context to use
24 |
25 | ### debug_flux_helmrelease
26 |
27 | Troubleshoot a Flux HelmRelease and provide root cause analysis for any issues.
28 |
29 | **Parameters:**
30 |
31 | - `name` (required): The name of the HelmRelease
32 | - `namespace` (required): The namespace of the HelmRelease
33 | - `cluster` (optional): The cluster context to use
34 |
```
--------------------------------------------------------------------------------
/cmd/cli/testdata/build_resourceset/rset-with-rsip-labeled.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: fluxcd.controlplane.io/v1
2 | kind: ResourceSet
3 | metadata:
4 | name: app1
5 | namespace: apps
6 | spec:
7 | inputsFrom:
8 | - selector:
9 | matchLabels:
10 | some: label
11 | matchExpressions:
12 | - key: anotherLabel
13 | operator: In
14 | values:
15 | - value1
16 | - value2
17 | resources:
18 | - apiVersion: source.toolkit.fluxcd.io/v1
19 | kind: OCIRepository
20 | metadata:
21 | name: app1-<< inputs.tenant >>
22 | namespace: apps
23 | spec:
24 | interval: 10m
25 | url: oci://my.registry/org/charts/app1
26 | ref:
27 | semver: << inputs.app.version | quote >>
28 | - apiVersion: helm.toolkit.fluxcd.io/v2
29 | kind: HelmRelease
30 | metadata:
31 | name: app1-<< inputs.tenant >>
32 | namespace: apps
33 | spec:
34 | interval: 1h
35 | releaseName: app1-<< inputs.tenant >>
36 | chartRef:
37 | kind: OCIRepository
38 | name: app1-<< inputs.tenant >>
39 | values:
40 | replicaCount: << inputs.app.replicas | int >>
```
--------------------------------------------------------------------------------
/cmd/cli/completion_zsh.go:
--------------------------------------------------------------------------------
```go
1 | // Copyright 2025 Stefan Prodan.
2 | // SPDX-License-Identifier: AGPL-3.0
3 |
4 | package main
5 |
6 | import (
7 | "os"
8 |
9 | "github.com/spf13/cobra"
10 | )
11 |
12 | var completionZshCmd = &cobra.Command{
13 | Use: "zsh",
14 | Short: "Generates zsh completion scripts",
15 | Example: `To load completion run
16 |
17 | . <(flux-operator completion zsh) && compdef _flux-operator flux-operator
18 |
19 | To configure your zsh shell to load completions for each session add to your zshrc
20 |
21 | # ~/.zshrc or ~/.profile
22 | command -v flux-operator >/dev/null && . <(flux-operator completion zsh) && compdef _flux-operator flux-operator
23 |
24 | or write a cached file in one of the completion directories in your ${fpath}:
25 |
26 | echo "${fpath// /\n}" | grep -i completion
27 | flux-operator completion zsh > _flux-operator
28 |
29 | mv _flux-operator ~/.oh-my-zsh/completions # oh-my-zsh
30 | mv _flux-operator ~/.zprezto/modules/completion/external/src/ # zprezto`,
31 | Run: func(cmd *cobra.Command, args []string) {
32 | rootCmd.GenZshCompletion(os.Stdout) //nolint:errcheck
33 | },
34 | }
35 |
36 | func init() {
37 | completionCmd.AddCommand(completionZshCmd)
38 | }
39 |
```
--------------------------------------------------------------------------------
/internal/web/config/loader.go:
--------------------------------------------------------------------------------
```go
1 | // Copyright 2025 Stefan Prodan.
2 | // SPDX-License-Identifier: AGPL-3.0
3 |
4 | package config
5 |
6 | import (
7 | "fmt"
8 | "os"
9 |
10 | "sigs.k8s.io/yaml"
11 | )
12 |
13 | // Load reads, validates, and applies default values to missing fields in the configuration
14 | // for the Flux Status Page. If the filename is empty it returns the configuration object
15 | // with default values applied.
16 | func Load(filename string) (*ConfigSpec, error) {
17 | if filename == "" {
18 | var confSpec ConfigSpec
19 | confSpec.ApplyDefaults()
20 | confSpec.Version = "no-config"
21 | return &confSpec, nil
22 | }
23 | b, err := os.ReadFile(filename)
24 | if err != nil {
25 | return nil, err
26 | }
27 | conf, err := parse(b)
28 | if err != nil {
29 | return nil, fmt.Errorf("invalid configuration in web config file '%s': %w", filename, err)
30 | }
31 | conf.Version = "static-file"
32 | return conf, nil
33 | }
34 |
35 | func parse(b []byte) (*ConfigSpec, error) {
36 | var conf Config
37 | if err := yaml.Unmarshal(b, &conf); err != nil {
38 | return nil, err
39 | }
40 | if err := conf.Validate(); err != nil {
41 | return nil, err
42 | }
43 | conf.Spec.ApplyDefaults()
44 | return &conf.Spec, nil
45 | }
46 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.3.0/enterprise-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
3 | newTag: v1.3.0
4 | digest: sha256:d7b88dd6c361814bfaa92598b9dfe433adec40311008b96a54f3b23c91607ad1
5 | - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
6 | newTag: v1.3.0
7 | digest: sha256:6e2ded196361b01a78faec9f56650e52aa70896b808d677998602c509aa3612c
8 | - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
9 | newTag: v1.0.1
10 | digest: sha256:0db04c673d4c5729cb7d05e4a510bc36ec18277d6cbb62c4011b3a732c243c47
11 | - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 | newTag: v1.3.0
13 | digest: sha256:f2c2f31e1ace6c1166a2052bf725ef23169571d59ddff111a8256b739df0846b
14 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 | newTag: v0.32.0
16 | digest: sha256:93c40116ac639a7024dd08d5a95a83410b6d16b2bedcf1bc21c5ca3a27806894
17 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 | newTag: v0.38.0
19 | digest: sha256:5181afb652ac1c395ab7ec808341ba73c64ccc86eaf3df929aba1c1a091872cd
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.4.0/enterprise-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
3 | newTag: v1.4.1
4 | digest: sha256:0b7285c0ccdc77d5a5d71158ccc1c42549ea2d9cf9f19dde923ac0f6ee1b3b5e
5 | - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
6 | newTag: v1.4.0
7 | digest: sha256:715b1021699ed73aaf357d9306856b67640cabc1b6a147b9abdcd0e474212531
8 | - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
9 | newTag: v1.1.0
10 | digest: sha256:3bb1264b2ab406bf3cb7e692c9008a44e5b8fcc8e6509eb5bea8122b671ca3ab
11 | - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 | newTag: v1.4.0
13 | digest: sha256:da02cf19d2b8ea95d43d396b72ada6cee23244f7b7262617b5fc211553f96899
14 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 | newTag: v0.33.0
16 | digest: sha256:97d6b0e2ff42dfd2c8a47a7a1ee3a9da160dd4c40bb5ef2beab0ad94db962574
17 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 | newTag: v0.39.0
19 | digest: sha256:50e30c406eb430e3515c1c160c2e965ac13fbec5300af2b0539604c1c0e5e3eb
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.5.0/enterprise-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
3 | newTag: v1.5.0
4 | digest: sha256:2cd04d22a5663daa6cc271762fc957bf27f113c32dbf7ab9a8e032524c8ff110
5 | - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
6 | newTag: v1.5.0
7 | digest: sha256:3ebf0d3a1086f9e683b3848b2d7db86ba564287ba0c3f417dc4c0a1c1bc9d16f
8 | - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
9 | newTag: v1.2.0
10 | digest: sha256:ddd037b807669353cf151a08e5651004c1037c867e7136abdd5285af3399a963
11 | - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 | newTag: v1.5.0
13 | digest: sha256:52deb7d41feae67005eff5a93b907935a296a6deff181ca039a3c6d6f8f3e227
14 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 | newTag: v0.34.0
16 | digest: sha256:e6901a8e28a3a70eeb3617235181a6dbc723a2fb4e9e532c3505f285815ab8ef
17 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 | newTag: v0.40.0
19 | digest: sha256:314869bb326aab8fe0b39d43e3f91b80d4bd910f52901747a267224e78fed8f9
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.5.1/enterprise-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
3 | newTag: v1.5.0
4 | digest: sha256:a4cb0fe178e92c4a8320dfe8fbf2558686fae8f9097591ad5e244cca378cc462
5 | - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
6 | newTag: v1.5.1
7 | digest: sha256:d4dfb88e079eb462124b50124c9c5929252d79237d1266a54b288202f3f2f174
8 | - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
9 | newTag: v1.2.0
10 | digest: sha256:1f543c220e0e7350dcbacff11364a4d83cb489d43415d89a9d817b72305bf3ea
11 | - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 | newTag: v1.5.0
13 | digest: sha256:cc477dd3bafbc16253b5f27fb5e9170a8946a967bf3f8d3203896deeae98ddef
14 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 | newTag: v0.34.0
16 | digest: sha256:93945f2214ebd879c6f7734cd7a2a4a454bfac74f98c6eb872ba84d299aac05d
17 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 | newTag: v0.40.0
19 | digest: sha256:9d4dfe44ac3bbd1b5c10ac2156ed7c385709c994bf45f37707ed06e86aff3edb
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.0/enterprise-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
3 | newTag: v1.6.0
4 | digest: sha256:1beb043682143a4b58711df0d33512b13f25fff2b5d5144cfb5b6252933501ed
5 | - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
6 | newTag: v1.6.0
7 | digest: sha256:57ce01d5cb12d0d543798a235c280d44a0386449182878919187fd133f1c1d25
8 | - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:bb9c842ba900d74f27916b114af4aced9ece6520dea3750ff6eae864cb14fa07
11 | - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:beffbf4a50302b457d34e60526f5a87a157c49ba2c0e47edaa3b28d6393b4094
14 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 | newTag: v0.35.0
16 | digest: sha256:f7596097a87ab8782e0373366f108eb46fe45a2becb3008de3270d82158c70d8
17 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 | newTag: v0.41.0
19 | digest: sha256:78fa6c3fdb0e1393611b55be7d099ed500aa6d4770d8ad6f9f389e1dbecb600e
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.1/enterprise-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
3 | newTag: v1.6.0
4 | digest: sha256:bb8e0b78c25a6f64e8e975037255d31e746ae3c657517e2177286c71f3104159
5 | - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
6 | newTag: v1.6.0
7 | digest: sha256:394638bb89b473e0b71c14f6f3e3bf9787a86aabfaacb37163d5336cddd590b2
8 | - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:6cba5b83dc31f307af5925aaa83d6c7b57fd8f184baba83545eb72a47d1f2fc7
11 | - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:97eade442516bce76e33697f70714bff087387a5d5793ca0975d44f3d2470d52
14 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 | newTag: v0.35.1
16 | digest: sha256:51b8f1e8867525e9e06ce45a5fca0903eb0889530d6534ac5858338b201fb30f
17 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 | newTag: v0.41.0
19 | digest: sha256:effc7ab7998bd57475ee489d09f740259c1a5500b6e2d1a015ce47085f5144f5
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.2/enterprise-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
3 | newTag: v1.6.1
4 | digest: sha256:51a189335ffd0bde011f904617983bef9b9088fb5a920fa486999617be6ff39f
5 | - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
6 | newTag: v1.6.0
7 | digest: sha256:01acf7e24781e34a1fe6f449760337828223a300a10a7af89b7f1a4e512c9bed
8 | - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:ce7e3e59f1e6ec115177e4bd858b9802074acb4a6dc74af35e997e973e27876d
11 | - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:08b0902e29ebfc5cdadfbebcda5effb5b988b2605b1352ddd48049f9cca2b807
14 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 | newTag: v0.35.2
16 | digest: sha256:6791d2a5465a04fbd666b6e75ff109fa943f1350e0d2e3a138108a6625ba4073
17 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 | newTag: v0.41.1
19 | digest: sha256:0c4eef4b90742c319f936959f1318280d6469c5077b98cc2e2a5595399f16c08
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.3/enterprise-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
3 | newTag: v1.6.2
4 | digest: sha256:aae7abbe6e600e82d762ecd201324071d68bdded94007d6269500bc680081763
5 | - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
6 | newTag: v1.6.0
7 | digest: sha256:484a5a6827a7ab98070cd705bce2842a9a8cbf26f770f0dc3c5af510dc340e7c
8 | - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:094ba4a64987efa3c9131217be472f71f36bfc2cfa90e2eaf317f830d7267c88
11 | - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:e9024b81cdb6ef91ff969617ac060b35f580f5d2277a01db7bd96c1dc8ced36a
14 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 | newTag: v0.35.2
16 | digest: sha256:940fc335448bc8dfab37864e1a7fd86b7116a9a9dbba6124433c46818cf9aabd
17 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 | newTag: v0.41.2
19 | digest: sha256:71877b9853f8cd96eff8989dda5744d3ab02cb41a026af8c0250922a33f9740c
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.4/enterprise-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
3 | newTag: v1.6.2
4 | digest: sha256:55cda38118483790ff90f1b530aee30d5e319fc752945661008da5de58340613
5 | - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
6 | newTag: v1.6.1
7 | digest: sha256:ee402a9504361a69b6a91efb559598da1a3e3a40013a6b1df8f3e0df98217745
8 | - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:1019bd5a7c5951e4b8f2c04dee462fd968f6bc5ded987a59cb3177c209129073
11 | - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:78f497c34b40a55066515062010f2886eba2907896613ac6317e77206682f76d
14 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 | newTag: v0.35.2
16 | digest: sha256:3d9463e07223f033731972c833b08cb9891a705c22d630968276f5e131bd6708
17 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 | newTag: v0.41.2
19 | digest: sha256:58edb789cf293023c1cb3df2ce140583d98b6db7d5906a63f3b6127a6762ee71
20 |
```
--------------------------------------------------------------------------------
/internal/builder/testdata/flux-images/v2.3.0/enterprise-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
3 | newTag: v1.3.0
4 | digest: sha256:20dd417c31decab169fe1384a52e122aceb14061ff61f8bf59324b7808326ca5
5 | - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
6 | newTag: v1.3.0
7 | digest: sha256:f86abc81aee1ed60b18ae137bec23d3f63b30b303fb926fc4b61643c63734c28
8 | - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
9 | newTag: v1.0.1
10 | digest: sha256:88672f9d1f73a84c14d2dcc9373f264abc7589ec304b72b322c5dfe78643a3d9
11 | - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 | newTag: v1.3.0
13 | digest: sha256:9894577d753297d03c288a9ae0149168a6b6cfd07e89bed3d2747c03639379ba
14 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 | newTag: v0.32.0
16 | digest: sha256:4b80a314ef52af28809020ea2c1ae30c23ceafe65a871cb1d005b01681cd22a7
17 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 | newTag: v0.38.0
19 | digest: sha256:64e31d9eec9c1aec025d49ff6af1a72352ebbbd6a37b5490e18153a4cbc0f709
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.0/enterprise-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
3 | newTag: v1.2.2
4 | digest: sha256:8d64e373389ec4a742855f54b169e39eae6057d5dc062373f2866dff15b4f025
5 | - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
6 | newTag: v1.2.0
7 | digest: sha256:c8d2b1ab76d15705b9db9f61a093c0c4cc7986346f8a9d47141bfc6433731f52
8 | - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
9 | newTag: v0.37.0
10 | digest: sha256:5d4b3484817f80ca9f2efc448f3a74f33f58251d2053ae7d06494dd75ca9a86c
11 | - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 | newTag: v1.2.2
13 | digest: sha256:ab7cea5ce2de7c32853f21eaee532cfcc8b9257b7bcd1c336b00e0b955650159
14 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 | newTag: v0.31.1
16 | digest: sha256:b0ff686cfe83c384514058c9c3399ded6f8ac0b16989f460ba6c9bb329316df1
17 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 | newTag: v0.37.0
19 | digest: sha256:98106c7a399f4a1d31ce19d623f1980c14035659b1ccc9e88e9832a98153e57e
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.1/enterprise-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
3 | newTag: v1.2.3
4 | digest: sha256:370f4e5377fdde1cb4f72c40d8b568c45c0c37097e5d54f57051b468d36d82ed
5 | - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
6 | newTag: v1.2.1
7 | digest: sha256:575ac353151a8c31645872cf591e5d964da1b01ed1dbd2dc98bd67ec1f9d1a6a
8 | - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
9 | newTag: v0.37.1
10 | digest: sha256:8646eab771b51d617f6f3997aae29bbc28e4ae8c511249518d315e59cef0e6f7
11 | - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 | newTag: v1.2.3
13 | digest: sha256:e3b76c93948ff5cace407d7ebb70c582489764e74f5830f44b8b5714bc9e59f1
14 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 | newTag: v0.31.1
16 | digest: sha256:b0ff686cfe83c384514058c9c3399ded6f8ac0b16989f460ba6c9bb329316df1
17 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 | newTag: v0.37.0
19 | digest: sha256:98106c7a399f4a1d31ce19d623f1980c14035659b1ccc9e88e9832a98153e57e
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.2/enterprise-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
3 | newTag: v1.2.3
4 | digest: sha256:370f4e5377fdde1cb4f72c40d8b568c45c0c37097e5d54f57051b468d36d82ed
5 | - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
6 | newTag: v1.2.1
7 | digest: sha256:575ac353151a8c31645872cf591e5d964da1b01ed1dbd2dc98bd67ec1f9d1a6a
8 | - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
9 | newTag: v0.37.2
10 | digest: sha256:cbf37cb6abca25ba4fee15a14ba144b38529a37804b60bc13bdc769cbd532914
11 | - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 | newTag: v1.2.3
13 | digest: sha256:e3b76c93948ff5cace407d7ebb70c582489764e74f5830f44b8b5714bc9e59f1
14 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 | newTag: v0.31.1
16 | digest: sha256:b0ff686cfe83c384514058c9c3399ded6f8ac0b16989f460ba6c9bb329316df1
17 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 | newTag: v0.37.0
19 | digest: sha256:98106c7a399f4a1d31ce19d623f1980c14035659b1ccc9e88e9832a98153e57e
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.3/enterprise-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
3 | newTag: v1.2.5
4 | digest: sha256:911c127af3a893dc1ecb77d755cfaf4a4f209045767ccfd0c5f0615c56f710fa
5 | - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
6 | newTag: v1.2.2
7 | digest: sha256:8f67cbbe09fb352475794c54f94091256b24da754b7f5416a7a2b9fb0ce359dc
8 | - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
9 | newTag: v0.37.4
10 | digest: sha256:75eed87984074d54acdb34e30e79e70876ea0ee1887b52a0c0d93b99af5bbfc0
11 | - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 | newTag: v1.2.4
13 | digest: sha256:4f53a854780cc1658b202b896cd7d8c6195aab63603f402ebfe67945956fb251
14 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 | newTag: v0.31.2
16 | digest: sha256:38708963d37c27738865334c36b0548619810365adba6c08a71ead609f21ca2d
17 | - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 | newTag: v0.37.1
19 | digest: sha256:63dc5e97e671b2ddbf0105d2039d448d12dc4a49dadec3b6e4e5f4c4eefb7bc6
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.7.0/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.7.0
4 | digest: sha256:233e0a1e842cab6ad7d2ed876d39c03d80ba727f78a8b6f159f8b471eb31c1a4
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.7.0
7 | digest: sha256:0bd84aad45def5b8c5e1459835573d0d00b622cc611e301aaf910386de5fd82f
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.4.0
10 | digest: sha256:b7af2ce32c3869fe59ffbda8fb32e9e60e2581f19af043a32105404a517a6d7b
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.7.1
13 | digest: sha256:85f916e125b8dde26c70423025dab0523fe43219cf743f493722fee5c7f62208
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v1.0.1
16 | digest: sha256:5c72668cc9248883391218f3b329f08cfece2bcd570e1ac47fac62bfac153ec8
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v1.0.1
19 | digest: sha256:efbc480151bb1a853b35091131484c62c99fea40654c4e1e3cd7f2eab6c0d69c
20 | - name: ghcr.io/fluxcd/source-watcher
21 | newTag: v2.0.1
22 | digest: sha256:a601e4e1a4e4b21b469544bc083126c681e43e61822f8ca9d5b0ab89b06d2438
23 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.7.1/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.7.1
4 | digest: sha256:85a1d3844c22def063b9d4924a4539ef2d5d850a97be7e8b6cd3f62c5f80708a
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.7.0
7 | digest: sha256:0bd84aad45def5b8c5e1459835573d0d00b622cc611e301aaf910386de5fd82f
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.4.1
10 | digest: sha256:f52777118d3c21e745520ce9e8e8dbab086dd019311f7822f3ee36083af29b5a
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.7.2
13 | digest: sha256:3a5e67e69ee79a71206d076951046ec41f7c6d0f0ab6a9e65b7c0b387f0e4d98
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v1.0.1
16 | digest: sha256:5c72668cc9248883391218f3b329f08cfece2bcd570e1ac47fac62bfac153ec8
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v1.0.1
19 | digest: sha256:efbc480151bb1a853b35091131484c62c99fea40654c4e1e3cd7f2eab6c0d69c
20 | - name: ghcr.io/fluxcd/source-watcher
21 | newTag: v2.0.1
22 | digest: sha256:a601e4e1a4e4b21b469544bc083126c681e43e61822f8ca9d5b0ab89b06d2438
23 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.7.2/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.7.2
4 | digest: sha256:030e258b636fede22a41bcaea3ea4542035cc280b0c740f641c4c5efb904b980
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.7.1
7 | digest: sha256:2b51e7a48594263ece5d86636a9b95381b19fc3091e7341a88802f4557b35a53
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.4.2
10 | digest: sha256:32dd3ec7a138245ff4cd755439099c544f4ce3a55f95aa69a97106c05a661def
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.7.3
13 | digest: sha256:55813e89e49509e5a312682759b7a4d5235ecc2e13a1eb70f917faf769596b07
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v1.0.2
16 | digest: sha256:a2dba78aa10c1a3905652f6cea39c4fc9c9688755e63dc1f38a0a0306bda54ce
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v1.0.2
19 | digest: sha256:a28eccd31409191131377ecf888a168c59e9a72578e71139b81b146d813c8335
20 | - name: ghcr.io/fluxcd/source-watcher
21 | newTag: v2.0.2
22 | digest: sha256:188a1adb89a16f7fcdd4ed79855301ec71950dcc833b6e0b3d0a053743ecac85
23 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.7.3/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.7.3
4 | digest: sha256:5be9b7257270fa1a98c3c42af2f254a35bd64375e719090fe2ffc24915d8be06
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.7.2
7 | digest: sha256:477b4290a2fa2489bf87668bd7dcb77f0ae19bf944fef955600acbcde465ad98
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.4.3
10 | digest: sha256:d741dffd2a552b31cf215a1fcf1367ec7bc4dd3609b90e87595ae362d05d022c
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.7.4
13 | digest: sha256:350600b64cecb6cc10366c2bc41ec032fd604c81862298d02c303556a2fa6461
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v1.0.3
16 | digest: sha256:a5c718caddfae3022c109a6ef0eb6772a3cc6211aab39feca7c668dfeb151a2e
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v1.0.3
19 | digest: sha256:2577ace8d1660b77df5297db239e9cf30520b336f9a74c3b4174d2773211319d
20 | - name: ghcr.io/fluxcd/source-watcher
21 | newTag: v2.0.2
22 | digest: sha256:188a1adb89a16f7fcdd4ed79855301ec71950dcc833b6e0b3d0a053743ecac85
23 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.7.4/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.7.4
4 | digest: sha256:16f21ac1795528df80ddef51ccbb14a57b78ea26e66dc8551636ef9a3cec71b3
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.7.3
7 | digest: sha256:e8ca82d66dafdd8ef77e0917f4adec53478075130ac61264dc0f91eb0f8cb6ce
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.4.4
10 | digest: sha256:5eae73909e1471c0cd01bb23d87c9d4219a4f645134a23629c8708c72635398d
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.7.5
13 | digest: sha256:ba723a55f7c7c7feedd50bb5db0ff2dd9a3b0ae85b50f61a0457184025b38c54
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v1.0.4
16 | digest: sha256:0bdc30aea2b7cdfea02d0f6d53c06b9df0ea1c6516b85ed523792e222329c039
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v1.0.4
19 | digest: sha256:f9383dccb80ec65e274648941af623ce74084d25026e14389111c14b630efece
20 | - name: ghcr.io/fluxcd/source-watcher
21 | newTag: v2.0.3
22 | digest: sha256:9cd46c3c958dcfcd8a3c857fa09989f9df5d8396eae165f219cbb472343371a9
23 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.7.5/upstream-alpine.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/fluxcd/source-controller
3 | newTag: v1.7.4
4 | digest: sha256:16f21ac1795528df80ddef51ccbb14a57b78ea26e66dc8551636ef9a3cec71b3
5 | - name: ghcr.io/fluxcd/kustomize-controller
6 | newTag: v1.7.3
7 | digest: sha256:e8ca82d66dafdd8ef77e0917f4adec53478075130ac61264dc0f91eb0f8cb6ce
8 | - name: ghcr.io/fluxcd/helm-controller
9 | newTag: v1.4.5
10 | digest: sha256:d8d8fc2fb46c554e28071f1e4879be33491e71fdd3e0e41f61bb494a72c6dffc
11 | - name: ghcr.io/fluxcd/notification-controller
12 | newTag: v1.7.5
13 | digest: sha256:ba723a55f7c7c7feedd50bb5db0ff2dd9a3b0ae85b50f61a0457184025b38c54
14 | - name: ghcr.io/fluxcd/image-reflector-controller
15 | newTag: v1.0.4
16 | digest: sha256:0bdc30aea2b7cdfea02d0f6d53c06b9df0ea1c6516b85ed523792e222329c039
17 | - name: ghcr.io/fluxcd/image-automation-controller
18 | newTag: v1.0.4
19 | digest: sha256:f9383dccb80ec65e274648941af623ce74084d25026e14389111c14b630efece
20 | - name: ghcr.io/fluxcd/source-watcher
21 | newTag: v2.0.3
22 | digest: sha256:9cd46c3c958dcfcd8a3c857fa09989f9df5d8396eae165f219cbb472343371a9
23 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.3.0/enterprise-distroless.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
3 | newTag: v1.3.0
4 | digest: sha256:d07ffa2b751e072f39bbd9039de10a4c2311ac123615345d04748b1bed6f45dc
5 | - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
6 | newTag: v1.3.0
7 | digest: sha256:59a85ef8cba0243ea0ddf25a469d31b1c62b6cdf952a96827f7937114a444c86
8 | - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
9 | newTag: v1.0.1
10 | digest: sha256:80d454d29f88e7e8c4f73690c93b20cb51cc640d7de8c132bb9cf0f1ad7e067b
11 | - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 | newTag: v1.3.0
13 | digest: sha256:83c9604e0461bed335d33238b74cd02ec51fbcfdfc4ea66c62d83709e47598be
14 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 | newTag: v0.32.0
16 | digest: sha256:2afab1c81b844bfc826c17dc8053ac23a62213635806d86c3ed5fbfb9c325372
17 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 | newTag: v0.38.0
19 | digest: sha256:d520a53f7ebe5070db85d1cc3641d336f1b8b1fad04772e750b4e844ad233aa4
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.4.0/enterprise-distroless.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
3 | newTag: v1.4.1
4 | digest: sha256:f385f5d4cfc29219a014e213f3c45029c4c24dba60877a0e6265af70a4b5563b
5 | - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
6 | newTag: v1.4.0
7 | digest: sha256:c4322184920e16486aba2d5079d1075efbdea7ce6cf0bb9fec6f3d77f88408c2
8 | - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
9 | newTag: v1.1.0
10 | digest: sha256:998e71394d84c833c20c7c9b3f544ca137356418bc24ec39a364d57a0e192f23
11 | - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 | newTag: v1.4.0
13 | digest: sha256:0ac293f38255555a9abf6db5788974cae9ad5aadaa9cb0fe5b3ed41481ad1e8b
14 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 | newTag: v0.33.0
16 | digest: sha256:c8178d21346a347ad1d818439953d7ca5dfe9cf68cc4223598cd8ad490906f3e
17 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 | newTag: v0.39.0
19 | digest: sha256:c1f00e389f09ecced775c0f57544cd65938b3ed31d08d7ee8999ffa8b652b43b
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.5.0/enterprise-distroless.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
3 | newTag: v1.5.0
4 | digest: sha256:aafb79af6cd4236ee4644981c2bac6ba1061f945527da45ed93cebe75b14b626
5 | - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
6 | newTag: v1.5.0
7 | digest: sha256:5bfab74bb9216763aae812910b8d01deaf79495f6d992cf8e6d48178da6c9ae9
8 | - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
9 | newTag: v1.2.0
10 | digest: sha256:398756f9c0949a6f338bbd028950a4a526806f5fc35f8f26ac2bf7283bf702f6
11 | - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 | newTag: v1.5.0
13 | digest: sha256:99a27271d7d11615474d7636df1e30adf2c193cb02c67a1fa5c94d296d056aa4
14 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 | newTag: v0.34.0
16 | digest: sha256:83e9f7963b7723bc4501739369b5a762a838a5af4dcf8eb01b523c08730958a6
17 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 | newTag: v0.40.0
19 | digest: sha256:a5b29af6e3bb36791fe44ceedf461d7e3570a5dbc14a69acae7169d454f87ccd
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.5.1/enterprise-distroless.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
3 | newTag: v1.5.0
4 | digest: sha256:dcaccbce45744551dd4687b4741f99514357dce6407b522725ef481a78d3f914
5 | - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
6 | newTag: v1.5.1
7 | digest: sha256:22aad603278482cc636464b93ed1a4227cb00a386134eded3c81a2c6d7a7650e
8 | - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
9 | newTag: v1.2.0
10 | digest: sha256:24bc08d733e1b809396e4cca776c083902a5d3252ace7f318ff8c6e4ddb4bf1b
11 | - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 | newTag: v1.5.0
13 | digest: sha256:efeafc03d5911270eb48dedee692bfdcd9a174b3b68a56cf01e10b194e32ec94
14 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 | newTag: v0.34.0
16 | digest: sha256:f53a7e4d0dd7b34983b5f8e36ac9c627e2565d48a649543d859031532000be38
17 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 | newTag: v0.40.0
19 | digest: sha256:a60a43ef23e37bca2786b70529e735cac78f27657c46d04918ec66895ddfe7e0
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.0/enterprise-distroless.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
3 | newTag: v1.6.0
4 | digest: sha256:878d33009f083786f49277ec099574cdc9cfe2dc7c90ad7f3e21d85eadfb15a0
5 | - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
6 | newTag: v1.6.0
7 | digest: sha256:5a19ac1f83432324dcd72a2bb3f495c6705b1a36459411f7f48cc663541d7f45
8 | - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:ad1c8b8940e9bfcc0423c1cbc69fc5c86fcf28b8ffebf87f33ec1863e2017862
11 | - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:09e39990d635255f5ceba130b0c7feaf2b0c1e59d7c961f88012d0edb7d81c5c
14 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 | newTag: v0.35.0
16 | digest: sha256:76bf83b61e66693b1b63e68b5a6d8ea64e361096535f12124bb5ffd86d004e44
17 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 | newTag: v0.41.0
19 | digest: sha256:26c95d9b8949d940f2558aef716b1f0f6de451c81684214a35141c340243bfbd
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.1/enterprise-distroless.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
3 | newTag: v1.6.0
4 | digest: sha256:eb77b798abdd86bac53e3be11c8d2c34a23993b7b563c295f73e34bdef3c17bb
5 | - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
6 | newTag: v1.6.0
7 | digest: sha256:75fd952c2d82627d7bbda8094b8e17e432d377786de3750bb5f49ce1936ae50a
8 | - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:fb1cd8986b48de2e47210d6f089682c839dd691bbdd35ad7c04b6e77ea720fbb
11 | - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:bc4dfe33ce96cb648b8bd3100f6f8029448baa0f8ada303dbe816960db3ff4ef
14 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 | newTag: v0.35.1
16 | digest: sha256:4b521aa9cbb0b9bf4d3c97c6bf2555a0da3ea0b372a6c805bd7762b04d1b5f5c
17 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 | newTag: v0.41.0
19 | digest: sha256:0288741240fe3930570e788f0b550c199f5d2ba98d48945c72fcc2946dfee7af
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.2/enterprise-distroless.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
3 | newTag: v1.6.1
4 | digest: sha256:080a6ade134115787c6a680869820d9c09db29c281b0127020d5cb19e061cbee
5 | - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
6 | newTag: v1.6.0
7 | digest: sha256:9e0ba7efc1f8951657226a8522009f44cb31bfb8012c504a885a1a4c638fdc5a
8 | - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:826719c659d9f916f0e81c608da5b20a346beb08a8b67b9f8822b105bc7331ca
11 | - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:9343c0ccd294c28313d38fbcf1b33cfe8a8d1dd6e7f1afdc86015b46b6a0b70d
14 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 | newTag: v0.35.2
16 | digest: sha256:dfd1dcddbfc31a19d03042f6127af733dc8cae3ad028ec05ab50bfc1f33cf630
17 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 | newTag: v0.41.1
19 | digest: sha256:475462b5a1490685c71735855ec10869f02e5cbbd58035e23718b465a86f1a38
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.3/enterprise-distroless.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
3 | newTag: v1.6.2
4 | digest: sha256:9dacaa28d126306a2ac43baca52ec391ed80cf079d4c353c0f84f7ee9fe0f5de
5 | - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
6 | newTag: v1.6.0
7 | digest: sha256:e12ad8aaefe74a22dea930e1f0193ff3c7568ad3047a18f208d58422b2a1d772
8 | - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:6939c8d6b2663e4789477b6966368412a5a4b514582d76bcfb862f90a75d4fee
11 | - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:28f66ade1d08a87e31af9cbc91f435f75fe0666e9b19698e878b73e92519d281
14 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 | newTag: v0.35.2
16 | digest: sha256:b10cd6b78469a9aba4e7756db9297b862bad537922edddd708b16e5db1b3d80e
17 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 | newTag: v0.41.2
19 | digest: sha256:2cc8b4e965ea0a089f84adfbc457c72e7f319647fd1ae241e550ad422eb62c4e
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.4/enterprise-distroless.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
3 | newTag: v1.6.2
4 | digest: sha256:0f9dfb90c0af3948ebe133222a425050421e54fa8a130c80e4b54dd1da493479
5 | - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
6 | newTag: v1.6.1
7 | digest: sha256:3a3dd8711f38d08e271c579793ed70e0bfb8cd1d6acf003c3bb23aa921a9e6b0
8 | - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
9 | newTag: v1.3.0
10 | digest: sha256:44944017c7344cccf516c2ece54a672c566c4dfb520f240d7cfe650b92a7d595
11 | - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 | newTag: v1.6.0
13 | digest: sha256:8ed70694184364d1780685d0544c76d1afd5d8916f4420996015af3eed83500c
14 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 | newTag: v0.35.2
16 | digest: sha256:0bbddcbd6008f963b52538cb8403cf290fa9c38bc9effc33f23e7662fa85f0c0
17 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 | newTag: v0.41.2
19 | digest: sha256:63c8c9ee5ca1233d7c1bd9b2bad1c7b87d0e82c3c97ca7ce0e73581f8794330c
20 |
```
--------------------------------------------------------------------------------
/internal/builder/testdata/flux-images/v2.3.0/enterprise-distroless.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
3 | newTag: v1.3.0
4 | digest: sha256:3b34a63a635779b2b3ea67ec02f5925704dc93d39efc4b92243e2170907615af
5 | - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
6 | newTag: v1.3.0
7 | digest: sha256:d9facae045d079175245f6e596e3d614c71f4b3420e3e9b486ae99cb62549d27
8 | - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
9 | newTag: v1.0.1
10 | digest: sha256:54235750a3fd73836413eee0408fa7ab3b7546ed53ea5dc418780a40687af710
11 | - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 | newTag: v1.3.0
13 | digest: sha256:c1fcf015dcb9ace4f958fdf6fa11e8c05d896ed02fff1a8b138f3285bc9121d2
14 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 | newTag: v0.32.0
16 | digest: sha256:5c535a22048a277f160639ff34ddafa60093a09ee344684abfc5c16d041188f5
17 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 | newTag: v0.38.0
19 | digest: sha256:9da97e7b8b5d6d83ed0e0382387d0d7664f55673af98c80f85a0e37590991ce1
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.0/enterprise-distroless.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
3 | newTag: v1.2.2
4 | digest: sha256:747a50ab2d4e580391c17ed6ab2c0ebbcb76961f797a32e4fd59ab8f019ad049
5 | - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
6 | newTag: v1.2.0
7 | digest: sha256:a61dd20d2166b220bb13969b203784f614d19a309ef05882458a1f8ddf858738
8 | - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
9 | newTag: v0.37.0
10 | digest: sha256:2b72f51583dccf7a094610dc31d775849370ae9252dc05b2c69470af04777564
11 | - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 | newTag: v1.2.2
13 | digest: sha256:71bd2d46a4ca1615e6c4075f044aaa0949174d63d640c95f5c08e89f389310b0
14 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 | newTag: v0.31.1
16 | digest: sha256:403f3a9d572036ed250e936b77edd1ba74abad6f4b1baff96c5cbe13b3f40e3d
17 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 | newTag: v0.37.0
19 | digest: sha256:d67d37242fa3e2136c2578ec6e8cf5962209f66190f6240aef42e42f13f87d27
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.1/enterprise-distroless.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
3 | newTag: v1.2.3
4 | digest: sha256:7e30fdd3ea42ca2c62802a9573dc414042bbf44edc9d1c3d7498f2312427251b
5 | - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
6 | newTag: v1.2.1
7 | digest: sha256:fba9f78a65373a9c1d28394920893b495c5497d6aa108514f1fb9c34e3a08179
8 | - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
9 | newTag: v0.37.1
10 | digest: sha256:27d7d508de86cc287a7de853f21b5fb1744c6632f7035edd8c5e5b062ed7fee7
11 | - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 | newTag: v1.2.3
13 | digest: sha256:ce281c9b14cf73123ec5c6bf75d0b38691ecc5490df207b4c4677403c6792b20
14 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 | newTag: v0.31.1
16 | digest: sha256:403f3a9d572036ed250e936b77edd1ba74abad6f4b1baff96c5cbe13b3f40e3d
17 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 | newTag: v0.37.0
19 | digest: sha256:d67d37242fa3e2136c2578ec6e8cf5962209f66190f6240aef42e42f13f87d27
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.2/enterprise-distroless.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
3 | newTag: v1.2.3
4 | digest: sha256:7e30fdd3ea42ca2c62802a9573dc414042bbf44edc9d1c3d7498f2312427251b
5 | - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
6 | newTag: v1.2.1
7 | digest: sha256:fba9f78a65373a9c1d28394920893b495c5497d6aa108514f1fb9c34e3a08179
8 | - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
9 | newTag: v0.37.2
10 | digest: sha256:2bd468e5384babd9c0b2b96402cd6f4516f5c105cf35a948df2dda069301f3df
11 | - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 | newTag: v1.2.3
13 | digest: sha256:ce281c9b14cf73123ec5c6bf75d0b38691ecc5490df207b4c4677403c6792b20
14 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 | newTag: v0.31.1
16 | digest: sha256:403f3a9d572036ed250e936b77edd1ba74abad6f4b1baff96c5cbe13b3f40e3d
17 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 | newTag: v0.37.0
19 | digest: sha256:d67d37242fa3e2136c2578ec6e8cf5962209f66190f6240aef42e42f13f87d27
20 |
```
--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.3/enterprise-distroless.yaml:
--------------------------------------------------------------------------------
```yaml
1 | images:
2 | - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
3 | newTag: v1.2.5
4 | digest: sha256:afd50536255535b6d35d788b1f89d75c94425d50a11e66c15682bede7daf6cb7
5 | - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
6 | newTag: v1.2.2
7 | digest: sha256:1fce72172b5ef7b31c5b26bdcc146c3b45281b93a43c5b2cbec4729e1f1622fb
8 | - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
9 | newTag: v0.37.4
10 | digest: sha256:2ed8583845d069de4eee96eb3f3346ff414fd6554d80029da4c382d144255276
11 | - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 | newTag: v1.2.4
13 | digest: sha256:ef79170e2fa9be550b6e39ea95121058dfea47b36274a46165f7543890620ab2
14 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 | newTag: v0.31.2
16 | digest: sha256:813c3ec28a8bee973964c3ebe4e9f26e3de62ab153b1d03b39270d6efc031f57
17 | - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 | newTag: v0.37.1
19 | digest: sha256:36164f29b1e8ede8bd9ee45ddc494e5dabda1f5ab4d48ec72928a28e25292fac
20 |
```
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
```dockerfile
1 | # Build the operator binary using the Docker's Debian image.
2 | FROM --platform=${BUILDPLATFORM} golang:1.25 AS builder
3 | ARG VERSION
4 | ARG TARGETOS
5 | ARG TARGETARCH
6 | WORKDIR /workspace
7 |
8 | # Copy the Go Modules manifests.
9 | COPY go.mod go.mod
10 | COPY go.sum go.sum
11 |
12 | # Cache the Go Modules
13 | RUN go mod download
14 |
15 | # Copy the Go sources.
16 | COPY cmd/operator/main.go cmd/operator/main.go
17 | COPY api/ api/
18 | COPY internal/ internal/
19 | COPY web/embed.go web/embed.go
20 |
21 | # Copy web assets.
22 | COPY web/dist/ web/dist/
23 |
24 | # Build the operator binary.
25 | RUN CGO_ENABLED=0 GOFIPS140=latest GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} \
26 | go build -ldflags="-s -w -X main.VERSION=${VERSION}" -trimpath -a -o flux-operator cmd/operator/main.go
27 |
28 | # Run the operator binary using Google's Distroless image.
29 | FROM gcr.io/distroless/static:nonroot
30 | WORKDIR /
31 |
32 | # Copy the license.
33 | COPY LICENSE /licenses/LICENSE
34 |
35 | # Copy the manifests data.
36 | COPY config/data/ /data/
37 |
38 | # Copy the operator binary.
39 | COPY --from=builder /workspace/flux-operator .
40 |
41 | # Run the operator as a non-root user.
42 | USER 65532:65532
43 | ENTRYPOINT ["/flux-operator"]
44 |
```
--------------------------------------------------------------------------------
/internal/builder/testdata/resourceset/exclude.golden.yaml:
--------------------------------------------------------------------------------
```yaml
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: sre
5 | ---
6 | apiVersion: v1
7 | kind: Namespace
8 | metadata:
9 | name: dev
10 | ---
11 | apiVersion: v1
12 | kind: ServiceAccount
13 | metadata:
14 | name: flux
15 | namespace: sre
16 | ---
17 | apiVersion: v1
18 | kind: ServiceAccount
19 | metadata:
20 | name: flux
21 | namespace: dev
22 | ---
23 | apiVersion: rbac.authorization.k8s.io/v1
24 | kind: RoleBinding
25 | metadata:
26 | name: flux
27 | namespace: sre
28 | roleRef:
29 | apiGroup: rbac.authorization.k8s.io
30 | kind: ClusterRole
31 | name: admin
32 | subjects:
33 | - kind: ServiceAccount
34 | name: flux
35 | namespace: sre
36 | ---
37 | apiVersion: rbac.authorization.k8s.io/v1
38 | kind: RoleBinding
39 | metadata:
40 | name: flux
41 | namespace: dev
42 | roleRef:
43 | apiGroup: rbac.authorization.k8s.io
44 | kind: ClusterRole
45 | name: admin
46 | subjects:
47 | - kind: ServiceAccount
48 | name: flux
49 | namespace: dev
50 | ---
51 | apiVersion: rbac.authorization.k8s.io/v1
52 | kind: ClusterRoleBinding
53 | metadata:
54 | annotations:
55 | fluxcd.controlplane.io/reconcile: enabled
56 | name: flux-sre
57 | roleRef:
58 | apiGroup: rbac.authorization.k8s.io
59 | kind: ClusterRole
60 | name: cluster-admin
61 | subjects:
62 | - kind: ServiceAccount
63 | name: flux
64 | namespace: sre
65 | ---
66 |
```