{"id":48434844,"url":"https://github.com/stackitcloud/machine-controller-manager-provider-stackit","last_synced_at":"2026-04-06T12:04:24.566Z","repository":{"id":340124396,"uuid":"1082400663","full_name":"stackitcloud/machine-controller-manager-provider-stackit","owner":"stackitcloud","description":"The official out-of-tree gardener machine-controller-manager provider implementation for STACKIT Cloud","archived":false,"fork":false,"pushed_at":"2026-03-23T10:46:17.000Z","size":288,"stargazers_count":22,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-24T08:16:03.595Z","etag":null,"topics":["cloud","kubernetes","machine-controller-manager","stackit","stackit-cloud"],"latest_commit_sha":null,"homepage":"https://stackit.cloud","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/stackitcloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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-10-24T07:27:01.000Z","updated_at":"2026-03-23T10:46:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/stackitcloud/machine-controller-manager-provider-stackit","commit_stats":null,"previous_names":["stackitcloud/machine-controller-manager-provider-stackit"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/stackitcloud/machine-controller-manager-provider-stackit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackitcloud%2Fmachine-controller-manager-provider-stackit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackitcloud%2Fmachine-controller-manager-provider-stackit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackitcloud%2Fmachine-controller-manager-provider-stackit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackitcloud%2Fmachine-controller-manager-provider-stackit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stackitcloud","download_url":"https://codeload.github.com/stackitcloud/machine-controller-manager-provider-stackit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackitcloud%2Fmachine-controller-manager-provider-stackit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31471489,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T08:36:52.050Z","status":"ssl_error","status_checked_at":"2026-04-06T08:36:51.267Z","response_time":112,"last_error":"SSL_read: 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":["cloud","kubernetes","machine-controller-manager","stackit","stackit-cloud"],"created_at":"2026-04-06T12:04:23.897Z","updated_at":"2026-04-06T12:04:24.560Z","avatar_url":"https://github.com/stackitcloud.png","language":"Go","readme":"# machine-controller-manager-provider-stackit\n\n[![GitHub License](https://img.shields.io/github/license/stackitcloud/machine-controller-manager-provider-stackit)](https://www.apache.org/licenses/LICENSE-2.0)\n\nOut of tree (controller based) implementation for `STACKIT` as a provider for Gardener.\n\nA Machine Controller Manager (MCM) provider implementation for STACKIT cloud infrastructure. This provider enables Gardener to manage virtual machines on STACKIT using the declarative Kubernetes API.\n\nThe provider was built following the [MCM provider development guidelines](https://github.com/gardener/machine-controller-manager/blob/master/docs/development/cp_support_new.md) and bootstrapped from the [sample provider template](https://github.com/gardener/machine-controller-manager-provider-sampleprovider).\n\n## Getting Started\n\n### Examples\n\nSee the [samples/](./samples/) directory for example manifests including:\n\n- [`secret.yaml`](./samples/secret.yaml) - STACKIT credentials configuration\n- [`machine-class.yaml`](./samples/machine-class.yaml) - MachineClass definition\n- [`machine.yaml`](./samples/machine.yaml) - Individual Machine example\n- [`machine-deployment.yaml`](./samples/machine-deployment.yaml) - MachineDeployment for scaled workloads\n- [`deployment.yaml`](./samples/deployment.yaml) - Provider controller deployment\n\n### Minimal MachineClass Example\n\nHere's a bare minimum MachineClass configuration:\n\n```yaml\napiVersion: machine.sapcloud.io/v1alpha1\nkind: MachineClass\nmetadata:\n  name: stackit-machine\n  namespace: default\nproviderSpec:\n  region: eu01\n  machineType: c2i.2\n  imageId: \"12345678-1234-1234-1234-123456789012\"\nsecretRef:\n  name: stackit-credentials\n  namespace: default\n```\n\nFor detailed information on all available configuration fields, see the [MachineClass documentation](./docs/machine-class.md).\n\n## Local Testing \u0026 Development\n\nLocal development runs the provider and MCM against a real Gardener shoot on STACKIT (local kind cluster is not suitable). Follow the steps in the [local development guide](./docs/development.md).\n\nUse the Makefile targets for testing:\n\n```sh\n# Run tests\nmake test\n\n# Verify code formatting and run all checks\nmake verify\n\n# Format code\nmake fmt\n\n# Build container image\nmake image\n```\n\n## STACKIT SDK Integration\n\nThis provider uses the official [STACKIT Go SDK](https://github.com/stackitcloud/stackit-sdk-go) for all interactions with the STACKIT IaaS API. The SDK provides type-safe API access, built-in authentication handling, and is officially maintained by STACKIT.\n\nEach provider instance is bound to a single STACKIT project via the service account credentials provided in the Secret. The SDK client is initialized once on first use and automatically handles token refresh. In Gardener deployments, each shoot cluster gets its own control plane with a dedicated MCM and provider instance.\n\n### Authentication \u0026 Credentials\n\nThe provider requires STACKIT credentials to be provided via a Kubernetes Secret. The Secret must contain the following fields:\n\n| Field                 | Required | Description                                                      |\n| --------------------- | -------- | ---------------------------------------------------------------- |\n| `project-id`          | Yes      | STACKIT project UUID                                             |\n| `serviceaccount.json` | Yes      | STACKIT service account credentials (JSON format)                |\n| `userData`            | No       | Default cloud-init user data (can be overridden in ProviderSpec) |\n\nThe service account key should be obtained from the STACKIT Portal (Project Settings → Service Accounts → Create Key) and contains JWT credentials and a private key for secure authentication.\n\n**Credential Rotation:** The provider captures credentials on first use and reuses the same STACKIT SDK client for all subsequent requests (the SDK automatically handles token refresh). If the Secret is updated with new credentials, the provider pod must be restarted to pick up the changes. This follows the standard Kubernetes pattern for credential rotation.\n\n### Environment Variables\n\nThe provider supports the following environment variables for configuration:\n\n| Variable                | Default       | Description                                                        |\n| ----------------------- | ------------- | ------------------------------------------------------------------ |\n| `STACKIT_IAAS_ENDPOINT` | (SDK default) | Override STACKIT API endpoint URL (useful for testing)             |\n| `STACKIT_TOKEN_BASEURL` | (SDK default) | Override STACKIT Token endpoint URL (useful for testing)           |\n| `STACKIT_NO_AUTH`       | `false`       | Skip authentication (for testing with mock servers, set to `true`) |\n\n**Note:** `STACKIT_NO_AUTH=true` is only intended for testing environments with mock servers. It skips the authenticaiton step and communicates with the STACKIT API without authenticating itself. Do not use in production.\n\n## References\n\nSpecial thanks to [@AOE](https://github.com/aoepeople) for the great collaboration by kickstarting this controller!\n\n### Machine Controller Manager\n\n- [Machine Controller Manager](https://github.com/gardener/machine-controller-manager) - Core MCM project\n- [MCM Provider Development Guide](https://github.com/gardener/machine-controller-manager/blob/master/docs/development/cp_support_new.md) - Guidelines followed to build this provider\n- [MCM Sample Provider](https://github.com/gardener/machine-controller-manager-provider-sampleprovider) - Original template used as starting point\n- [MCM Driver Interface](https://github.com/gardener/machine-controller-manager/blob/master/pkg/util/provider/driver/driver.go) - Provider contract interface\n\n### STACKIT SDK\n\n- [STACKIT SDK Go](https://github.com/stackitcloud/stackit-sdk-go) - Official STACKIT Go SDK\n- [IaaS Service Package](https://github.com/stackitcloud/stackit-sdk-go/tree/main/services/iaas) - IaaS service API documentation\n- [SDK Core Package](https://github.com/stackitcloud/stackit-sdk-go/tree/main/core) - Core SDK configuration and authentication\n- [SDK Examples](https://github.com/stackitcloud/stackit-sdk-go/tree/main/examples) - Code examples and usage patterns\n- [SDK Releases](https://github.com/stackitcloud/stackit-sdk-go/releases) - Release notes and changelog\n\n### STACKIT Platform\n\n- [STACKIT Documentation](https://docs.stackit.cloud/) - STACKIT cloud platform documentation\n- [STACKIT Portal](https://portal.stackit.cloud/) - STACKIT management console\n- [Service Accounts](https://docs.stackit.cloud/stackit/en/service-accounts-134415819.html) - Creating and managing service accounts\n- [Service Account Keys](https://docs.stackit.cloud/stackit/en/usage-of-the-service-account-keys-in-stackit-175112464.html) - API authentication setup\n- [IaaS API v2 Documentation](https://docs.api.stackit.cloud/documentation/iaas/version/v2) - STACKIT IaaS REST API reference\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstackitcloud%2Fmachine-controller-manager-provider-stackit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstackitcloud%2Fmachine-controller-manager-provider-stackit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstackitcloud%2Fmachine-controller-manager-provider-stackit/lists"}