{"id":21324637,"url":"https://github.com/brumhard/kindacool","last_synced_at":"2026-02-06T06:02:49.045Z","repository":{"id":65752703,"uuid":"596953329","full_name":"brumhard/kindacool","owner":"brumhard","description":"KinD alternative that is - well... - kinda cool. Based on OpenStack.","archived":false,"fork":false,"pushed_at":"2024-09-09T23:47:24.000Z","size":763,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-12T06:37:21.390Z","etag":null,"topics":["k3s","kubernetes","openstack","pulumi","pulumi-automation-sdk"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brumhard.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2023-02-03T09:47:10.000Z","updated_at":"2024-09-09T23:47:27.000Z","dependencies_parsed_at":"2024-11-21T20:47:20.256Z","dependency_job_id":null,"html_url":"https://github.com/brumhard/kindacool","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/brumhard/kindacool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brumhard%2Fkindacool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brumhard%2Fkindacool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brumhard%2Fkindacool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brumhard%2Fkindacool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brumhard","download_url":"https://codeload.github.com/brumhard/kindacool/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brumhard%2Fkindacool/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266913701,"owners_count":24005580,"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","status":"online","status_checked_at":"2025-07-24T02:00:09.469Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["k3s","kubernetes","openstack","pulumi","pulumi-automation-sdk"],"created_at":"2024-11-21T20:35:24.497Z","updated_at":"2026-02-06T06:02:49.038Z","avatar_url":"https://github.com/brumhard.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [kinda](https://www.urbandictionary.com/define.php?term=kinda)[cool](https://www.urbandictionary.com/define.php?term=Cool) - `KinD` `a`lternative that is - well... - kinda `cool`\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs/kindacool.png\" width=\"70%\"\u003e\n\u003c/div\u003e\n\n`kindacool` is a CLI to quickly setup new Kubernetes (k3s) clusters on OpenStack. It uses [Pulumi Automation API](https://www.pulumi.com/docs/guides/automation-api/) in the background.\n\n## Usage\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ch3\u003eInstallation\u003c/h3\u003e\u003c/summary\u003e\n\n#### From source\n\nIf you have Go 1.16+, you can directly install as following:\n\n```shell\ngo install github.com/brumhard/kindacool/cmd/kindacool@latest\n```\n\n\u003e Based on your go configuration the `kindacool` binary can be found in `$GOPATH/bin` or `$HOME/go/bin` in case `$GOPATH` is not set.\n\u003e Make sure to add the respective directory to your `$PATH`.\n\u003e [For more information see go docs for further information](https://golang.org/ref/mod#go-install). Run `go env` to view your current configuration.\n\n#### From the released binaries\n\nDownload the desired version for your operating system and processor architecture from the [releases](https://github.com/brumhard/kindacool/-/releases).\nMake the file executable and place it in a directory available in your `$PATH`.\n\n#### OCI Images\n\nOCI images are also available. They contain only the binary `kindacool`, so there's no shell included.\n\n```shell\ndocker run -it --rm ghcr.io/brumhard/kindacool --help\n```\n\n\u003c/details\u003e\n\n### Preconditions\n\n#### Pulumi\n\nPulumi's automation API is used to create all the needed resources in OpenStack and also install k3s. It manages all the state necessary for these operations.\n\nThe automation API requires the pulumi CLI.\nInstall it from any source as described [here](https://www.pulumi.com/docs/get-started/install/).\n\nAfterwards do `pulumi login` (have a look at the [docs](https://www.pulumi.com/docs/reference/cli/pulumi_login/) for all the login options) to connect to the state backend.\n\n#### OpenStack credentials\n\nTo connect to OpenStack the common OpenStack environment variables are used. These are usually stored in a `.openrc` file.\n\nVisit the [OpenStack docs](https://docs.openstack.org/newton/user-guide/common/cli-set-environment-variables-using-openstack-rc.html) for more information.\n\nNow do `source /path/to/.openrc` to set all the environment variables.\n\n### Setup your first cluster\n\n\u003e Be sure to first follow the steps described in [preconditions](#preconditions).\n\nTo create a new cluster do\n\n```shell\nkindacool cluster create\n```\n\nThis will take around a minute depending on how long it takes to create everything in OpenStack.\n\nAfter the cluster is created successfully the kubeconfig is written to `~/.kube/kindacool-kindacool.yaml` by default.\n\nYou can use the following command to set this path in `$KUBECONFIG`.\n\n```shell\neval `kindacool cluster kubeconfig --export`\n```\n\nNow go ahead and test the connection with\n\n```shell\nkubectl get pods -A\n```\n\nTo find docs on all available commands either run `kindacool --help` or visit the [docs](docs/cmd/kindacool.md).\n\n### Misc\n\n```shell\n# cancel current action\npulumi cancel \u003cuser\u003e/kindacool/\u003ccluster\u003e\n\n# destroy all clusters\nkindacool cluster ls |\n while read cluster; do\n  if [ \"$cluster\" = \"\" ]; then continue; fi\n  kindacool cluster destroy --name \"$cluster\";\n done\n```\n\n## Development \u0026 Release\n\n\u003e If you have nix installed you can use the flake.nix file to get everything you need.\n\nThis project uses [earthly](https://earthly.dev/) for all development and also for CI.\n\nSince it uses containers behind the scenes you need some container runtime like docker or podman installed.\nRun `earthly bootstrap` to make sure everything is ready.\n\nThe most important earthly targets are:\n\n* Run all linters and tests: `earthly +lint`\n* Generate docs: `earthly +generate`\n* Trigger a new release: `earthly +tag-release`\n\nIf any of the targets do not work as expected add the `-i` flag to run in interactive mode and spawn a shell into the container that is running the step.\n\n### Commit Messages\n\nThe commit messages used in this repo should follow [conventional commits style](https://www.conventionalcommits.org/en/v1.0.0/).\nThis is used by the release tooling to automatically calculate new version tags.\n\n### Releases\n\nTo create a new release do:\n\n```shell\nearthly +tag-release\n```\n\nThis will calculate a new semantic version based on the commit messages since the previous version tag and push the newly created tag if necessary.\nThis should then trigger a pipeline.\nIf that is not the case you can also run the release locally.\n\n```shell\nexport GITHUB_TOKEN=\"xxxxxx\"\nearthly --push --secret GITHUB_TOKEN +release\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrumhard%2Fkindacool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrumhard%2Fkindacool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrumhard%2Fkindacool/lists"}