-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxen_nodes.tf
110 lines (88 loc) · 3.37 KB
/
xen_nodes.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
locals {
node_prefix = "${var.node_prefix}-${var.cluster_name}-node"
}
resource "random_integer" "node" {
count = var.node_count
min = 1000
max = 9999
}
resource "macaddress" "mac_nodes" {
count = var.node_count
prefix = [0, 22, 62]
lifecycle {
ignore_changes = [prefix]
}
}
resource "xenorchestra_cloud_config" "node" {
count = var.node_count
name = "ubuntu-base-config-node-${count.index}"
template = <<EOF
#cloud-config
hostname: "${local.node_prefix}-${random_integer.node[count.index].result}.${var.dns_sub_zone}.${lower(var.dns_zone)}"
users:
- name: cloud-user
gecos: cloud-user
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- ${var.public_ssh_key}
packages:
- open-iscsi
- lsscsi
- sg3-utils
- multipath-tools
- scsitools
- cifs-utils
- jq
runcmd:
- wget https://github.com/xenserver/xe-guest-utilities/releases/download/v8.4.0/xe-guest-utilities_8.4.0-1_amd64.deb
- dpkg -i xe-guest-utilities_8.4.0-1_amd64.deb
- |
netplan apply
snap install microk8s --classic
ufw allow in on cni0 && sudo ufw allow out on cni0
ufw default allow routed
sudo tee /etc/multipath.conf <<-'EOD'
defaults {
user_friendly_names yes
find_multipaths yes
}
EOD
systemctl enable multipath-tools.service
systemctl restart multipath-tools
systemctl enable open-iscsi.service
systemctl restart open-iscsi
microk8s start
microk8s join ${xenorchestra_vm.master.ipv4_addresses[0]}:25000/${local.custom_token} --worker
microk8s kubectl label node ${local.node_prefix}-${random_integer.node[count.index].result}.${var.dns_sub_zone}.${substr(lower(var.dns_zone), 0, length(var.dns_zone) - 1)} node-role.kubernetes.io/worker=worker
EOF
depends_on = [xenorchestra_vm.master]
}
resource "xenorchestra_vm" "node" {
count = var.node_count
name_label = "${local.node_prefix}-${random_integer.node[count.index].result}"
cloud_config = xenorchestra_cloud_config.node[count.index].template
cloud_network_config = var.cloud_network_config_template
template = var.node_xoa_template_uuid
auto_poweron = true
name_description = "${local.node_prefix}-${random_integer.node[count.index].result}.${var.dns_sub_zone}.${substr(lower(var.dns_zone), 0, length(var.dns_zone) - 1)}"
network {
network_id = data.xenorchestra_network.node.id
mac_address = macaddress.mac_nodes[count.index].address
expected_ip_cidr = var.node_expected_cidr
}
disk {
sr_id = var.node_os_disk_xoa_sr_uuid[count.index % length(var.node_os_disk_xoa_sr_uuid)]
name_label = "${local.node_prefix}-${random_integer.node[count.index].result}-os"
size = var.node_os_disk_size * 1024 * 1024 * 1024 # GB to B
}
cpus = var.node_cpu_count
memory_max = var.node_memory_gb * 1024 * 1024 * 1024 # GB to B
start_delay = var.start_delay
destroy_cloud_config_vdi_after_boot = false
tags = concat(var.tags, var.node_tags, ["kubernetes.io/role:worker", "xcp-ng.org/deployment:${var.cluster_name}"])
lifecycle {
ignore_changes = [disk, affinity_host, template]
}
depends_on = [xenorchestra_vm.master, null_resource.sleep_while_master_readies_up, xenorchestra_vm.secondary]
}