{"id":21657247,"url":"https://github.com/zcubbs/hotpot","last_synced_at":"2025-04-11T22:12:52.452Z","repository":{"id":196249531,"uuid":"692799566","full_name":"zcubbs/hotpot","owner":"zcubbs","description":"🍲 HotPot is your go-to CLI utility that marries the simplicity of cooking with the robustness of Kubernetes deployments. Drawing inspiration from crafting and culinary arts, HotPot serves up k3s clusters based on your specific recipe (configuration).","archived":false,"fork":false,"pushed_at":"2025-03-12T19:36:35.000Z","size":463,"stargazers_count":26,"open_issues_count":2,"forks_count":7,"subscribers_count":19,"default_branch":"main","last_synced_at":"2025-04-11T22:12:46.008Z","etag":null,"topics":[],"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/zcubbs.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}},"created_at":"2023-09-17T16:08:56.000Z","updated_at":"2025-03-14T20:47:02.000Z","dependencies_parsed_at":"2024-02-03T17:23:40.171Z","dependency_job_id":"3992cc2e-b096-4230-9865-f866049253bc","html_url":"https://github.com/zcubbs/hotpot","commit_stats":null,"previous_names":["zcubbs/hotpot"],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zcubbs%2Fhotpot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zcubbs%2Fhotpot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zcubbs%2Fhotpot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zcubbs%2Fhotpot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zcubbs","download_url":"https://codeload.github.com/zcubbs/hotpot/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248487684,"owners_count":21112190,"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","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":[],"created_at":"2024-11-25T09:20:10.917Z","updated_at":"2025-04-11T22:12:52.437Z","avatar_url":"https://github.com/zcubbs.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HotPot: Cooking Your Cluster to Perfection 🍲\n\n`HotPot` is your go-to CLI utility that marries the simplicity of cooking with the robustness of Kubernetes deployments. Drawing inspiration from crafting and culinary arts, HotPot serves up k3s clusters based on your specific recipe (configuration). It aims to provide a reproducible, consistent, and reliable way to deploy your clusters and applications. It can also work with none k3s clusters by disabling the k3s feature. \n\n---\n\u003cp align=\"center\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"850\" src=\"docs/assets/splash.png\"\u003e\n\u003c/p\u003e\n\n---\n\n## Features\n\n- [x] Create a k3s cluster with yaml configuration\n- [x] Delete a k3s cluster\n- [x] Check host prerequisites before creating a cluster, e.g. RAM, CPU, disk space, etc.\n- [x] Setup and configure Helm\n- [x] Setup and configure Traefik\n  - [x] Setup and configure Let's Encrypt\n  - [x] Setup and configure CertManager\n  - [x] Setup and configure IngressRoutes\n  - [x] Configure support for DNS01 and HTTP01 challenges\n  - [x] Configure Providers: Cloudflare, OVH, Azure\n- [x] Setup and configure CertManager\n- [x] Bootstrap Secrets: Container Registry Credentials, Generic Secrets\n- [x] Setup Argocd and configure applications, projects, and repositories\n- [x] Override any of the features above without recreating the cluster\n- [x] Nuke a cluster\n- [x] Recipe Sync Daemon\n  - [x] Synchronize recipe files from Git repositories\n  - [x] Support for private GitLab/GitHub repositories\n  - [x] Token and SSH-based authentication\n  - [x] Configurable sync frequency\n  - [x] Systemd service integration\n\n...And much more!\n\n\n## Installation\n\u003e Supported platforms: `Linux`, `Mac`\n```bash\ncurl -sfL https://raw.githubusercontent.com/zcubbs/hotpot/main/scripts/install.sh | bash\n```\n\n## Usage\n\n### Cooking a Cluster\n\n```bash\n\u003e hotpot cook -r recipe.yaml\n\n🍲 Cooking...\n🍳 Checking prerequisites... \n    ├─ os: ok\n    ├─ arch: ok\n    ├─ ram: ok\n    ├─ cpu: ok\n    ├─ disk: ok\n    ├─ curl: ok\n    └─ prerequisites ok\n🍕 Adding k3s... \n    └─ install ok\n🍉 Adding helm cli... \n🌶️ Adding secrets... \n    ├─ container registry credentials: regcred \n    │  ├─ namespaces: [hub] ok\n    │  └─ secret ok\n    ├─ generic secret: my-secret \n    │  ├─ namespaces: hub ok\n    │  └─ secret ok\n    └─ secrets ok\n🍙 Adding cert-manager... \n    └─ install ok\n🍔 Adding traefik... \n    └─ install ok\n🥪 Adding argocd... \n    ├─ argocd admin password: ok\n    └─ install ok\n🌭 Adding gitops... \n    ├─ project: hotpot ok\n    │  ├─ repository: gitops-private-repo ok\n    │  ├─ repository: helm-private-repo ok\n    │  ├─ application: hub ok\n    │  ├─ application: hub-manifests ok\n    └─ gitops ok\n ok    completed\n```\n\n### Recipe Sync Daemon\n\nThe Recipe Sync Daemon allows you to keep your recipe files synchronized with a Git repository. It runs as a systemd service and can be configured using interactive prompts.\n\n```bash\n# Configure the sync daemon\n\u003e hotpot syncd config\n\n🔧 Configuring hotpot-syncd...\n\nRepository URL:\n❯ https://github.com/user/repo\n\nBranch:\n❯ main\n\nAuth Type (token/ssh):\n❯ token\n\nToken/SSH Key Path:\n❯ ghp_xxxxxxxxxxxxxxxxxxxx\n\nLocal Path:\n❯ /etc/hotpot/recipes/prod.yaml\n\nRemote Path:\n❯ recipes/prod.yaml\n\nSync Frequency (e.g., 5m, 1h):\n❯ 5m\n\n[ Submit ]\n\n✅ Configuration saved successfully\n\n# Enable and start the sync daemon\n\u003e hotpot syncd enable\n\n🔌 Enabling hotpot-syncd service...\n✅ Service enabled successfully\n\n# Disable and stop the sync daemon\n\u003e hotpot syncd disable\n\n🔌 Disabling hotpot-syncd service...\n✅ Service disabled successfully\n```\n\n## Configuration\n\n### ACME Providers (Let's Encrypt)\n\nRefer to documentation: https://doc.traefik.io/traefik/https/acme/#providers\n\n#### TLS Challenge using ALPN\n\n\u003e **Note**: TLS Challenge is not currently supported by CertManager. This is a Traefik only feature.\n\n```yaml\ntraefik:\n  tlsChallenge: true\n```\n\n#### DNS Challenge\n\nTo delegate ACME Challenges to CertManager, set `dnsChallenge` or `tlsChallenge` to `true` and configure the `certManager` section. And set `letsEncryptIngressClassResolver` to `traefik` in the `certManager` section. Also make sure Traefik is configured with `dnsChallenge` and `tlsChallenge` set to `false`.\n\nDocs: https://cert-manager.io/docs/configuration/acme/\n\n```yaml\ntraefik:\n  tlsChallenge: false\n  dnsChallenge: false\ncertManager:\n  dnsChallengeEnabled: true\n  dnsProvider: azure # ovh, azure, cloudflare or route53\n  letsEncryptIngressClassResolver: traefik\n```\n\n#### Supported DNS Providers\n\n| Provider  | Environment Variables                                                                                        | Recipe Config                    |\n|-----------|--------------------------------------------------------------------------------------------------------------|----------------------------------|\n| **OVH**   | `OVH_ENDPOINT`, `OVH_APPLICATION_KEY`, `OVH_APPLICATION_SECRET`, `OVH_CONSUMER_KEY`                          | `certManager.dnsProvider: ovh`   |\n| **Azure** | `AZURE_CLIENT_ID`, `AZURE_CLIENT_SECRET`, `AZURE_SUBSCRIPTION_ID`, `AZURE_TENANT_ID`, `AZURE_RESOURCE_GROUP` | `certManager.dnsProvider: azure` |\n\n\u003e **Note**: future versions of HotPot will support AWS Route53, Cloudflare, and other DNS providers.\n\nExample:\n    \n```yaml\ncertManager:\n  dnsChallengeEnabled: true\n  dnsProvider: azure\n  dnsAzureClientID: env.HOTPOT_DNS_AZURE_CLIENT_ID\n  dnsAzureClientSecret: env.HOTPOT_DNS_AZURE_CLIENT_SECRET\n  dnsAzureHostedZoneName: example.com\n  dnsAzureResourceGroupName: env.HOTPOT_DNS_AZURE_RESOURCE_GROUP_NAME\n  dnsAzureSubscriptionID: env.HOTPOT_DNS_AZURE_SUBSCRIPTION_ID\n  dnsAzureTenantID: env.HOTPOT_DNS_AZURE_TENANT_ID\n```\n\n**Note**: If you need to override CodeDNS Nameservers config (CoreDNS uses the default resolv.conf on the host), use this:\n\n```yaml\ncertManager:\n  dnsRecursiveNameservers:\n    - 8.8.8.8:53\n  dnsRecursiveNameserversOnly: true\n```\n\n## Contributing\n\nContributions are welcome! If you find any issues, have suggestions, or would like to contribute code, please open an issue or a pull request on our GitHub page.\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzcubbs%2Fhotpot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzcubbs%2Fhotpot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzcubbs%2Fhotpot/lists"}