{"id":35767368,"url":"https://github.com/glueops/opentofu-module-gluekube-hetznercloud","last_synced_at":"2026-03-08T02:20:03.419Z","repository":{"id":329281128,"uuid":"1117894438","full_name":"GlueOps/opentofu-module-GlueKube-HetznerCloud","owner":"GlueOps","description":"Managed by github-org-manager","archived":false,"fork":false,"pushed_at":"2026-01-16T14:43:11.000Z","size":69,"stargazers_count":0,"open_issues_count":15,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-18T00:21:47.030Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GlueOps.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-12-17T01:11:29.000Z","updated_at":"2026-01-15T10:26:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/GlueOps/opentofu-module-GlueKube-HetznerCloud","commit_stats":null,"previous_names":["glueops/opentofu-module-gluekube-hetznercloud"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/GlueOps/opentofu-module-GlueKube-HetznerCloud","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GlueOps%2Fopentofu-module-GlueKube-HetznerCloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GlueOps%2Fopentofu-module-GlueKube-HetznerCloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GlueOps%2Fopentofu-module-GlueKube-HetznerCloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GlueOps%2Fopentofu-module-GlueKube-HetznerCloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GlueOps","download_url":"https://codeload.github.com/GlueOps/opentofu-module-GlueKube-HetznerCloud/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GlueOps%2Fopentofu-module-GlueKube-HetznerCloud/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29107301,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T00:52:08.035Z","status":"online","status_checked_at":"2026-02-05T02:00:07.839Z","response_time":65,"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":[],"created_at":"2026-01-07T02:20:26.928Z","updated_at":"2026-03-08T02:20:03.397Z","avatar_url":"https://github.com/GlueOps.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- BEGIN_TF_DOCS --\u003e\n# opentofu-module-GlueKube-HetznerCloud\n\nThis opentofu module deploys a Kubernetes cluster on Hetzner Cloud using GlueKube.\n\n```hcl\n\nmodule \"captain\" {\n  source                = \"git::https://github.com/GlueOps/opentofu-module-GlueKube-HetznerCloud.git\"\n  gluekube_docker_image = \"ghcr.io/glueops/gluekube\"\n  gluekube_docker_tag   = \"v0.0.15-rc9\"\n  vpc_cidr_block        = \"10.0.0.0/16\"\n  subnet_cidr           = \"10.0.0.0/24\"\n  region                = var.provider_credentials.region\n\n  # control_plane_endpoint_dns = \"ctrp\"\n  provider_credentials = var.provider_credentials\n  autoglue = {\n    autoglue_cluster_name = var.autoglue_cluster_name\n\n    credentials = {\n      autoglue_key        = var.autoglue_key\n      autoglue_org_secret = var.autoglue_org_secret\n      base_url            = var.autoglue_base_url\n    }\n    route_53_config = {\n      aws_access_key_id     = var.aws_access_key_id\n      aws_secret_access_key = var.aws_secret_access_key\n      aws_region            = var.route53_region\n      domain_name           = var.domain_name\n      zone_id               = var.route53_zone_id\n      credential_id         = var.autoglue_credentials_id\n    }\n  }\n  bastion = {\n    instance_type = \"cpx32\"\n    image         = \"ubuntu-24.04\"\n  }\n\n  node_pools = [\n    {\n      \"instance_type\" : \"cpx32\",\n      \"role\" : \"master\",\n      \"name\" : \"master-node-pool\",\n      \"image\" : \"ubuntu-24.04\",\n      \"node_count\" : 3,\n\n      \"kubernetes_labels\" : {},\n      \"kubernetes_taints\" : []\n    },\n    {\n      \"instance_type\" : \"cpx32\",\n      \"role\" : \"worker\",\n      \"name\" : \"glueops-platform-node-pool-1\",\n      \"image\" : \"ubuntu-24.04\",\n\n      \"node_count\" : 2,\n\n      \"kubernetes_labels\" : {\n        \"glueops.dev/role\" : \"glueops-platform\"\n      },\n      \"kubernetes_taints\" : [\n        {\n          key    = \"glueops.dev/role\"\n          value  = \"glueops-platform\"\n          effect = \"NoSchedule\"\n        }\n      ]\n    },\n    {\n      \"instance_type\" : \"cpx32\",\n      \"role\" : \"worker\",\n      \"name\" : \"glueops-platform-node-pool-argocd-app-controller\",\n      \"node_count\" : 2,\n      \"image\" : \"ubuntu-24.04\",\n\n      \"kubernetes_labels\" : {\n        \"glueops.dev/role\" : \"glueops-platform-argocd-app-controller\"\n      },\n      \"kubernetes_taints\" : [\n        {\n          key    = \"glueops.dev/role\"\n          value  = \"glueops-platform-argocd-app-controller\"\n          effect = \"NoSchedule\"\n        }\n      ]\n    },\n    {\n      \"instance_type\" : \"cpx32\",\n      \"role\" : \"worker\",\n      \"name\" : \"clusterwide-node-pool-1\",\n      \"image\" : \"ubuntu-24.04\",\n\n      \"node_count\" : 2,\n\n      \"kubernetes_labels\" : {},\n      \"kubernetes_taints\" : []\n    },\n    \n    {\n      \"instance_type\" : \"cpx32\",\n      \"role\" : \"worker\",\n      \"name\" : \"node-pool-platform-loadbalancer-2\",\n      \"image\" : \"ubuntu-24.04\",\n\n      \"node_count\" : 2,\n\n      \"kubernetes_labels\" : {\n        \"glueops.dev/role\" : \"glueops-platform\",\n        \"use-as-loadbalancer\" : \"platform\"\n      },\n      \"kubernetes_taints\" : []\n    },\n    {\n      \"instance_type\" : \"cpx32\",\n      \"role\" : \"worker\",\n      \"name\" : \"node-pool-public-loadbalancer\",\n      \"image\" : \"ubuntu-24.04\",\n\n      \"node_count\" : 2,\n\n      \"kubernetes_labels\" : {\n        \"glueops.dev/role\" : \"glueops-platform\",\n        \"use-as-loadbalancer\" : \"public\"\n      },\n      \"kubernetes_taints\" : []\n    },\n  ]\n}\n\n```\n\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_autoglue\"\u003e\u003c/a\u003e [autoglue](#requirement\\_autoglue) | 0.10.6 |\n| \u003ca name=\"requirement_hcloud\"\u003e\u003c/a\u003e [hcloud](#requirement\\_hcloud) | 1.49.1 |\n\n## Providers\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"provider_autoglue\"\u003e\u003c/a\u003e [autoglue](#provider\\_autoglue) | 0.10.6 |\n| \u003ca name=\"provider_hcloud\"\u003e\u003c/a\u003e [hcloud](#provider\\_hcloud) | 1.49.1 |\n\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_node_pool\"\u003e\u003c/a\u003e [node\\_pool](#module\\_node\\_pool) | ./modules/gluekube | n/a |\n\n## Resources\n\n| Name | Type |\n|------|------|\n| autoglue_cluster.cluster | resource |\n| autoglue_cluster_bastion.bastion | resource |\n| autoglue_cluster_captain_domain.domain | resource |\n| autoglue_cluster_control_plane_record_set.ctrl_record | resource |\n| autoglue_cluster_node_pools.autoglue_cluster_node_pools | resource |\n| autoglue_domain.captain | resource |\n| autoglue_record_set.cluster_record | resource |\n| autoglue_server.bastion | resource |\n| autoglue_ssh_key.bastion | resource |\n| [hcloud_firewall.bastion_firewall](https://registry.terraform.io/providers/hetznercloud/hcloud/1.49.1/docs/resources/firewall) | resource |\n| [hcloud_network.private_network](https://registry.terraform.io/providers/hetznercloud/hcloud/1.49.1/docs/resources/network) | resource |\n| [hcloud_network_subnet.private_network_subnet](https://registry.terraform.io/providers/hetznercloud/hcloud/1.49.1/docs/resources/network_subnet) | resource |\n| [hcloud_server.bastion](https://registry.terraform.io/providers/hetznercloud/hcloud/1.49.1/docs/resources/server) | resource |\n| [hcloud_server_network.bastion_network](https://registry.terraform.io/providers/hetznercloud/hcloud/1.49.1/docs/resources/server_network) | resource |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_autoglue\"\u003e\u003c/a\u003e [autoglue](#input\\_autoglue) | Configuration for the AutoGlue platform integration, including cluster naming, credentials, and Route53 DNS settings. | \u003cpre\u003eobject({\u003cbr/\u003e    autoglue_cluster_name = string\u003cbr/\u003e\u003cbr/\u003e    credentials = object({\u003cbr/\u003e      autoglue_key        = string\u003cbr/\u003e      autoglue_org_secret = string\u003cbr/\u003e      base_url            = string\u003cbr/\u003e    })\u003cbr/\u003e\u003cbr/\u003e    route_53_config = object({\u003cbr/\u003e      aws_access_key_id     = string\u003cbr/\u003e      aws_secret_access_key = string\u003cbr/\u003e      aws_region            = string\u003cbr/\u003e      domain_name           = string\u003cbr/\u003e      zone_id               = string\u003cbr/\u003e      credential_id         = string\u003cbr/\u003e    })\u003cbr/\u003e  })\u003c/pre\u003e | n/a | yes |\n| \u003ca name=\"input_bastion\"\u003e\u003c/a\u003e [bastion](#input\\_bastion) | Bastion configuration. | \u003cpre\u003eobject({\u003cbr/\u003e    instance_type = string\u003cbr/\u003e    image         = string\u003cbr/\u003e  })\u003c/pre\u003e | n/a | yes |\n| \u003ca name=\"input_gluekube_docker_image\"\u003e\u003c/a\u003e [gluekube\\_docker\\_image](#input\\_gluekube\\_docker\\_image) | n/a | `string` | `\"ghcr.io/glueops/gluekube\"` | no |\n| \u003ca name=\"input_gluekube_docker_tag\"\u003e\u003c/a\u003e [gluekube\\_docker\\_tag](#input\\_gluekube\\_docker\\_tag) | n/a | `string` | `\"v0.0.15-rc9\"` | no |\n| \u003ca name=\"input_node_pools\"\u003e\u003c/a\u003e [node\\_pools](#input\\_node\\_pools) | n/a | \u003cpre\u003elist(object({\u003cbr/\u003e    name              = string\u003cbr/\u003e    image             = string\u003cbr/\u003e    node_count        = number\u003cbr/\u003e    instance_type     = string\u003cbr/\u003e    role              = string\u003cbr/\u003e    kubernetes_labels = map(string)\u003cbr/\u003e    kubernetes_taints = list(object({\u003cbr/\u003e      key    = string\u003cbr/\u003e      value  = string\u003cbr/\u003e      effect = string\u003cbr/\u003e    }))\u003cbr/\u003e\u003cbr/\u003e  }))\u003c/pre\u003e | n/a | yes |\n| \u003ca name=\"input_provider_credentials\"\u003e\u003c/a\u003e [provider\\_credentials](#input\\_provider\\_credentials) | n/a | \u003cpre\u003eobject({\u003cbr/\u003e    name   = string\u003cbr/\u003e    token  = string\u003cbr/\u003e    region = string\u003cbr/\u003e  })\u003c/pre\u003e | n/a | yes |\n| \u003ca name=\"input_region\"\u003e\u003c/a\u003e [region](#input\\_region) | n/a | `string` | `\"hel1\"` | no |\n| \u003ca name=\"input_subnet_cidr\"\u003e\u003c/a\u003e [subnet\\_cidr](#input\\_subnet\\_cidr) | n/a | `string` | n/a | yes |\n| \u003ca name=\"input_vpc_cidr_block\"\u003e\u003c/a\u003e [vpc\\_cidr\\_block](#input\\_vpc\\_cidr\\_block) | The CIDR block for the VPC | `string` | n/a | yes |\n\n## Outputs\n\nNo outputs.\n\u003c!-- END_TF_DOCS --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglueops%2Fopentofu-module-gluekube-hetznercloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fglueops%2Fopentofu-module-gluekube-hetznercloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglueops%2Fopentofu-module-gluekube-hetznercloud/lists"}