{"id":13839298,"url":"https://github.com/keikoproj/addon-manager","last_synced_at":"2026-01-14T17:49:57.101Z","repository":{"id":35172231,"uuid":"202055716","full_name":"keikoproj/addon-manager","owner":"keikoproj","description":"Manage addons in a Kubernetes cluster","archived":false,"fork":false,"pushed_at":"2025-08-12T21:11:30.000Z","size":849,"stargazers_count":71,"open_issues_count":13,"forks_count":25,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-08-14T14:12:10.551Z","etag":null,"topics":["addons","k8s","kubernetes"],"latest_commit_sha":null,"homepage":"","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/keikoproj.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-08-13T03:20:48.000Z","updated_at":"2025-06-17T19:26:12.000Z","dependencies_parsed_at":"2024-05-31T20:41:40.434Z","dependency_job_id":"26257c24-a588-498d-8986-f88d7d4f4a61","html_url":"https://github.com/keikoproj/addon-manager","commit_stats":null,"previous_names":["orkaproj/addon-manager"],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/keikoproj/addon-manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keikoproj%2Faddon-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keikoproj%2Faddon-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keikoproj%2Faddon-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keikoproj%2Faddon-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/keikoproj","download_url":"https://codeload.github.com/keikoproj/addon-manager/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keikoproj%2Faddon-manager/sbom","scorecard":{"id":553872,"data":{"date":"2025-08-11","repo":{"name":"github.com/keikoproj/addon-manager","commit":"bd53490a9192f8fd5c870826af30d7f94ff26b52"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.9,"checks":[{"name":"Code-Review","score":6,"reason":"Found 7/11 approved changesets -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:28","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:29","Warn: no topLevel permission defined: .github/workflows/codeql.yml:1","Warn: no topLevel permission defined: .github/workflows/pr-gate.yml:1","Warn: no topLevel permission defined: .github/workflows/push.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":1,"reason":"2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/codeql.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr-gate.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/pr-gate.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr-gate.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/pr-gate.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pr-gate.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/pr-gate.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr-gate.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/pr-gate.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pr-gate.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/pr-gate.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pr-gate.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/pr-gate.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pr-gate.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/pr-gate.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pr-gate.yml:70: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/pr-gate.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/push.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/push.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/push.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/push.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/push.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/push.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/push.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/push.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/push.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/push.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/push.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/keikoproj/addon-manager/push.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:25","Info:   0 out of  10 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   8 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.9.0 not signed: https://api.github.com/repos/keikoproj/addon-manager/releases/225981569","Warn: release artifact v0.8.2 not signed: https://api.github.com/repos/keikoproj/addon-manager/releases/159970650","Warn: release artifact v0.8.1 not signed: https://api.github.com/repos/keikoproj/addon-manager/releases/127271149","Warn: release artifact v0.8.0 not signed: https://api.github.com/repos/keikoproj/addon-manager/releases/121785269","Warn: release artifact v0.9.0 does not have provenance: https://api.github.com/repos/keikoproj/addon-manager/releases/225981569","Warn: release artifact v0.8.2 does not have provenance: https://api.github.com/repos/keikoproj/addon-manager/releases/159970650","Warn: release artifact v0.8.1 does not have provenance: https://api.github.com/repos/keikoproj/addon-manager/releases/127271149","Warn: release artifact v0.8.0 does not have provenance: https://api.github.com/repos/keikoproj/addon-manager/releases/121785269"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/pr-gate.yml:38"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 2 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T11:46:53.536Z","repository_id":35172231,"created_at":"2025-08-20T11:46:53.536Z","updated_at":"2025-08-20T11:46:53.536Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28428954,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T16:38:47.836Z","status":"ssl_error","status_checked_at":"2026-01-14T16:34:59.695Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["addons","k8s","kubernetes"],"created_at":"2024-08-04T17:00:18.233Z","updated_at":"2026-01-14T17:49:57.086Z","avatar_url":"https://github.com/keikoproj.png","language":"Go","funding_links":[],"categories":["Cluster"],"sub_categories":[],"readme":"# Addon Manager\n[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)][GithubMaintainedUrl]\n[![PR](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)][GithubPrsUrl]\n[![slack](https://img.shields.io/badge/slack-join%20the%20conversation-ff69b4.svg)][SlackUrl]\n\n![version](https://img.shields.io/badge/api-v1alpha1-blue.svg?cacheSeconds=2592000)\n[![Build Status][BuildStatusImg]][BuildMasterUrl]\n[![codecov][CodecovImg]][CodecovUrl]\n[![Go Report Card][GoReportImg]][GoReportUrl]\n\nAddons are critical components within a Kubernetes cluster that provide critical services needed by applications like \nDNS, Ingress, Metrics, Logging, etc. Addon Manager provides a CRD for lifecycle management of such addons using \nArgo Workflows.\n\n![AddonManagerImg]\n\n## Important!\nThis is Alpha state software, anything can change at any time. Our deprecation and removal policy during Alpha is very aggressive, see below:\n* Any changes to the api types will result in an iterative version bump e.g., `v1alpha1` -\u003e `v1alpha2`\n* API versions will **NOT** be backward compatible, all new api versions will immediately replace the older version\n* All api kinds within the group `addonmgr.keikoproj.io` will be versioned the same e.g., `v1alphaX` \n\n## Dependencies\n* kubernetes-1.12+\n* kubectl-1.14+\n\n## Installation\nTo use: `kubectl kustomize github.com/keikoproj/addon-manager.git/config/default | kubectl apply -f -`\n\n## Usage example\nAn Addon describes a kubernetes resource-based application that is deployed to a cluster. The Addon CRD defines a spec \nwith some optional and required fields, and a lifecycle where most of the addon may be contained. Internally, \nArgo Workflows is used for each lifecycle step to specify and submit the resources. \nThe design spec for the Addon CRD is as follows:\n\n```yaml\napiVersion: addonmgr.keikoproj.io/v1alpha1\nkind: Addon\nmetadata:\n  name: fluentd-addon\n  namespace: addon-manager-system\nspec:\n  pkgName: core/fluentd\n  pkgVersion: v0.0.1\n  pkgType: composite\n  pkgDescription: Company fluentd addon.\n  pkgDeps: \n    argoproj/workflows: v2.2.1\n  params:\n    namespace: mynamespace\n    clusterContext:\n      clusterName: \"my-test-cluster\"\n      clusterRegion: \"us-west-2\"\n    data:\n      hec_splunk_server: hec.splunk.example.com\n  selector:\n    matchLabels:\n      app.kubernetes.io/name: fluentd\n      app.kubernetes.io/version: \"1.0.0\"\n  lifecycle:\n    prereqs:\n      template: |\n        apiVersion: argoproj.io/v1alpha1\n        kind: Workflow\n        ...\n    install:\n      template: |\n        apiVersion: argoproj.io/v1alpha1\n        kind: Workflow\n        ...\n    delete:\n      template: | \n        apiVersion: argoproj.io/v1alpha1\n        kind: Workflow\n        ...\n    validate:\n      template: |\n        apiVersion: argoproj.io/v1alpha1\n        kind: Workflow\n        ...\n```\nTo submit: `kubectl apply -f addon.yaml`\n\nThe 4 stages of the addon lifecycle (prereqs, install, validate, delete) have 3 fields, Name, Role, and Template. \nThe template is specified as an inline \u003ca href=\"https://github.com/argoproj/argo/\" target=\"_blank\"\u003eArgo Workflow ![alt [^]][ext_link]\u003c/a\u003e. The workflow should specify the Kubernetes resources being \nsubmitted as part of each step, and include the appropriate kubernetes client commands that submit those resources to \nthe server. Here's an example of such\n\n```yaml\n...\n    prereqs:\n      template: |\n        apiVersion: argoproj.io/v1alpha1\n        kind: Workflow\n        metadata:\n          generateName: prereqs-minion-manager-\n        spec:\n          entrypoint: entry\n          serviceAccountName: addon-manager-workflow-installer-sa\n          templates:\n          - name: entry\n            steps:\n            - - name: prereq-resources\n                template: submit\n                arguments:\n                  artifacts:\n                  - name: doc\n                    path: /tmp/doc\n                    raw:\n                      data: |\n                        apiVersion: v1\n                        kind: Namespace\n                        metadata:\n                          name: \"{{workflow.parameters.namespace}}\"\n                        ---\n                        apiVersion: v1\n                        kind: ServiceAccount\n                        metadata:\n                          name: example-sa\n                          namespace: \"{{workflow.parameters.namespace}}\"\n          - name: submit\n            inputs:\n              artifacts:\n                - name: doc\n                  path: /tmp/doc\n            container:\n              image: expert360/kubectl-awscli:v1.11.2\n              command: [sh, -c]\n              args: [\"kubectl apply -f /tmp/doc\"]\n```\n\nThe Addon Manager provides parameter injection to all lifecycle workflows to get rid of the need to input the parameters \ninto each workflow. Before the workflows are run, all key-value pairs in the addon spec.params are made into global \nworkflow parameters. This means their values are accessible like so: \"{{workflow.parameters.NAME}}\". It's important to \nmake sure when referencing parameters that the templated value is escaped, either with quotes or if it's included in a \nstring literal; if this is not done, you may experience a failed workflow due to the worflow failing to be parsed \ncorrectly.\n\nGenerally, there are a set of best practices defined that make defining an Addon CR straightforward:\n* Each addon (with a few exceptions) should be deployed to its own namespace. This is done by specifying a namespace name \nin `spec.params.namespace`, and then templating that into each lifecycle workflow where there are namespaced resources, \nlike in the example above.\n* Best-practice for the prereqs lifecycle step workflow: if the addon has any namespaced resources, the namespace in \nquestion should be specified first in the prereqs workflow. Following the namespace, all other non-deployable resources \nshould be specified by priotity in the prereqs workflow as well.\n* Best-practice for the install lifecycle step workflow: all deployable resources (deployments, services, statefulsets, \nreplicasets, daemonsets, etc.) should be supplied as part of this workflow.\n\n### Get Addons\n```bash\nkubectl get addons -n addon-manager-system\n\nNAME                       PACKAGE                    VERSION       STATUS           AGE\naddon-manager-argo-addon   addon-argo-workflow        v2.2.1        Succeeded        14m\ncluster-autoscaler         cluster-autoscaler-addon   v0.1          Pending          1m\nevent-router               event-router               v0.2          Pending          1m\nexternal-dns               external-dns               v0.2          Pending          1m\nfluentd                    core/fluentd-addon         v0.0.1        Pending          1m\n...\n```\n\n### Delete Addon\nTo delete: `kubectl delete -f addon.yaml`\n\n## Addonctl\nThe Addon Manager is distributed with the addonctl binary which allows a default Addon CR generation given spec \nparameters yaml resource files, and python scripts. Pre-alpha currently, this tool can be more useful for initial addon \ngeneration, allowing the user to then manually modify it. \n\nTo use: `addonctl --help`\n```bash\nA control plane for managing addons\n\nUsage:\n  addonctl [command]\n\nAvailable Commands:\n  create      Create the addon resource with the supplied arguments\n  help        Help about any command\n\nFlags:\n  -c, --channel string          Channel for the addon package\n      --cluster-name string     Name of the cluster context being used\n      --cluster-region string   Cluster region\n      --deps string             Comma seperated dependencies list in the format 'pkgName:pkgVersion'\n      --desc string             Description of the addon\n      --dryrun                  Outputs the addon spec but doesn't submit\n  -h, --help                    help for addonctl\n      --install string          File or directory of resource yaml to submit as install step\n  -n, --namespace string        Namespace where the addon will be deployed\n  -p, --params string           Params to supply to the resource yaml\n      --prereqs string          File or directory of resource yaml to submit as prereqs step\n      --secrets string          Comma seperated list of secret names which are validated as part ofthe addon-manager-system namespace\n      --selector string         Selector applied to all resources?\n  -t, --type string             Addon package type\n  -v, --version string          Addon package version\n\nUse \"addonctl [command] --help\" for more information about a command.\n```\n\n### Addonctl Example\n```bash\naddonctl create my-addon -n my-addon-ns \\\n  --type composite \\\n  --version v0.2 \\\n  --cluster-name my.cluster.k8s.local \\\n  --cluster-region us-west-2 \\\n  --selector app:myaddon \\\n  --prereqs ./prereq_resources.yaml \\\n  --install ./install_resources.yaml \\\n  --dryrun\n```\n\n## ❤ Contributing ❤\n\nPlease see [CONTRIBUTING.md](.github/CONTRIBUTING.md).\n\n## Developer Guide\n\nPlease see [DEVELOPER.md](.github/DEVELOPER.md).\n\n## Other KeikoProj Projects\n[Instance Manager][InstanceManagerUrl] -\n[Kube Forensics][KubeForensicsUrl] -\n[Active Monitor][ActiveMonitorUrl] -\n[Upgrade Manager][UpgradeManagerUrl] -\n[Minion Manager][MinionManagerUrl] -\n[Governor][GovernorUrl]\n\n\u003c!-- Markdown link --\u003e\n[install]: docs/README.md\n[ext_link]: https://upload.wikimedia.org/wikipedia/commons/d/d9/VisualEditor_-_Icon_-_External-link.svg\n\n[InstanceManagerUrl]: https://github.com/keikoproj/instance-manager\n[KubeForensicsUrl]: https://github.com/keikoproj/kube-forensics\n[ActiveMonitorUrl]: https://github.com/keikoproj/active-monitor\n[UpgradeManagerUrl]: https://github.com/keikoproj/upgrade-manager\n[MinionManagerUrl]: https://github.com/keikoproj/minion-manager\n[GovernorUrl]: https://github.com/keikoproj/governor\n\n[GithubMaintainedUrl]: https://github.com/keikoproj/addon-manager/graphs/commit-activity\n[GithubPrsUrl]: https://github.com/keikoproj/addon-manager/pulls\n[SlackUrl]: https://keikoproj.slack.com/messages/addon-manager\n\n[BuildStatusImg]: https://github.com/keikoproj/addon-manager/actions/workflows/pr-gate.yml/badge.svg?branch=master\n[BuildMasterUrl]: https://github.com/keikoproj/addon-manager/actions/workflows/pr-gate.yml\n\n[CodecovImg]: https://codecov.io/gh/keikoproj/addon-manager/branch/master/graph/badge.svg\n[CodecovUrl]: https://codecov.io/gh/keikoproj/addon-manager\n\n[GoReportImg]: https://goreportcard.com/badge/github.com/keikoproj/addon-manager\n[GoReportUrl]: https://goreportcard.com/report/github.com/keikoproj/addon-manager\n\n[AddonManagerImg]: docs/img/addon-manager-arch.png\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeikoproj%2Faddon-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkeikoproj%2Faddon-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeikoproj%2Faddon-manager/lists"}