{"id":27417322,"url":"https://github.com/manusant/kubernetes-operator","last_synced_at":"2026-05-07T10:33:40.152Z","repository":{"id":130829325,"uuid":"341963831","full_name":"manusant/kubernetes-operator","owner":"manusant","description":"Kubernetes Operator to manage Tomcat deployments","archived":false,"fork":false,"pushed_at":"2021-05-14T00:07:09.000Z","size":98,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-06T02:52:09.933Z","etag":null,"topics":["java-operator-sdk","k8s","kotlin","kubernetes","operator","quarkus"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","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/manusant.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2021-02-24T16:32:37.000Z","updated_at":"2025-01-11T11:17:24.000Z","dependencies_parsed_at":"2023-03-17T06:00:12.565Z","dependency_job_id":null,"html_url":"https://github.com/manusant/kubernetes-operator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/manusant/kubernetes-operator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manusant%2Fkubernetes-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manusant%2Fkubernetes-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manusant%2Fkubernetes-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manusant%2Fkubernetes-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/manusant","download_url":"https://codeload.github.com/manusant/kubernetes-operator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manusant%2Fkubernetes-operator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32733549,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["java-operator-sdk","k8s","kotlin","kubernetes","operator","quarkus"],"created_at":"2025-04-14T09:54:35.501Z","updated_at":"2026-05-07T10:33:40.137Z","avatar_url":"https://github.com/manusant.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kubernetes Operator\nKubernetes Operator to manage Tomcat deployments\n\n* Learning Quarkus\n* Learning Kubernetes Operator development\n* Learning Kotlin\n\n\u003e Works with java \u003e= 11. In case you have other projects running a different java version please use ASDF with Java plugin.\n```\n$ asdf install java openjdk-14.0.1\n$ asdf global java openjdk-14.0.1\n```\n\n## Problems\nI found 3 issues when dealing with Kotlin data classes:\n* Data classes representing *CustomResource* definitions should be explicitly registered for reflection using *@RegisterForReflection* annotation.\n* A default constructor or default values for all arguments is required (this is required while deserializing kubernetes events into objects)\n* Quarkus native build doesn't recognize the generic typed arguments in the *CustomResource*, so we need to explicitly provide initialization for the *spec* and *status*\nclasses by overriding *initSpec()* and *initStatus()* respectively.\n\nA final Data class representing a *CustomResource* will look like:\n```kotlin\n@RegisterForReflection\n@Group(\"tomcat.operator.io\")\n@Version(\"v1\")\nclass Tomcat(var spec: TomcatSpec = TomcatSpec(), var status: TomcatStatus = TomcatStatus()) : CustomResource\u003cTomcatSpec, TomcatStatus\u003e(), Namespaced {\n\n    override fun initSpec(): TomcatSpec {\n        return TomcatSpec()\n    }\n\n    override fun initStatus(): TomcatStatus {\n        return TomcatStatus()\n    }\n}\n```\n## Native build\n[Official documentation](https://quarkus.io/guides/building-native-image)\n### Install GraalVM\nhttps://www.graalvm.org/docs/getting-started/#install-graalvm\n\u003e  [Tutorial for Macc](https://blog.softwaremill.com/graalvm-installation-and-setup-on-macos-294dd1d23ca2)\n\nExport environment variables:\n```\nexport GRAALVM_HOME=$HOME/Library/Java/JavaVirtualMachines/\u003cgraalvm-dir\u003e/Contents/Home\nexport PATH=$GRAALVM_HOME/bin:$PATH\n```\n### Install native-image\n```\ngu install native-image\n```\n### Software Notarization\nIf you are using macOS Catalina and later you may need to remove the quarantine attribute from the bits before you can use them. To do this, run the following:\n```\nsudo xattr -r -d com.apple.quarantine $HOME/Library/Java/JavaVirtualMachines/\u003cgraalvm-dir\u003e\n```\n\n### Build\n* Build native executable\n```\n./mvnw package -Pnative\n```\n* Creating a Linux executable without GraalVM installed\n```\n./mvnw package -Pnative -Dquarkus.native.container-build=true\n```\n\u003e By default Quarkus automatically detects the container runtime. If you want to explicitely select the container runtime, you can do it with:\n```\n# Docker\n./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=docker\n# Podman\n./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=podman\n```\n* Creating a container \n\nBy far the easiest way to create a container-image from your Quarkus application is to leverage one of the container-image extensions.\n\nIf one of those extensions is present, then creating a container image for the native executable is essentially a matter of executing a single command:\n```\n./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.container-image.build=true\n```\n\u003e **quarkus.native.container-build=true** allows for creating a Linux executable without GraalVM being installed (and is only necessary if you don’t have GraalVM installed locally or your local operating system is not Linux)\n\n\u003e **quarkus.native.container-build=true** allows for creating a Linux executable without GraalVM being installed (and is only necessary if you don’t have GraalVM installed locally or your local operating system is not Linux)\n\n### Test native build\n* Running native executable directly\n```\n./tomcat-operator-1.0.0-SNAPSHOT-runner\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanusant%2Fkubernetes-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanusant%2Fkubernetes-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanusant%2Fkubernetes-operator/lists"}