-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.tf
166 lines (126 loc) · 4.3 KB
/
main.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
module "bootstrap" {
source = "./modules/bootstrap"
public_key_pair_name = "k0s"
public_key_pair_path = var.public_key_pair_path
}
module "network" {
source = "./modules/network"
name = "k0s"
cidr = var.network_cidr_v4
external_network_id = var.network_external_id
dns_servers = var.network_dns_servers
depends_on = [module.bootstrap]
}
module "security_groups" {
source = "./modules/security-groups"
cidr = var.network_cidr_v4
}
module "control_plane" {
source = "./modules/instance"
count = var.control_plane_number
name = "k0s-control-plane${count.index}"
image_id = var.control_plane_image_id
flavor_id = var.control_plane_flavor_id
public_key_pair = module.bootstrap.public_key_pair_name
private_key_pair = var.private_key_pair_path
ssh_login_name = var.ssh_login_name
security_groups = [
module.security_groups.ssh_name,
module.security_groups.control_plane_api_name,
module.security_groups.controller_name,
module.security_groups.worker_name
]
network = {
name = module.network.name
floating_ip_pool = var.network_floating_ip_pool
}
depends_on = [module.bootstrap, module.network, module.security_groups]
}
module "worker" {
source = "./modules/instance"
count = var.worker_number
name = "k0s-worker${count.index}"
image_id = var.worker_image_id
flavor_id = var.worker_flavor_id
public_key_pair = module.bootstrap.public_key_pair_name
private_key_pair = var.private_key_pair_path
ssh_login_name = var.ssh_login_name
security_groups = [
module.security_groups.ssh_name,
module.security_groups.worker_name,
module.security_groups.http_name
]
network = {
name = module.network.name
floating_ip_pool = var.network_floating_ip_pool
}
user_data = data.cloudinit_config.worker.rendered
depends_on = [module.bootstrap, module.network, module.security_groups]
}
module "load_balancer" {
source = "./modules/instance"
count = "1"
name = "k0s-lb${count.index}"
image_id = var.worker_image_id
flavor_id = var.worker_flavor_id
public_key_pair = module.bootstrap.public_key_pair_name
private_key_pair = var.private_key_pair_path
ssh_login_name = var.ssh_login_name
security_groups = [
module.security_groups.ssh_name,
module.security_groups.control_plane_api_name,
module.security_groups.controller_name,
module.security_groups.worker_name
]
network = {
name = module.network.name
floating_ip_pool = var.network_floating_ip_pool
}
user_data = data.cloudinit_config.lb.rendered
depends_on = [module.bootstrap, module.network, module.security_groups, module.worker, module.control_plane]
}
module "k0s-cluster" {
source = "./modules/k0s-cluster"
private_key_pair_path = var.private_key_pair_path
ssh_login_name = var.ssh_login_name
hosts = concat(
[for instance in module.control_plane : {
role = "controller"
private_ip_address = instance.access_ip_v4
floating_ip_address = instance.floating_ip_address
}],
[for instance in module.worker : {
role = "worker"
private_ip_address = instance.access_ip_v4
floating_ip_address = instance.floating_ip_address
}]
)
load_balancer_ip = module.load_balancer[0].floating_ip_address
depends_on = [module.bootstrap, module.network, module.security_groups, module.control_plane, module.worker, module.load_balancer]
}
module "k0s-crio" {
source = "./modules/k0s-crio"
hosts = [ for instance in module.worker : {
floating_ip_address = instance.floating_ip_address
}]
ssh_login_name = var.ssh_login_name
private_key_pair_path = var.private_key_pair_path
depends_on = [module.k0s-cluster]
}
module "flux-bootstrap" {
source = "./modules/flux-bootstrap"
cluster_config = module.k0s-cluster.kubeconfig
}
module "os-cloud-secret" {
source = "./modules/os-cloud-secret"
openstack_auth_url = var.openstack_auth_url
cluster_config = module.k0s-cluster.kubeconfig
network_external_id = var.network_external_id
network_internal_subnet_id = module.network.subnet_id
}
resource "null_resource" "this" {
provisioner "local-exec" {
command = "./files/scripts/finalize.sh"
}
depends_on = [module.os-cloud-secret]
}