{"id":13590572,"url":"https://github.com/flux-subsystem-argo/flamingo","last_synced_at":"2025-04-08T13:31:35.840Z","repository":{"id":39587350,"uuid":"465017104","full_name":"flux-subsystem-argo/flamingo","owner":"flux-subsystem-argo","description":"Flux Subsystem for Argo","archived":false,"fork":false,"pushed_at":"2024-11-11T12:03:06.000Z","size":244,"stargazers_count":653,"open_issues_count":20,"forks_count":43,"subscribers_count":12,"default_branch":"main","last_synced_at":"2024-11-16T01:13:33.198Z","etag":null,"topics":["argocd","devops","flux","flux2","fluxcd","gitops","kubernetes"],"latest_commit_sha":null,"homepage":"https://flux-subsystem-argo.github.io/website/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flux-subsystem-argo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-03-01T18:49:09.000Z","updated_at":"2024-11-15T18:44:53.000Z","dependencies_parsed_at":"2023-01-30T18:31:00.861Z","dependency_job_id":"0aefbb69-7671-404a-80dd-c4ba92feaf12","html_url":"https://github.com/flux-subsystem-argo/flamingo","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flux-subsystem-argo%2Fflamingo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flux-subsystem-argo%2Fflamingo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flux-subsystem-argo%2Fflamingo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flux-subsystem-argo%2Fflamingo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flux-subsystem-argo","download_url":"https://codeload.github.com/flux-subsystem-argo/flamingo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247851640,"owners_count":21006793,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["argocd","devops","flux","flux2","fluxcd","gitops","kubernetes"],"created_at":"2024-08-01T16:00:48.298Z","updated_at":"2025-04-08T13:31:30.830Z","avatar_url":"https://github.com/flux-subsystem-argo.png","language":"Go","funding_links":[],"categories":["Go","kubernetes"],"sub_categories":[],"readme":"# Flamingo - the Flux Subsystem for Argo\n\n\u003e 🚀🚀🚀 **BREAKING:** Introducing the new [Flamingo CLI](https://github.com/flux-subsystem-argo/flamingo)! 🚀🚀🚀\n\nFlamingo is the **Flux Subsystem for Argo** (FSA). Flamingo's container image can be used as a drop-in extension for the equivalent ArgoCD version to visualize, and manage Flux workloads, alongside ArgoCD. You can also ensure that upstream CVEs in Argo CD are quickly backported to Flamingo, maintaining a secure and stable environment.\n\n## Why use Flamingo?\n\nFlamingo is a tool that combines Flux and Argo CD to provide the best of both worlds for implementing GitOps on Kubernetes clusters. With Flamingo, you can:\n\n1. Automate the deployment of your applications to Kubernetes clusters and benefit from the improved collaboration and deployment speed and reliability that GitOps offers.\n\n2. Enjoy a seamless and integrated experience for managing deployments, with the automation capabilities of Flux embedded inside the user-friendly interface of Argo CD.\n\n3. Take advantage of additional features and capabilities that are not available in either Flux or Argo CD individually, such the robust Helm support from Flux, Flux OCI Repository, Weave GitOps Terraform Controller for Infrastructure as Code, Weave Policy Engine, or Argo CD ApplicationSet for Flux-managed resources.\n\nTry Flamingo today and see how it can improve your GitOps workflow on Kubernetes.\n\nThis provides a brief overview of the benefits of using Flamingo and why it could be a useful tool for implementing GitOps on Kubernetes clusters. Of course, you may want to tailor this to your specific use case and requirements, but this should give you a good starting point.\n\n## How does it work?\n\n**Loopback Reconciliation** is a feature of Flamingo that helps to synchronize applications deployed using the GitOps approach. It is activated when the \"FluxSubsystem\" feature is enabled in the ArgoCD user interface (UI).\n\nHere's how Loopback Reconciliation works:\n\n1. An ArgoCD application manifest is created and deployed to a cluster, either in Kustomization or Helm mode.\n\n2. Flamingo converts the ArgoCD application manifest into the equivalent Flux object, either a Kustomization object or a HelmRelease object with a Source, depending on the mode used in the ArgoCD manifest. If Flux objects already exist for the application, Flamingo will use them as references instead of creating new ones.\n\n3. Flamingo synchronizes or reconciles the state of the ArgoCD application with its Flux counterparts by using the state of the Flux objects as the desired state. To do this, the Loopback Reconciliation mechanism bypasses the native reconciliation process in ArgoCD and relies on Flux reconciliation instead. It then uses the result from the Flux objects to report back to ArgoCD.\n\nLoopback Reconciliation helps to ensure the reliability and consistency of GitOps-based deployments by keeping the state of applications in sync with their desired state defined in the Flux objects. The technique gets its name because it involves \"looping back\" to the desired state defined in the Flux objects as references to reconcile the state of the application.\n\n![FSA (2)](https://user-images.githubusercontent.com/10666/159503288-5faeda59-8b54-40f0-95ca-b46c22742e30.png)\n\n## Getting Started with Flamingo CLI\n\nThis guide will provide a step-by-step process for setting up a GitOps environment using Flux and ArgoCD, via Flamingo. By the end of this guide, you will have Flamingo running locally on your KIND cluster. You will create a `podinfo` application with a Flux Kustomization, and generate a Flamingo app from this Flux object.\n\n### Install CLIs\n\n- [KIND CLI](https://kind.sigs.k8s.io/docs/user/quick-start/#installation) \n- [Flux CLI](https://fluxcd.io/docs/cmd/)\n- [Flamingo CLI](https://github.com/flux-subsystem-argo/flamingo)\n\nExample install in macOS or Linux via [homebrew](https://brew.sh/)\n\n```shell\n# install KIND cli\nbrew install kind\n\n# install Flux CLI\nbrew install fluxcd/tap/flux\n\n# install Flamingo CLI \n# with Homebrew\nbrew install flux-subsystem-argo/tap/flamingo\n\n# or with cURL\ncurl -sL https://raw.githubusercontent.com/flux-subsystem-argo/flamingo/main/install/flamingo.sh | sudo bash\n```\n\n### Create a fresh KIND cluster\n\n```shell\nkind create cluster\n```\n\n### Install **Flux**\n\n```shell\nflux install\n```\n\n### Install **Flamingo**\n\n#### Install **Flamingo** via CLI\n\n```shell\nflamingo install\n```\n\n```shell\n# or with a specific version\nflamingo install --version=v2.8.4\n```\n\n#### Install **Flamingo** with HelmRelease\n\n```yaml\ncat \u003c\u003c EOF | kubectl apply -f -\n---\napiVersion: v1\nkind: Namespace\nmetadata:\n  name: argocd\n---\napiVersion: source.toolkit.fluxcd.io/v1beta2\nkind: HelmRepository\nmetadata:\n  name: argo-helm-repo\n  namespace: argocd\nspec:\n  interval: 10m\n  url: https://argoproj.github.io/argo-helm\n---\napiVersion: helm.toolkit.fluxcd.io/v2beta2\nkind: HelmRelease\nmetadata:\n  name: flamingo\n  namespace: argocd\nspec:\n  interval: 10m\n  targetNamespace: argocd\n  releaseName: argocd\n  chart:\n    spec:\n      chart: argo-cd\n      version: '*'\n      sourceRef:\n        kind: HelmRepository\n        name: argo-helm-repo\n  values:\n    global:\n      image:\n        repository: ghcr.io/flux-subsystem-argo/fsa/argocd\n        tag: v2.10.2-fl.23-main-d2c9a8cb # replace with the latest version\nEOF\n```\n\nIf you want to see Flamingo itself as an application, run:\n\n```shell\nflamingo gen-app --app-name=flamingo -n argocd hr/flamingo\n```\n\n### Example workloads\n\n#### Create a **Flux Kustomization**\n\n```yaml\ncat \u003c\u003c EOF | kubectl apply -f -\n---\napiVersion: v1\nkind: Namespace\nmetadata:\n  name: podinfo-kustomize\n---\napiVersion: source.toolkit.fluxcd.io/v1beta2\nkind: OCIRepository\nmetadata:\n  name: podinfo\n  namespace: podinfo-kustomize\nspec:\n  interval: 10m\n  url: oci://ghcr.io/stefanprodan/manifests/podinfo\n  ref:\n    tag: latest\n---\napiVersion: kustomize.toolkit.fluxcd.io/v1\nkind: Kustomization\nmetadata:\n  name: podinfo\n  namespace: podinfo-kustomize\nspec:\n  interval: 10m\n  targetNamespace: podinfo-kustomize\n  prune: true\n  sourceRef:\n    kind: OCIRepository\n    name: podinfo\n  path: ./\nEOF\n```\n\nTo generate a Flamingo application to visualize the `podinfo` objects, run:\n\n```shell\nflamingo generate-app \\\n  --app-name=podinfo-ks \\\n  -n podinfo-kustomize ks/podinfo\n```\n\n#### Create a **Flux HelmRelease**\n\n```shell\ncat \u003c\u003c EOF | kubectl apply -f -\n---\napiVersion: v1\nkind: Namespace\nmetadata:\n  name: podinfo-helm\n---\napiVersion: source.toolkit.fluxcd.io/v1beta2\nkind: HelmRepository\nmetadata:\n  name: podinfo\n  namespace: podinfo-helm\nspec:\n  interval: 10m\n  type: oci\n  url: oci://ghcr.io/stefanprodan/charts\n---\napiVersion: helm.toolkit.fluxcd.io/v2beta2\nkind: HelmRelease\nmetadata:\n  name: podinfo\n  namespace: podinfo-helm\nspec:\n  interval: 10m\n  targetNamespace: podinfo-helm\n  chart:\n    spec:\n      chart: podinfo\n      version: '*'\n      sourceRef:\n        kind: HelmRepository\n        name: podinfo\n      verify:\n        provider: cosign # keyless\nEOF\n```\n\n```shell\nflamingo generate-app \\\n  --app-name=podinfo-hr \\\n  -n podinfo-helm hr/podinfo\n```\n\nLike a normal Argo CD instance, please firstly obtain the initial password by running the following command to login.\nThe default username is `admin`.\n\n```shell\nflamingo show-init-password\n```\n\nAfter that you can port forward and open your browser to http://localhost:8080\n\n```shell\nkubectl -n argocd port-forward svc/argocd-server 8080:443\n```\n\n## Multi-cluster support\n\n### What is Flamingo multi-cluster support?\n\nFlamingo multi-cluster is a feature designed to visualize multiple Flux clusters in the Flamingo UI.\nWe use ArgoCD cluster secrets to store cluster information for Flamingo multi-cluster support.\nTo list clusters, use the following command:\n\n```shell\nflamingo list-clusters\n```\n\nTo register a Kubernetes cluster with Flamingo, simply use the `add-cluster` command.\nFor example, the following command adds the `dev-1` cluster definition from the `KUBECONFIG` file, then overrides the server name and server address, and sets it to skip TLS verification.\n\n```shell\nflamingo add-cluster dev-1 \\\n  --server-name=dev-1.vcluster-dev-1 \\\n  --server-addr=https://dev-1.vcluster-dev-1.svc \\\n  --insecure\n```\n\nThis `add-cluster` command currently supports adding a cluster with static credentials, such as client certs and client keys (like Vclusters), but does not yet support authentication via KubeClient plugins. For clusters like EKS and others, you need to create cluster secrets manually.\n\nTo generate applications from Flux workloads on leaf clusters, the flamingo `generate-app` command has been extended to support the resource format as `cluster/kind/object-name`, for example:\n\n```shell\nflamingo generate-app \\\n  dev-1/ks/podinfo\n```\n\nThe above command will generate an application named `podinfo` from the `ks` resource on the `dev-1` cluster.\nThis `generate-app` command uses Flamingo cluster information to connect to the leaf cluster and generate the application.\nCurrently, this command only supports static cluster credentials with client certs and keys.\nFor dynamic cluster credentials like in EKS and others, you would use the `--context` flag to select the Kube's context for the leaf cluster and generate the application with the `--server` flag to override the destination cluster, like:\n\n```shell\nflamingo generate-app \\\n  --context=dev-1 \\\n  --server=https://dev-1.vcluster-dev-1.svc \\\n  ks/podinfo --export | kubectl apply -f -\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflux-subsystem-argo%2Fflamingo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflux-subsystem-argo%2Fflamingo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflux-subsystem-argo%2Fflamingo/lists"}