From d10620fb584217af7e92145988e2ca1fa0e9becb Mon Sep 17 00:00:00 2001 From: Michael Schubert Date: Mon, 15 Oct 2018 11:27:32 +0200 Subject: [PATCH] Add support for Flatcar Linux bare-metal cached_install * Support bare-metal cached_install=true mode with Flatcar Linux where assets are fetched from the Matchbox assets cache instead of from the upstream Flatcar download server * Skipped in original Flatcar support to keep it simple https://github.com/poseidon/typhoon/pull/209 --- CHANGES.md | 4 +++ .../container-linux/kubernetes/groups.tf | 2 +- .../container-linux/kubernetes/profiles.tf | 28 +++++++++++++++++-- docs/cl/bare-metal.md | 2 +- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 678fc557..0946ddb0 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -20,6 +20,10 @@ Notable changes between versions. * Remove admin_password field (disabled) since it is now optional * Require `terraform-provider-azurerm` v1.16+ (action required) +#### Bare-Metal + +* Add support for `cached_install` mode with Flatcar Linux ([#315](https://github.com/poseidon/typhoon/pull/315)) + #### DigitalOcean * Require `terraform-provider-digitalocean` v1.0+ (action required) diff --git a/bare-metal/container-linux/kubernetes/groups.tf b/bare-metal/container-linux/kubernetes/groups.tf index 5d587f23..6a467af3 100644 --- a/bare-metal/container-linux/kubernetes/groups.tf +++ b/bare-metal/container-linux/kubernetes/groups.tf @@ -3,7 +3,7 @@ resource "matchbox_group" "install" { name = "${format("install-%s", element(concat(var.controller_names, var.worker_names), count.index))}" - profile = "${local.flavor == "flatcar" ? element(matchbox_profile.flatcar-install.*.name, count.index) : var.cached_install == "true" ? element(matchbox_profile.cached-container-linux-install.*.name, count.index) : element(matchbox_profile.container-linux-install.*.name, count.index)}" + profile = "${local.flavor == "flatcar" ? var.cached_install == "true" ? element(matchbox_profile.cached-flatcar-linux-install.*.name, count.index) : element(matchbox_profile.flatcar-install.*.name, count.index) : var.cached_install == "true" ? element(matchbox_profile.cached-container-linux-install.*.name, count.index) : element(matchbox_profile.container-linux-install.*.name, count.index)}" selector { mac = "${element(concat(var.controller_macs, var.worker_macs), count.index)}" diff --git a/bare-metal/container-linux/kubernetes/profiles.tf b/bare-metal/container-linux/kubernetes/profiles.tf index 51e5977c..1b95bb55 100644 --- a/bare-metal/container-linux/kubernetes/profiles.tf +++ b/bare-metal/container-linux/kubernetes/profiles.tf @@ -49,7 +49,7 @@ data "template_file" "container-linux-install-configs" { } // Container Linux Install profile (from matchbox /assets cache) -// Note: Admin must have downloaded os_version into matchbox assets. +// Note: Admin must have downloaded os_version into matchbox assets/coreos. resource "matchbox_profile" "cached-container-linux-install" { count = "${length(var.controller_names) + length(var.worker_names)}" name = "${format("%s-cached-container-linux-install-%s", var.cluster_name, element(concat(var.controller_names, var.worker_names), count.index))}" @@ -87,7 +87,7 @@ data "template_file" "cached-container-linux-install-configs" { ssh_authorized_key = "${var.ssh_authorized_key}" # profile uses -b baseurl to install from matchbox cache - baseurl_flag = "-b ${var.matchbox_http_endpoint}/assets/coreos" + baseurl_flag = "-b ${var.matchbox_http_endpoint}/assets/${local.flavor}" } } @@ -114,6 +114,30 @@ resource "matchbox_profile" "flatcar-install" { container_linux_config = "${element(data.template_file.container-linux-install-configs.*.rendered, count.index)}" } +// Flatcar Linux Install profile (from matchbox /assets cache) +// Note: Admin must have downloaded os_version into matchbox assets/flatcar. +resource "matchbox_profile" "cached-flatcar-linux-install" { + count = "${length(var.controller_names) + length(var.worker_names)}" + name = "${format("%s-cached-flatcar-linux-install-%s", var.cluster_name, element(concat(var.controller_names, var.worker_names), count.index))}" + + kernel = "/assets/flatcar/${var.os_version}/flatcar_production_pxe.vmlinuz" + + initrd = [ + "/assets/flatcar/${var.os_version}/flatcar_production_pxe_image.cpio.gz", + ] + + args = [ + "initrd=flatcar_production_pxe_image.cpio.gz", + "flatcar.config.url=${var.matchbox_http_endpoint}/ignition?uuid=$${uuid}&mac=$${mac:hexhyp}", + "flatcar.first_boot=yes", + "console=tty0", + "console=ttyS0", + "${var.kernel_args}", + ] + + container_linux_config = "${element(data.template_file.cached-container-linux-install-configs.*.rendered, count.index)}" +} + // Kubernetes Controller profiles resource "matchbox_profile" "controllers" { count = "${length(var.controller_names)}" diff --git a/docs/cl/bare-metal.md b/docs/cl/bare-metal.md index 4d9b6e87..95aee062 100644 --- a/docs/cl/bare-metal.md +++ b/docs/cl/bare-metal.md @@ -377,7 +377,7 @@ Check the [variables.tf](https://github.com/poseidon/typhoon/blob/master/bare-me | Name | Description | Default | Example | |:-----|:------------|:--------|:--------| -| cached_install | Whether machines should PXE boot and install from the Matchbox `/assets` cache. Admin MUST have downloaded Container Linux images into the cache to use this (coreos only for now) | false | true | +| cached_install | PXE boot and install from the Matchbox `/assets` cache. Admin MUST have downloaded Container Linux or Flatcar images into the cache | false | true | | install_disk | Disk device where Container Linux should be installed | "/dev/sda" | "/dev/sdb" | | networking | Choice of networking provider | "calico" | "calico" or "flannel" | | network_mtu | CNI interface MTU (calico-only) | 1480 | - |