{"id":17325038,"url":"https://github.com/otaviof/apperator","last_synced_at":"2026-05-15T21:31:33.823Z","repository":{"id":136633811,"uuid":"175292800","full_name":"otaviof/apperator","owner":"otaviof","description":"Kubernetes Operator focused on Applications. Reusable components between apps.","archived":false,"fork":false,"pushed_at":"2019-04-03T17:03:02.000Z","size":15339,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-09T07:27:11.811Z","etag":null,"topics":["deployment","hashicorp-vault","kubernetes","kubernetes-operator"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/otaviof.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-12T20:39:26.000Z","updated_at":"2019-07-14T21:51:22.000Z","dependencies_parsed_at":null,"dependency_job_id":"a54687d8-b995-44b4-921b-36192b69d3f7","html_url":"https://github.com/otaviof/apperator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/otaviof/apperator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otaviof%2Fapperator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otaviof%2Fapperator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otaviof%2Fapperator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otaviof%2Fapperator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/otaviof","download_url":"https://codeload.github.com/otaviof/apperator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otaviof%2Fapperator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33080777,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T20:25:35.270Z","status":"ssl_error","status_checked_at":"2026-05-15T20:25:34.732Z","response_time":103,"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":["deployment","hashicorp-vault","kubernetes","kubernetes-operator"],"created_at":"2024-10-15T14:12:16.726Z","updated_at":"2026-05-15T21:31:33.808Z","avatar_url":"https://github.com/otaviof.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/otaviof/apperator/master/assets/logo/apperator.png\" /\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca alt=\"GoReport\" href=\"https://goreportcard.com/report/github.com/otaviof/apperator\"\u003e\n        \u003cimg src=\"https://goreportcard.com/badge/github.com/otaviof/apperator\"\u003e\n    \u003c/a\u003e\n    \u003ca alt=\"Code Coverage\" href=\"https://codecov.io/gh/otaviof/apperator\"\u003e\n        \u003cimg src=\"https://codecov.io/gh/otaviof/apperator/branch/master/graph/badge.svg\"\u003e\n    \u003c/a\u003e\n    \u003ca alt=\"CI Status\" href=\"https://travis-ci.com/otaviof/apperator\"\u003e\n        \u003cimg src=\"https://travis-ci.com/otaviof/apperator.svg?branch=master\"\u003e\n    \u003c/a\u003e\n    \u003ca alt=\"Docker-Cloud Build Status\" href=\"https://hub.docker.com/r/otaviof/apperator\"\u003e\n        \u003cimg src=\"https://img.shields.io/docker/cloud/build/otaviof/apperator.svg\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n# `apperator` (WIP)\n\nMain features:\n- Central control of Deployment components, reusable across landscape;\n- Transparent integration with [HashiCorp Vault](https://www.vaultproject.io);\n- Deeper integration with Prometheus Operator;\n\nThis Operator focus on re-using components that applications have in common, to keep the ability of\ndefining standards applicable across an entire landscape. The primary idea is to extend functionality\nof [Deployment](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.13/#deployment-v1-apps)\nResource Definition.\n\nFor handling secrets, it offers integration with\n[`vault-handler`](https://github.com/otaviof/vault-handler) project. By means of setting up a\nspecial `ConfigMap` with `vault-handler`'s manifest, the Operator generates a init-container to\ndownload secrets before your application starts.\n\nAdditionally, this Operator watches Prometheus Alerts, when a given alert concern one of the pods\nmanaged by Apperator, and the alert has a label indicating pod should be restarted, then Operator\nwill take care of restarting the pods.\n\n## Operator Deployment\n\nTODO: describe how to deploy the operator in a cluster;\nFIXME: should you have a helm-chart to deploy the operator?\n\n## Development\n\nThis project is developed using [Operator-SDK](https://github.com/operator-framework/operator-sdk),\nif you're new to this project, please start by their\n[user-guide](https://github.com/operator-framework/operator-sdk/blob/master/doc/user-guide.md).\n\nThe steps to compile this project are, please consider `Makefile` for more information:\n\n``` sh\nmake bootstrap              # run dep, populate vendor directory\nmake                        # build operator\nmake test                   # unit-tests\nmake integration-local      # integration tests against local minikube\nmake integration-cluster    # integration tests against a Kubernetes cluster\n```\n\n### Global and Local Tags\n\nSpecial comments (tags) are placed along the code, to export OpenAPI defintions, and generated Go\ncode for `DeepCopy` functions. Both are required in order to export a\n[CRD (Custom Resource Definition)](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/)\nto be used in Kubernetes.\n\nUsing a global-tag, the definition of the package group looks as follows:\n\n``` go\n// +k8s:deepcopy-gen=package,register\n// +groupName=apperator.otaviof.github.io\npackage v1alpha1\n```\n\nAnd examples of local-tags, `struct`s that should become a CRD, should have comments as the\nexample below:\n\n``` go\n// +k8s:openapi-gen=true\ntype ApperatorAppSpec struct{}\n```\n\nGenerated code for `DeepCopy`:\n\n``` go\n// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object\ntype ApperatorAppList struct{}\n```\n\nAfter altering the special comments, or changing the data-structures exported to Kubernetes, it's\nmandatory to run:\n\n``` sh\nmake generate\n```\n\nMore information about this subject can be found at:\n- https://github.com/kubernetes/code-generator\n- https://blog.openshift.com/kubernetes-deep-dive-code-generation-customresources\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fotaviof%2Fapperator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fotaviof%2Fapperator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fotaviof%2Fapperator/lists"}