{"id":13531656,"url":"https://github.com/giantswarm/operatorkit","last_synced_at":"2026-01-28T09:23:21.087Z","repository":{"id":19757610,"uuid":"87818870","full_name":"giantswarm/operatorkit","owner":"giantswarm","description":"An opinionated Go framework for developing Kubernetes operators","archived":false,"fork":false,"pushed_at":"2025-03-24T18:40:37.000Z","size":39926,"stargazers_count":195,"open_issues_count":4,"forks_count":17,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-03-24T19:38:12.170Z","etag":null,"topics":["framework","go","kubernetes","library","operator"],"latest_commit_sha":null,"homepage":"https://godoc.org/github.com/giantswarm/operatorkit","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/giantswarm.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-10T14:12:58.000Z","updated_at":"2025-03-24T18:40:41.000Z","dependencies_parsed_at":"2023-11-13T12:24:58.169Z","dependency_job_id":"6c469003-9aa0-4582-9684-4adcf2210d74","html_url":"https://github.com/giantswarm/operatorkit","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giantswarm%2Foperatorkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giantswarm%2Foperatorkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giantswarm%2Foperatorkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/giantswarm%2Foperatorkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/giantswarm","download_url":"https://codeload.github.com/giantswarm/operatorkit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246700728,"owners_count":20819926,"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":["framework","go","kubernetes","library","operator"],"created_at":"2024-08-01T07:01:04.678Z","updated_at":"2026-01-28T09:23:21.027Z","avatar_url":"https://github.com/giantswarm.png","language":"Go","funding_links":[],"categories":["Operator Frameworks","Go"],"sub_categories":[],"readme":"[![Go Reference](https://pkg.go.dev/badge/github.com/giantswarm/operatorkit.svg)](https://pkg.go.dev/github.com/giantswarm/operatorkit)\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/giantswarm/operatorkit/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/giantswarm/operatorkit/tree/master)\n\n# operatorkit\n\n**:warning: Important: This library has been deprecated in favor of [kubebuilder](https://book.kubebuilder.io/). Please, use kubebuilder if you want to create a new operator.** \n\nPackage `operatorkit` implements an opinionated framework for developing\n[Kubernetes operators]. It emerged as we extracted common functionality from a\nnumber of the operators we developed at [Giant Swarm][giantswarm]. The goal of\nthis library is to provide a common structure for operator projects and to\nencapsulate best practices we learned while running operators in production.\n\n## Features\n\n- CRD primitives to reliably create, watch and delete custom resources, as well\n  as any Kubernetes runtime object.\n- Managing [finalizers][finalizers] on reconciled objects, making sure the code\n  is executed at least once for each create/delete/update event.\n- Guarantees to perform at least one successful deletion event reconciliation\n  to avoid unnecessary, possibly expensive interactions with third party\n  systems.\n- Resource wrapping to gain ability of composing resources like middlewares.\n- [Control Flow Primitives](docs/control_flow_primitives.md) that allow\n  cancellation and repetition of resource implementations.\n- Independent packages. It is possible to use only certain parts of the library\n  without being bound to all primitives it provides.\n- Ability to change behaviour that is often specific to an organization like\n  logging and error handling.\n- [Pause Reconciliation](docs/pause_reconciliation.md) using pausing annotations\n  on runtime objects to stop and resume reconciliation on demand.\n\n## Roadmap\n\nFor future planned features and breaking changes see the [roadmap](ROADMAP.md).\n\n## Docs\n\n- [Control Flow Primitives](docs/control_flow_primitives.md)\n- [File Structure](docs/file_structure.md)\n- [Keeping Reconciliation Loops Short](docs/keeping_reconciliation_loops_short.md)\n- [Managing CR Status Sub Resources](docs/managing_cr_status_sub_resources.md)\n- [Metrics Provider](docs/metrics_provider.md)\n- [Pause Reconciliation](docs/pause_reconciliation.md)\n- [Troubleshooting](docs/troubleshooting.md)\n- [Using Finalizers](docs/using_finalizers.md)\n- [Using Kubernetes Events](docs/using_kubernetes_events.md)\n\n## Integration Tests\n\nYou can simply create a [`kind`](https://github.com/kubernetes-sigs/kind/)\ncluster to run the integration tests.\n\n```nohighlight\nkind create cluster\n```\n\nThe tests need to figure out how to connect to the Kubernetes cluster. Therefore\nwe need to set an environment variable pointing to your local kube config.\n\n```nohighlight\nexport E2E_KUBECONFIG=~/.kube/config\n```\n\nNow you can easily run the integration tests.\n\n```nohighlight\ngo test -v -tags=k8srequired ./integration/test/\u003ctest-name\u003e\n```\n\nOnce you did your testing you may want to delete your local test cluster again.\n\n```nohighlight\nkind delete cluster\n```\n\n## Projects using operatorkit\n\n[Giant Swarm operators] using `operatorkit`.\n\n## Example\n\nFor a detailed state of art implementation, please see\n[giantswarm/aws-operator](https://github.com/giantswarm/aws-operator).\n\n## Contributing \u0026 Reporting Bugs\n\nSee [CONTRIBUTING](CONTRIBUTING.md) for details on submitting patches, the\ncontribution workflow as well as reporting bugs.\n\n## License\n\n`operatorkit` is under the Apache 2.0 license. See the [LICENSE](LICENSE) file\nfor details.\n\n[finalizers]: https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/#finalizers\n[giantswarm]: https://giantswarm.io\n[Giant Swarm operators]: https://github.com/search?p=1\u0026q=topic%3Aoperator+org%3Agiantswarm\u0026type=Repositories\n[Kubernetes operators]: https://coreos.com/operators\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgiantswarm%2Foperatorkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgiantswarm%2Foperatorkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgiantswarm%2Foperatorkit/lists"}