{"id":28697669,"url":"https://github.com/vatesfr/xenorchestra-cloud-controller-manager","last_synced_at":"2026-01-30T21:03:19.836Z","repository":{"id":298978620,"uuid":"1001041516","full_name":"vatesfr/xenorchestra-cloud-controller-manager","owner":"vatesfr","description":"Kubernetes Cloud Controller Manager for Xen Orchestra","archived":false,"fork":false,"pushed_at":"2026-01-23T15:59:55.000Z","size":189,"stargazers_count":10,"open_issues_count":11,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-24T06:51:04.134Z","etag":null,"topics":["k8s","kubernetes-controller","xenorchestra"],"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/vatesfr.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-12T18:08:47.000Z","updated_at":"2026-01-16T16:28:09.000Z","dependencies_parsed_at":"2025-06-14T00:02:48.206Z","dependency_job_id":"0dc0f333-7175-430b-a9f4-fb13e8bf769b","html_url":"https://github.com/vatesfr/xenorchestra-cloud-controller-manager","commit_stats":null,"previous_names":["vatesfr/xenorchestra-cloud-controller-manager"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/vatesfr/xenorchestra-cloud-controller-manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vatesfr%2Fxenorchestra-cloud-controller-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vatesfr%2Fxenorchestra-cloud-controller-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vatesfr%2Fxenorchestra-cloud-controller-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vatesfr%2Fxenorchestra-cloud-controller-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vatesfr","download_url":"https://codeload.github.com/vatesfr/xenorchestra-cloud-controller-manager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vatesfr%2Fxenorchestra-cloud-controller-manager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28919363,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T20:25:28.696Z","status":"ssl_error","status_checked_at":"2026-01-30T20:25:13.426Z","response_time":66,"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":["k8s","kubernetes-controller","xenorchestra"],"created_at":"2025-06-14T10:05:34.963Z","updated_at":"2026-01-30T21:03:19.823Z","avatar_url":"https://github.com/vatesfr.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kubernetes cloud controller manager for Xen Orchestra\n\nThe Xen Orchestra Cloud Controller Manager (CCM) registers new nodes, keeps them labeled with Xen Orchestra metadata, and cleans them up when their backing VM disappears. It supports multiple pools, so a single Kubernetes cluster can span several Xen Orchestra pools.\n\nThe CCM maps Kubernetes topology labels to Xen Orchestra objects:\n* `topology.kubernetes.io/region` → Xen Orchestra pool (`clusters[].region`)\n* `topology.kubernetes.io/zone` → host name (VM container)\n\n## 🧐 Supported controllers\n\n* cloud-node — registers nodes, sets `providerID`, node addresses, taints, and Xen Orchestra labels during initialization.\n* cloud-node-lifecycle — removes Kubernetes nodes when their VM is deleted in Xen Orchestra.\n* cloud-node-label-sync — periodically reconciles Xen Orchestra metadata back to Kubernetes nodes after moves or manual changes, keeping both current and original pool/host labels.\n\n## 🧩 Configuration\n\n```yaml\n# config.yaml\n# URL of the Xen Orchestra API (http or https)\nurl: https://xoa.example.com\ninsecure: false\n\n# Authentication (choose one)\ntoken: \"123ABC\"\n# username: admin@admin.net\n# password: \"s3cret\"\n```\n\n* Either `token` **or** `username`/`password` is required.\n* `url` must include a scheme; set `insecure: true` only when you explicitly want to skip TLS verification.\n\n## 📌 Node labels and providerID\n\nWhen a node is initialized, the CCM sets `providerID` to `xenorchestra://\u003cpool-id\u003e/\u003cvm-id\u003e` and applies labels derived from Xen Orchestra metadata. Example:\n\n```yaml\napiVersion: v1\nkind: Node\nmetadata:\n  labels:\n    node.kubernetes.io/instance-type: 2vCPU-1GB\n    topology.kubernetes.io/region: 3679fe1a-d058-4055-b800-d30e1bd2af48\n    topology.kubernetes.io/zone: 3d6764fe-dc88-42bf-9147-c87d54a73f21\n    topology.k8s.xenorchestra/host_id: 3d6764fe-dc88-42bf-9147-c87d54a73f21\n    topology.k8s.xenorchestra/host_name_label: hpmc11\n    topology.k8s.xenorchestra/pool_id: 3679fe1a-d058-4055-b800-d30e1bd2af48\n    topology.k8s.xenorchestra/pool_name_label: devops-tools-moonshot\n    topology.k8s.xenorchestra/original_host_id: 3d6764fe-dc88-42bf-9147-c87d54a73f21\n    topology.k8s.xenorchestra/original_pool_id: 3679fe1a-d058-4055-b800-d30e1bd2af48\n    vm.k8s.xenorchestra/name_label: cgn-microk8s-recipe---Control-Plane\n  name: worker-1\nspec:\n  providerID: xenorchestra://3679fe1a-d058-4055-b800-d30e1bd2af48/8f0d32f8-3ce5-487f-9793-431bab66c115\n```\n\n## 🛠️ Install\n\nSee [docs/install.md](docs/install.md) for installation options (manifests and Helm chart) and configuration details.\n\n## 🧑🏻‍💻 FAQ\n\nSee [docs/faq.md](docs/faq.md) for answers to common questions.\n\n## 🍰 Contributing\n\nContributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\n## ➤ License\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nThanks to sergelogvinov for the [initial implementation](https://github.com/sergelogvinov/proxmox-cloud-controller-manager).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvatesfr%2Fxenorchestra-cloud-controller-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvatesfr%2Fxenorchestra-cloud-controller-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvatesfr%2Fxenorchestra-cloud-controller-manager/lists"}