{"id":19205694,"url":"https://github.com/fairwindsops/controller-utils","last_synced_at":"2025-10-28T13:07:08.468Z","repository":{"id":36980190,"uuid":"298570271","full_name":"FairwindsOps/controller-utils","owner":"FairwindsOps","description":"A library of helpful functions for building Kubernetes controllers.","archived":false,"fork":false,"pushed_at":"2025-05-12T03:18:41.000Z","size":173,"stargazers_count":7,"open_issues_count":5,"forks_count":1,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-05-12T17:15:37.920Z","etag":null,"topics":["fairwinds-incubator","go","golang","kubernetes"],"latest_commit_sha":null,"homepage":"https://fairwinds.com","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/FairwindsOps.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-09-25T12:45:10.000Z","updated_at":"2025-05-12T04:05:22.000Z","dependencies_parsed_at":"2024-08-05T13:28:18.857Z","dependency_job_id":"33e09f9e-b67c-4bae-90a1-fd9ee758e497","html_url":"https://github.com/FairwindsOps/controller-utils","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FairwindsOps%2Fcontroller-utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FairwindsOps%2Fcontroller-utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FairwindsOps%2Fcontroller-utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FairwindsOps%2Fcontroller-utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FairwindsOps","download_url":"https://codeload.github.com/FairwindsOps/controller-utils/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253785011,"owners_count":21963903,"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":["fairwinds-incubator","go","golang","kubernetes"],"created_at":"2024-11-09T13:13:39.676Z","updated_at":"2025-10-10T18:09:17.255Z","avatar_url":"https://github.com/FairwindsOps.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# controller-utils\n\n[![FairwindsOps](https://circleci.com/gh/FairwindsOps/controller-utils.svg?style=svg)](https://circleci.com/gh/FairwindsOps/controller-utils)\n[![Apache 2.0 license](https://img.shields.io/badge/license-Apache2-brightgreen.svg)](https://opensource.org/licenses/Apache-2.0)\n\nThis is a library of Go functions to assist in building Kubernetes Controllers.\n\nThe `pkg/controller` package contains the main functionality. `pkg/log` contains helpers around logging. You can pass in a [logr](https://github.com/go-logr/logr) object to control the logs of this library.\n\n## Basic Usage\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"k8s.io/apimachinery/pkg/api/meta\"\n\t\"k8s.io/client-go/dynamic\"\n\t\"k8s.io/client-go/kubernetes\"\n\t\"k8s.io/client-go/restmapper\"\n\tctrl \"sigs.k8s.io/controller-runtime\"\n\n\t\"github.com/fairwindsops/controller-utils/pkg/controller\"\n)\n\nfunc main() {\n\tdynamic, restMapper, err := getKubeClient()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tclient := controller.Client{\n\t\tContext:    context.TODO(),\n\t\tDynamic:    dynamic,\n\t\tRESTMapper: restMapper,\n\t}\n\tworkloads, err := client.GetAllTopControllersSummary(\"\")\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tfor _, workload := range workloads {\n\t\tctrl := workload.TopController\n\t\tfmt.Println()\n\t\tfmt.Printf(\"Workload: %s/%s/%s\\n\", ctrl.GetKind(), ctrl.GetNamespace(), ctrl.GetName())\n\t\tfmt.Printf(\"  num pods: %d\\n\", workload.PodCount)\n\t\tfmt.Printf(\"  running: %d\\n\", workload.RunningPodCount)\n\t\tfmt.Printf(\"  podSpec: %#v\\n\", workload.PodSpec)\n\t}\n}\n\nfunc getKubeClient() (dynamic.Interface, meta.RESTMapper, error) {\n\tvar restMapper meta.RESTMapper\n\tvar dynamicClient dynamic.Interface\n\tkubeConf, configError := ctrl.GetConfig()\n\tif configError != nil {\n\t\treturn dynamicClient, restMapper, configError\n\t}\n\n\tapi, err := kubernetes.NewForConfig(kubeConf)\n\tif err != nil {\n\t\treturn dynamicClient, restMapper, err\n\t}\n\n\tdynamicClient, err = dynamic.NewForConfig(kubeConf)\n\tif err != nil {\n\t\treturn dynamicClient, restMapper, err\n\t}\n\n\tresources, err := restmapper.GetAPIGroupResources(api.Discovery())\n\tif err != nil {\n\t\treturn dynamicClient, restMapper, err\n\t}\n\trestMapper = restmapper.NewDiscoveryRESTMapper(resources)\n\treturn dynamicClient, restMapper, nil\n}\n```\n\n\u003c!-- Begin boilerplate --\u003e\n## Join the Fairwinds Open Source Community\n\nThe goal of the Fairwinds Community is to exchange ideas, influence the open source roadmap,\nand network with fellow Kubernetes users.\n[Chat with us on Slack](https://join.slack.com/t/fairwindscommunity/shared_invite/zt-e3c6vj4l-3lIH6dvKqzWII5fSSFDi1g)\n[join the user group](https://www.fairwinds.com/open-source-software-user-group) to get involved!\n\n\u003ca href=\"https://www.fairwinds.com/t-shirt-offer?utm_source=controller-utils\u0026utm_medium=controller-utils\u0026utm_campaign=controller-utils-tshirt\"\u003e\n  \u003cimg src=\"https://www.fairwinds.com/hubfs/Doc_Banners/Fairwinds_OSS_User_Group_740x125_v6.png\" alt=\"Love Fairwinds Open Source? Share your business email and job title and we'll send you a free Fairwinds t-shirt!\" /\u003e\n\u003c/a\u003e\n\n## Other Projects from Fairwinds\n\nEnjoying controller-utils? Check out some of our other projects:\n* [Polaris](https://github.com/FairwindsOps/Polaris) - Audit, enforce, and build policies for Kubernetes resources, including over 20 built-in checks for best practices\n* [Goldilocks](https://github.com/FairwindsOps/Goldilocks) - Right-size your Kubernetes Deployments by compare your memory and CPU settings against actual usage\n* [Pluto](https://github.com/FairwindsOps/Pluto) - Detect Kubernetes resources that have been deprecated or removed in future versions\n* [Nova](https://github.com/FairwindsOps/Nova) - Check to see if any of your Helm charts have updates available\n* [rbac-manager](https://github.com/FairwindsOps/rbac-manager) - Simplify the management of RBAC in your Kubernetes clusters\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffairwindsops%2Fcontroller-utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffairwindsops%2Fcontroller-utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffairwindsops%2Fcontroller-utils/lists"}