{"id":28098646,"url":"https://github.com/target/impeller","last_synced_at":"2025-08-24T09:23:18.693Z","repository":{"id":34748517,"uuid":"150317781","full_name":"target/impeller","owner":"target","description":"Manage Helm charts in Kubernetes clusters.","archived":false,"fork":false,"pushed_at":"2025-08-16T19:50:32.000Z","size":147,"stargazers_count":16,"open_issues_count":4,"forks_count":7,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-08-18T12:49:00.261Z","etag":null,"topics":["helm","kubernetes"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/target.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2018-09-25T19:21:48.000Z","updated_at":"2025-06-16T14:04:01.000Z","dependencies_parsed_at":"2023-10-04T21:11:34.466Z","dependency_job_id":"ca6938ec-87d4-40b3-888c-5638902d25e3","html_url":"https://github.com/target/impeller","commit_stats":{"total_commits":92,"total_committers":6,"mean_commits":"15.333333333333334","dds":"0.44565217391304346","last_synced_commit":"93450cb2dfb559b800d38b5cc7fb5e8f91437158"},"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/target/impeller","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/target%2Fimpeller","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/target%2Fimpeller/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/target%2Fimpeller/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/target%2Fimpeller/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/target","download_url":"https://codeload.github.com/target/impeller/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/target%2Fimpeller/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270997499,"owners_count":24682061,"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","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["helm","kubernetes"],"created_at":"2025-05-13T17:58:31.133Z","updated_at":"2025-08-24T09:23:18.670Z","avatar_url":"https://github.com/target.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# impeller\n\nManages Helm charts running in Kubernetes clusters.\n[![CI-dev-pipeline](https://github.com/target/impeller/actions/workflows/ci-dev-pipeline.yaml/badge.svg)](https://github.com/target/impeller/actions/workflows/ci-dev-pipeline.yaml)\n[![Publish Docker image](https://github.com/target/impeller/actions/workflows/docker-image.yml/badge.svg)](https://github.com/target/impeller/actions/workflows/docker-image.yml)\n[![Docker Hub](https://img.shields.io/docker/pulls/target/impeller.svg)](https://hub.docker.com/r/target/impeller)\n[![Latest Release](https://img.shields.io/github/release/target/impeller.svg)](https://github.com/target/impeller/releases)\n[![MIT License](https://img.shields.io/github/license/target/impeller.svg)](https://github.com/target/impeller/blob/master/LICENSE)\n\n## Use Cases\n### Managing multiple Helm charts\n* Use declarative configurations to specify the versions of Helm charts running in your cluster.\n* Easily override chart values and commit your changes to source control.\n* Use charts from multiple Helm repos.\n\n### Managing multiple Kubernetes clusters\n* Use different charts and different versions in each cluster.\n* Share chart overrides across clusters with a `default.yaml` file.\n* Make cluster-specific chart overrides when necessary.\n\n### Other features\n* Use it as a [Drone](https://drone.io/) plugin for CI/CD.\n* Read secrets from environment variables.\n* Deploy helm charts with helm/tiller or independently with kubectl\n\n## How to use\n### Command line\n1. Deployment command:\n\n```bash\nimpeller --cluster-config-path=./clusters/my-cluster.yaml --kube-config=\"$(cat ~/.kube/config)\" --kube-context my-kubernetes-context\n```\n\nor using `base64` encoded `kubeconfig`:\n\n```bash\nimpeller --cluster-config-path=./clusters/my-cluster.yaml --kube-config=\"$(base64 ~/.kube/config)\" --kube-context my-kubernetes-context --kube-config-base64=true\n```\n2. Dry run command:\n```bash\n impeller --cluster-config-path=./clusters/my-cluster.yaml --kube-config=\"$(cat ~/.kube/config)\" --kube-context my-kubernetes-context --dry-run\n ```\nBy default override values are hidden with `--dry-run` option. You can add `showValue: true` to your release to enable printout:\n```bash\nreleases:\n  - name: test-release\n    namespace: kube-system\n    version: ~x.x.x\n    overrides:\n      - target: global.tag\n        showValue: true\n        value: 1.6.0\n```\n3. Diff run command:\n```bash\nimpeller --cluster-config-path=./clusters/my-cluster.yaml --kube-config=\"$(cat ~/.kube/config)\" --kube-context my-kubernetes-context --diff-run\n```\n4. Generate Audit report file:\n```bash\nimpeller --cluster-config-path=./clusters  --audit=true\n```\nor\n```bash\nimpeller --cluster-config-path=./clusters  --audit=true --audit-file=./myreport.csv\n```\n\n### Drone pipeline\n#### Simple example\nThis example Drone pipeline shows how to manage a single clusters. Updates are automatically deployed on a push/merge to master.\n\n```yaml\ndeploy-charts:\n  when:\n    event: push\n    branch: master\n  image: path-to-docker/image:version\n  cluster_config: clusters/my-cluster-name.yaml\n  kube_context: my-kubernetes-context\n  secrets:\n    - source: my-kube-config-drone-secret\n      target: KUBE_CONFIG\n```\n\n#### Multi-cluster example\nThis example demonstrates managing multiple clusters with a Drone matrix. Updates will be automatically deployed to test clusters when commit is pushed/merged to master. Production clusters can be deployed to manually by using a `drone deploy` command, allowing additional control over which versions reach production.\n\n```yaml\nmatrix:\n  include:\n    - cluster: my-prod-cluster-1\n      stage: prod\n    - cluster: my-prod-cluster-2\n      stage: prod\n    - cluster: my-test-cluster-1\n      stage: test\n    - cluster: my-test-cluster-2\n      stage: test\n\npipeline:\n  deploy-charts-prod:\n    when:\n      event: deployment\n      matrix:\n        stage: prod\n        cluster: ${DRONE_DEPLOY_TO}\n    image: path-to-docker/image:version\n    cluster_config: clusters/${cluster}.yaml\n    kube_context: ${cluster}\n    secrets:\n      - source: my-kube-config-drone-secret\n        target: KUBE_CONFIG\n\n  deploy-charts-test:\n    when:\n      event: push\n      branch: master\n    image: path-to-docker/image:version\n    cluster_config: clusters/${cluster}.yaml\n    kube_context: ${cluster}\n    secrets:\n      - source: my-kube-config-drone-secret\n        target: KUBE_CONFIG\n```\n\n## Files and Directory Layout\n```\n chart-configs/\n |- clusters/\n    |- my-cluster-name.yaml\n    |- my-other-cluster-name.yaml\n |- values/\n    |- cluster-autoscaler/            # the release name from your cluster file\n       |- default.yaml                # overrides for all clusters\n       |- my-cluster-name.yaml        # overrides for a specific cluster\n       |- my-other-cluster-name.yaml\n    |- my-chart/\n       |- default.yaml\n```\n\nclusters/my-cluster-name.yaml:\n```yaml\nname: my-cluster-name  # This is used to find cluster-specific override files\nhelm:\n  defaultHistory: 3  # Optional; sets the --history-max flag for the \"helm\" deployment method on all releases\n  log: 5 # specifies log level\n  debug: flase # enables debug level logging\n  repos:  # Make Helm aware of any repos you want to use\n    - name: stable\n      url: https://kubernetes-charts.storage.googleapis.com/\n    - name: private-repo\n      url: https://example.com/my-private-repo/\nreleases:\n  - name: cluster-autoscaler  # Specify the release name\n    chartPath: stable/cluster-autoscaler  # Specify the chart source\n    namespace: kube-system  # Specify the namespace where to install\n    version: 0.7.0  # Specify the version of the chart to install\n    deploymentMethod: helm # Specify how the chart should be installed (\"helm\" or \"kubectl\")\n    history: 3  # Optional; sets the --history-max flag for the \"helm\" deployment method for this release\n  - name: my-chart\n    chartPath: private-repo/my-chart\n    namespace: kube-system\n    version: ~1.x  # Supports the same syntax as Helm's --version flag\n    deploymentMethod: kubectl\n```\n\nIn the above example, the `deploymentMethod` option allows configuration of how Helm charts are deployed. Two methods are available:\n* `helm`: This option uses Helm's normal installation method (which is to have the Tiller pod create the resources declared in your chart).\n* `kubectl`: If you do not want to run a Tiller pod in your cluster, you can use this option to run `helm template` to convert a chart to Kubernetes manifests and then use `kubectl` to apply that manifest.\n\nvalues/my-chart/default.yaml:\n```yaml\n# Place any overrides here, just as you would with Helm.\n# This file will be passed as an override to Helm.\nresources:\n  cpu:\n    requests: 100m\n    limits: 200m\n  memory:\n    requests: 1Gi\n    limits: 1Gi\n```\n\n### Deploying Release from tar file\n\n1. Add `chartsSource` field to the `release` to make impeller download charts tar archive\n1. Set `chartPath` to point to extracted chart location.\n\n```\nreleases:\n  - name: istio-base\n    namespace: kube-system\n    version: ~x.x.x\n    chartPath: \"./downloads/istio-1.6.0/manifests/charts/base\"\n    chartsSource: \"https://github.com/istio/istio/releases/download/1.6.0/istio-1.6.0-linux-amd64.tar.gz\"\n```\n\n## Additional examples\n\n### Setup cluster file to setup helm repos only once\n\nYou have an option to skip setting up Helm Repo's by setting `SkipSetupHelmRepo` to `true` in the cluster configuration file.\nThis is useful when you run multiple cluster deployment in parallel and want to configure helm repos only once.\n1. Setup file with only helm repos used in all other cluster files, example:\n```yaml\nname: setup-helm-repos  # This is used to find cluster-specific override files\nhelm:\n  skipSetupHelmRepo: false # Optional;\n  defaultHistory: 3  # Optional; sets the --history-max flag for the \"helm\" deployment method on all releases\n  log: 5 # specifies log level\n  debug: flase # enables debug level logging\n  repos:  # Make Helm aware of any repos you want to use\n    - name: stable\n      url: https://kubernetes-charts.storage.googleapis.com/\n    - name: private-repo\n      url: https://example.com/my-private-repo/\nreleases:\n```\n2. Set  helm repos used in all other cluster files to `repos: {}`, example:\n\n\n```yaml\nname: my-cluster-name1  # This is used to find cluster-specific override files\nhelm:\n  skipSetupHelmRepo: true # Optional;\n  defaultHistory: 3  # Optional; sets the --history-max flag for the \"helm\" deployment method on all releases\n  log: 5 # specifies log level\n  debug: flase # enables debug level logging\n  repos: {} # Make Helm aware of any repos you want to use\nreleases:\n```\n\n### Override values with environment variables\nOverride a single value using Helm's `--set` feature.\n\n\nAdd the following release to your cluster YAML file:\n```yaml\n- name: release-name\n  namespace: default\n  version: 1.0.0\n  chartPath: repo/chart-name\n  overrides:\n    - target: tls.key\n      showValue: false\n      valueFrom:\n        environment: KEY\n```\n\nIf you set `showValue` to `true`, the value of the environment variable will logged to `stdout` for debugging purposes. By default, the value is redacted.\n\n### Override values with files\nOverride a single value from a file using Helm's `--set-file` feature.\n\nAdd the following release to your cluster YAML file:\n```yaml\n- name: release-name\n  namespace: default\n  version: 1.0.0\n  chartPath: repo/chart-name\n  overrides:\n    - target: tls.key\n      valueFrom:\n        file: /path/to/key\n```\n\nBecause the value is not logged, `showValue` has no effect when setting values from file. The file path is always logged to `stdout`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftarget%2Fimpeller","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftarget%2Fimpeller","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftarget%2Fimpeller/lists"}