113 lines
4.6 KiB
HCL
113 lines
4.6 KiB
HCL
#Flavour kubernetes
|
|
build {
|
|
name = "kubernetes"
|
|
description = <<EOF
|
|
This builder builds a QEMU image from the base build output. The goal here is to install ${local.Kubernetes.Name}
|
|
with it's provisionning.
|
|
EOF
|
|
|
|
source "source.qemu.alpine" {
|
|
output_directory = "${var.output_dir}/${var.version}/provisionned/${local.Kubernetes.Name}"
|
|
vm_name = "${local.output_name}-${var.version}-${local.Kubernetes.Name}.img"
|
|
iso_url = "${var.output_dir}/${var.version}/base/${local.output_name}-${var.version}.img"
|
|
iso_checksum = "none"
|
|
disk_size = 20480
|
|
disk_image = true
|
|
boot_command = [ "<enter><enter><wait>" ]
|
|
ssh_clear_authorized_keys = true
|
|
}
|
|
|
|
// Install templater and bootstraper
|
|
provisioner "shell" {
|
|
script = "${local.locations.provisionning}/templater-install.sh"
|
|
}
|
|
|
|
// Copy configuration values on the image
|
|
provisioner "shell" {
|
|
inline = [
|
|
"sh -cx 'mkdir -p ${local.builder_config.TemplateDir}'",
|
|
"sh -cx 'mkdir -p ${local.builder_config.ValueDir}'"
|
|
]
|
|
}
|
|
|
|
// Copy configuration templates to the image
|
|
provisioner "file" {
|
|
destination = "${local.builder_config.TemplateDir}/"
|
|
source = "${local.locations.templates}/conf/${build.name}/"
|
|
}
|
|
|
|
// Copy configuration values on the image
|
|
provisioner "file" {
|
|
destination = "${local.builder_config.ValueDir}/${build.name}.json"
|
|
content = "${jsonencode(local.Kubernetes)}"
|
|
}
|
|
|
|
// Copy habor OpenRC init script to the image
|
|
provisioner "file" {
|
|
destination = "/etc/local.d/sharemetrics.start"
|
|
source = "${local.locations.provisionning}/conf/${build.name}/sharemetrics.start"
|
|
}
|
|
|
|
provisioner "file" {
|
|
destination = "/etc/local.d/initkubernetes.start"
|
|
source = "${local.locations.provisionning}/conf/${build.name}/initkubernetes.start"
|
|
}
|
|
|
|
provisioner "shell" {
|
|
inline = [
|
|
"chmod +x /etc/local.d/sharemetrics.start",
|
|
"chmod +x /etc/local.d/initkubernetes.start"
|
|
]
|
|
}
|
|
|
|
// Generate default configuration for kubernetes
|
|
provisioner "shell" {
|
|
max_retries = 3
|
|
inline = [ "sh -cx '/usr/local/bin/btr -c ${local.builder_config.ValueDir}/ -t ${local.builder_config.TemplateDir}'" ]
|
|
}
|
|
|
|
// Complete kubernetes install
|
|
provisioner "shell" {
|
|
expect_disconnect = true
|
|
max_retries = 6
|
|
script = "${local.locations.provisionning}/${build.name}.sh"
|
|
}
|
|
|
|
// Install OpenNebula context tool
|
|
provisioner "shell" {
|
|
script = "${local.locations.provisionning}/one-context.sh"
|
|
}
|
|
|
|
// Deploy the opennebula context script to manage configuration
|
|
provisioner "file" {
|
|
destination = "/etc/one-context.d/net-96-templater"
|
|
source = "${local.locations.provisionning}/conf/one-context/net-96-templater"
|
|
}
|
|
|
|
provisioner "shell" {
|
|
inline = [
|
|
"chmod +x /etc/one-context.d/net-96-templater"
|
|
]
|
|
}
|
|
|
|
provisioner "shell" {
|
|
inline = [
|
|
"service docker start",
|
|
"service containerd start",
|
|
"sleep 5",
|
|
"kubeadm config images pull" ]
|
|
}
|
|
|
|
post-processor "shell-local" {
|
|
inline = [
|
|
"/bin/sh ${path.cwd}/post-processors/sparsify.sh ${var.output_dir}/${var.version}/provisionned/${local.Kubernetes.Name} ${var.image_version}",
|
|
"ruby ${local.locations.tools}/one-templates -t image -m 640 -T ${local.locations.templates}/one/image/common.tpl -n ${local.output_name}-${var.version}-${local.Kubernetes.Name} -c '${local.Kubernetes.Name} base image' --image-file ${var.output_dir}/${var.version}/provisionned/${local.Kubernetes.Name}/${local.output_name}-${var.version}-${local.Kubernetes.Name}.img",
|
|
"ruby ${local.locations.tools}/one-templates -t vm -m 640 -T ${local.locations.templates}/one/vm/kubeleader.xml -n ${local.output_name}-${var.version}-${local.Kubernetes.Name}Leader --image-name ${local.output_name}-${var.version}-${local.Kubernetes.Name}",
|
|
"ruby ${local.locations.tools}/one-templates -t vm -m 640 -T ${local.locations.templates}/one/vm/kubemaster.xml -n ${local.output_name}-${var.version}-${local.Kubernetes.Name}Master --image-name ${local.output_name}-${var.version}-${local.Kubernetes.Name}",
|
|
"ruby ${local.locations.tools}/one-templates -t vm -m 640 -T ${local.locations.templates}/one/vm/kubeworker.xml -n ${local.output_name}-${var.version}-${local.Kubernetes.Name}Worker --image-name ${local.output_name}-${var.version}-${local.Kubernetes.Name}",
|
|
"ruby ${local.locations.tools}/one-templates -t service -m 640 -T ${local.locations.templates}/one/service/${build.name}-cluster.json -n ${build.name}-cluster-${local.output_name}-${var.version} --vm-name ${local.output_name}-${var.version}-${local.Kubernetes.Name}",
|
|
]
|
|
}
|
|
|
|
}
|