Skip to content

Commit 4465f88

Browse files
fix: add kubeconfig.tf file and resource make dynamic
1 parent 8160144 commit 4465f88

File tree

9 files changed

+126
-29
lines changed

9 files changed

+126
-29
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,4 +207,5 @@ terraform.tfstate
207207
*.tfstate.backup
208208
*.iml
209209
*.terraform.lock.hcl
210-
*.lock.hcl
210+
*.lock.hcl
211+
*kubeonfig

README.yaml

Lines changed: 54 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ include:
3333
# How to use this project
3434
usage: |-
3535
Here are some examples of how you can use this module in your inventory structure:
36+
## basic example
3637
```hcl
3738
module "cluster" {
3839
source = "terraform-do-modules/cluster/digitalocean"
@@ -43,22 +44,70 @@ usage: |-
4344
cluster_version = "1.27.2-do.0"
4445
vpc_uuid = module.vpc.id
4546
46-
default_node_pool = {
47-
default_node = {
47+
critical_node_pool = {
48+
critical_node = {
4849
node_count = 1
4950
min_nodes = 1
5051
max_nodes = 2
5152
size = "s-1vcpu-2gb"
5253
}
5354
}
5455
55-
node_pools = {
56-
node = {
57-
size = "s-1vcpu-2gb"
56+
app_node_pools = {
57+
app_node = {
5858
node_count = 1
5959
min_nodes = 1
6060
max_nodes = 2
61+
size = "s-1vcpu-2gb"
6162
}
6263
}
6364
}
6465
```
66+
## complete example
67+
```hcl
68+
module "cluster" {
69+
source = "terraform-do-modules/cluster/digitalocean"
70+
version = "0.15.0"
71+
name = local.name
72+
environment = local.environment
73+
region = local.region
74+
cluster_version = "1.27.2-do.0"
75+
vpc_uuid = module.vpc.id
76+
77+
critical_node_pool = {
78+
critical_node = {
79+
node_count = 1
80+
min_nodes = 1
81+
max_nodes = 2
82+
size = "s-1vcpu-2gb"
83+
labels = { "cluster" = "critical-node", }
84+
tags = ["demo"]
85+
taint = [
86+
{
87+
key = "name"
88+
value = "default"
89+
effect = "NoSchedule"
90+
}
91+
]
92+
}
93+
}
94+
95+
app_node_pools = {
96+
app_node = {
97+
size = "s-1vcpu-2gb"
98+
node_count = 1
99+
min_nodes = 1
100+
max_nodes = 2
101+
labels = { "cluster" = "app-node" }
102+
tags = ["demo"]
103+
taint = [
104+
{
105+
key = "mysize"
106+
value = "large"
107+
effect = "NoSchedule"
108+
}
109+
]
110+
}
111+
}
112+
}
113+
```

_examples/basic/main.tf

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
provider "digitalocean" {}
22

33
locals {
4-
name = "app3"
4+
name = "app"
55
environment = "test"
66
region = "blr1"
77
}
@@ -28,21 +28,21 @@ module "cluster" {
2828
cluster_version = "1.27.2-do.0"
2929
vpc_uuid = module.vpc.id
3030

31-
default_node_pool = {
32-
default_node = {
31+
critical_node_pool = {
32+
critical_node = {
3333
node_count = 1
3434
min_nodes = 1
3535
max_nodes = 2
3636
size = "s-1vcpu-2gb"
3737
}
3838
}
3939

40-
node_pools = {
41-
node = {
42-
size = "s-1vcpu-2gb"
40+
app_node_pools = {
41+
app_node = {
4342
node_count = 1
4443
min_nodes = 1
4544
max_nodes = 2
45+
size = "s-1vcpu-2gb"
4646
}
4747
}
4848
}

_examples/basic/outputs.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
output "id" {
55
value = module.cluster[*].id
66
description = "The id of Kubernetes cluster."
7-
}
7+
}

_examples/complete/main.tf

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,40 @@ module "cluster" {
2828
cluster_version = "1.27.2-do.0"
2929
vpc_uuid = module.vpc.id
3030

31-
default_node_pool = {
32-
default_node = {
31+
critical_node_pool = {
32+
critical_node = {
3333
node_count = 1
3434
min_nodes = 1
3535
max_nodes = 2
3636
size = "s-1vcpu-2gb"
37+
labels = { "cluster" = "critical-node", }
38+
tags = ["demo"]
39+
taint = [
40+
{
41+
key = "name"
42+
value = "default"
43+
effect = "NoSchedule"
44+
}
45+
]
3746
}
3847
}
3948

40-
node_pools = {
41-
node1 = {
42-
size = "s-1vcpu-2gb"
43-
node_count = 1
44-
min_nodes = 1
45-
max_nodes = 2
46-
},
47-
node2 = {
49+
app_node_pools = {
50+
app_node = {
4851
size = "s-1vcpu-2gb"
4952
node_count = 1
5053
min_nodes = 1
5154
max_nodes = 2
55+
labels = { "cluster" = "app-node" }
56+
tags = ["demo"]
57+
taint = [
58+
{
59+
key = "mysize"
60+
value = "large"
61+
effect = "NoSchedule"
62+
}
63+
]
5264
}
5365
}
5466
}
67+

kubeconfig.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
resource "local_file" "kubeconfig" {
2+
content = join("", digitalocean_kubernetes_cluster.main[*].kube_config[0].raw_config)
3+
filename = pathexpand(var.kubeconfig_path)
4+
}

main.tf

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,24 @@ resource "digitalocean_kubernetes_cluster" "main" {
2626
registry_integration = var.registry_integration
2727

2828
dynamic "node_pool" {
29-
for_each = var.default_node_pool
29+
for_each = var.critical_node_pool
3030
content {
31-
name = lookup(node_pool.value, "name", "default-node-pool")
31+
name = lookup(node_pool.value, "name", "application")
3232
size = lookup(node_pool.value, "size", "s-1vcpu-2gb")
3333
node_count = lookup(node_pool.value, "node_count", 1)
3434
auto_scale = lookup(node_pool.value, "auto_scale", true)
3535
min_nodes = lookup(node_pool.value, "min_nodes", 1)
3636
max_nodes = lookup(node_pool.value, "max_nodes", 2)
3737
tags = lookup(node_pool.value, "tags", null)
3838
labels = lookup(node_pool.value, "labels", null)
39+
dynamic "taint" {
40+
for_each = lookup(node_pool.value, "taint", [])
41+
content {
42+
key = lookup(taint.value, "key", null)
43+
value = lookup(taint.value, "value", null)
44+
effect = lookup(taint.value, "effect", null)
45+
}
46+
}
3947
}
4048
}
4149

@@ -54,15 +62,24 @@ resource "digitalocean_kubernetes_cluster" "main" {
5462
#Description : Provides a DigitalOcean Kubernetes node pool resource. While the default node pool must be defined in the digitalocean_kubernetes_cluster resource, this resource can be used to add additional ones to a cluster.
5563
##--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5664
resource "digitalocean_kubernetes_node_pool" "main" {
57-
for_each = var.enabled ? var.node_pools : {}
65+
for_each = var.enabled ? var.app_node_pools : {}
5866

5967
cluster_id = join("", digitalocean_kubernetes_cluster.main[*].id)
60-
name = lookup(each.value, "name", "node-pool")
68+
name = lookup(each.value, "name", "critical")
6169
size = lookup(each.value, "size", "s-1vcpu-2gb")
6270
node_count = lookup(each.value, "node_count", 1)
6371
auto_scale = lookup(each.value, "auto_scale", true)
6472
min_nodes = lookup(each.value, "min_nodes", 1)
6573
max_nodes = lookup(each.value, "max_nodes", 2)
6674
tags = lookup(each.value, "tags", null)
6775
labels = lookup(each.value, "labels", null)
76+
77+
dynamic "taint" {
78+
for_each = lookup(each.value, "taint", [])
79+
content {
80+
key = taint.value["key"]
81+
value = taint.value["value"]
82+
effect = taint.value["effect"]
83+
}
84+
}
6885
}

outputs.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,7 @@ output "maintenance_policy_day" {
4949
value = digitalocean_kubernetes_cluster.main[*].maintenance_policy
5050
description = "A block representing the cluster's maintenance window. Updates will be applied within this window."
5151
}
52+
53+
output "local_file" {
54+
value = join("", digitalocean_kubernetes_cluster.main[*].kube_config[0].raw_config)
55+
}

variables.tf

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,13 @@ variable "registry_integration" {
7272
description = "Enables or disables the DigitalOcean container registry integration for the cluster. This requires that a container registry has first been created for the account."
7373
}
7474

75-
variable "default_node_pool" {
75+
variable "critical_node_pool" {
7676
type = any
7777
default = {}
7878
description = "Cluster default node pool."
7979
}
8080

81-
variable "node_pools" {
81+
variable "app_node_pools" {
8282
type = map(any)
8383
default = {}
8484
description = "Cluster additional node pools."
@@ -101,3 +101,12 @@ variable "maintenance_policy" {
101101
}
102102
description = "Define the window updates are to be applied when auto upgrade is set to true."
103103
}
104+
//variable "taint" {
105+
// type = any
106+
// default = {}
107+
//}
108+
109+
variable "kubeconfig_path" {
110+
description = "The path to save the kubeconfig to"
111+
default = "./kubeonfig"
112+
}

0 commit comments

Comments
 (0)