Skip to content
This repository has been archived by the owner on Jun 29, 2022. It is now read-only.

remove usage of template_file #1046

Merged
merged 4 commits into from
Oct 8, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -112,38 +112,18 @@ resource "aws_instance" "controllers" {

# Controller Ignition configs
data "ct_config" "controller-ignitions" {
count = var.controller_count
content = data.template_file.controller-configs[count.index].rendered
pretty_print = false
snippets = var.controller_clc_snippets
}

# Controller Container Linux configs
data "template_file" "controller-configs" {
count = var.controller_count

template = file("${path.module}/cl/controller.yaml.tmpl")

vars = {
content = templatefile("${path.module}/cl/controller.yaml.tmpl", {
# Cannot use cyclic dependencies on controllers or their DNS records
etcd_name = "etcd${count.index}"
etcd_domain = "${var.cluster_name}-etcd${count.index}.${var.dns_zone}"
# etcd0=https://cluster-etcd0.example.com,etcd1=https://cluster-etcd1.example.com,...
etcd_initial_cluster = join(",", data.template_file.etcds.*.rendered)
etcd_initial_cluster = join(",", [for i in range(var.controller_count) : format("etcd%d=https://%s-etcd%d.%s:2380", i, var.cluster_name, i, var.dns_zone)])
ssh_keys = jsonencode(var.ssh_keys)
cluster_dns_service_ip = cidrhost(var.service_cidr, 10)
cluster_domain_suffix = var.cluster_domain_suffix
enable_tls_bootstrap = var.enable_tls_bootstrap
}
}

data "template_file" "etcds" {
count = var.controller_count
template = "etcd$${index}=https://$${cluster_name}-etcd$${index}.$${dns_zone}:2380"

vars = {
index = count.index
cluster_name = var.cluster_name
dns_zone = var.dns_zone
}
})
pretty_print = false
snippets = var.controller_clc_snippets
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,7 @@ resource "matchbox_profile" "container-linux-install" {
var.kernel_args,
])

container_linux_config = data.template_file.container-linux-install-configs[count.index].rendered
}

data "template_file" "container-linux-install-configs" {
count = length(var.controller_names) + length(var.worker_names)

template = file("${path.module}/cl/install.yaml.tmpl")

vars = {
container_linux_config = templatefile("${path.module}/cl/install.yaml.tmpl", {
os_flavor = local.flavor
os_channel = local.channel
os_version = var.os_version
Expand All @@ -48,7 +40,7 @@ data "template_file" "container-linux-install-configs" {
ssh_keys = jsonencode(var.ssh_keys)
# only cached-container-linux profile adds -b baseurl
baseurl_flag = ""
}
})
}

// CoreOS Container Linux Install profile (from matchbox /assets cache)
Expand Down Expand Up @@ -76,15 +68,7 @@ resource "matchbox_profile" "cached-container-linux-install" {
var.kernel_args,
])

container_linux_config = data.template_file.cached-container-linux-install-configs[count.index].rendered
}

data "template_file" "cached-container-linux-install-configs" {
count = length(var.controller_names) + length(var.worker_names)

template = file("${path.module}/cl/install.yaml.tmpl")

vars = {
container_linux_config = templatefile("${path.module}/cl/install.yaml.tmpl", {
os_flavor = local.flavor
os_channel = local.channel
os_version = var.os_version
Expand All @@ -94,7 +78,7 @@ data "template_file" "cached-container-linux-install-configs" {
ssh_keys = jsonencode(var.ssh_keys)
# profile uses -b baseurl to install from matchbox cache
baseurl_flag = "-b ${var.matchbox_http_endpoint}/assets/${local.flavor}"
}
})
}

// Flatcar Container Linux install profile (from release.flatcar-linux.net)
Expand All @@ -121,7 +105,17 @@ resource "matchbox_profile" "flatcar-install" {
var.kernel_args,
])

container_linux_config = data.template_file.container-linux-install-configs[count.index].rendered
container_linux_config = templatefile("${path.module}/cl/install.yaml.tmpl", {
os_flavor = local.flavor
os_channel = local.channel
os_version = var.os_version
ignition_endpoint = format("%s/ignition", var.matchbox_http_endpoint)
install_disk = var.install_disk
container_linux_oem = var.container_linux_oem
ssh_keys = jsonencode(var.ssh_keys)
# only cached-container-linux profile adds -b baseurl
baseurl_flag = ""
})
}

// Flatcar Container Linux Install profile (from matchbox /assets cache)
Expand Down Expand Up @@ -149,7 +143,17 @@ resource "matchbox_profile" "cached-flatcar-linux-install" {
var.kernel_args,
])

container_linux_config = data.template_file.cached-container-linux-install-configs[count.index].rendered
container_linux_config = templatefile("${path.module}/cl/install.yaml.tmpl", {
os_flavor = local.flavor
os_channel = local.channel
os_version = var.os_version
ignition_endpoint = format("%s/ignition", var.matchbox_http_endpoint)
install_disk = var.install_disk
container_linux_oem = var.container_linux_oem
ssh_keys = jsonencode(var.ssh_keys)
# profile uses -b baseurl to install from matchbox cache
baseurl_flag = "-b ${var.matchbox_http_endpoint}/assets/${local.flavor}"
})
}

// Kubernetes Controller profiles
Expand All @@ -164,20 +168,8 @@ resource "matchbox_profile" "controllers" {
}

data "ct_config" "controller-ignitions" {
count = length(var.controller_names)
content = data.template_file.controller-configs[count.index].rendered
pretty_print = false

# Must use direct lookup. Cannot use lookup(map, key) since it only works for flat maps
snippets = local.clc_map[var.controller_names[count.index]]
}

data "template_file" "controller-configs" {
count = length(var.controller_names)

template = file("${path.module}/cl/controller.yaml.tmpl")

vars = {
content = templatefile("${path.module}/cl/controller.yaml.tmpl", {
domain_name = var.controller_domains[count.index]
etcd_name = var.controller_names[count.index]
etcd_initial_cluster = join(
Expand All @@ -192,7 +184,11 @@ data "template_file" "controller-configs" {
cluster_domain_suffix = var.cluster_domain_suffix
ssh_keys = jsonencode(var.ssh_keys)
enable_tls_bootstrap = var.enable_tls_bootstrap
}
})
pretty_print = false

# Must use direct lookup. Cannot use lookup(map, key) since it only works for flat maps
snippets = local.clc_map[var.controller_names[count.index]]
}

// Kubernetes Worker profiles
Expand Down Expand Up @@ -227,17 +223,12 @@ locals {
# Hack to workaround https://github.com/hashicorp/terraform/issues/17251
# Default CoreOS Container Linux config snippets map every node names to list("\n") so
# all lookups succeed
total_length = length(var.controller_names) + length(var.worker_names)
clc_defaults = zipmap(
concat(var.controller_names, var.worker_names),
chunklist(data.template_file.clc-default-snippets.*.rendered, 1),
chunklist([for i in range(local.total_length) : "\n"], 1),
)

# Union of the default and user specific snippets, later overrides prior.
clc_map = merge(local.clc_defaults, var.clc_snippets)
}

// Horrible hack to generate a Terraform list of node count length
data "template_file" "clc-default-snippets" {
count = length(var.controller_names) + length(var.worker_names)
template = "\n"
}
59 changes: 22 additions & 37 deletions assets/terraform-modules/bootkube/assets.tf
Original file line number Diff line number Diff line change
Expand Up @@ -107,76 +107,61 @@ resource "local_file" "bootstrap-secrets" {

locals {
kubelet = var.disable_self_hosted_kubelet == false ? 1 : 0
}

# Render kubelet.yaml for kubelet chart
data "template_file" "kubelet" {
count = local.kubelet

template = "${file("${path.module}/resources/charts/kubelet.yaml")}"

vars = {
# Render kubelet.yaml for kubelet chart
kubelet_content = templatefile("${path.module}/resources/charts/kubelet.yaml", {
kubelet_image = "${var.container_images["kubelet_image"]}-${var.container_arch}"
cluster_dns_service_ip = cidrhost(var.service_cidr, 10)
cluster_domain_suffix = var.cluster_domain_suffix
enable_tls_bootstrap = var.enable_tls_bootstrap
}
})

kubeconfig_kubelet_content = templatefile("${path.module}/resources/kubeconfig-kubelet", {
ca_cert = base64encode(tls_self_signed_cert.kube-ca.cert_pem)
kubelet_cert = base64encode(tls_locally_signed_cert.kubelet.cert_pem)
kubelet_key = base64encode(tls_private_key.kubelet.private_key_pem)
server = format("https://%s:%s", var.api_servers[0], var.external_apiserver_port)
})

kubeconfig_admin_content = templatefile("${path.module}/resources/kubeconfig-admin", {
name = var.cluster_name
ca_cert = base64encode(tls_self_signed_cert.kube-ca.cert_pem)
kubelet_cert = base64encode(tls_locally_signed_cert.admin.cert_pem)
kubelet_key = base64encode(tls_private_key.admin.private_key_pem)
server = format("https://%s:%s", local.api_servers_external[0], var.external_apiserver_port)
})
}

# Populate kubelet chart values file named kubelet.yaml.
resource "local_file" "kubelet" {
count = local.kubelet

content = data.template_file.kubelet[0].rendered
content = join("", [for i in range(0, 1) : local.kubelet_content])
filename = "${var.asset_dir}/charts/kube-system/kubelet.yaml"
}

# Generated kubeconfig for Kubelets
resource "local_file" "kubeconfig-kubelet" {
content = data.template_file.kubeconfig-kubelet.rendered
content = local.kubeconfig_kubelet_content
filename = "${var.asset_dir}/auth/kubeconfig-kubelet"
}

# Generated admin kubeconfig (bootkube requires it be at auth/kubeconfig)
# https://github.com/kubernetes-incubator/bootkube/blob/master/pkg/bootkube/bootkube.go#L42
resource "local_file" "kubeconfig-admin" {
content = data.template_file.kubeconfig-admin.rendered
content = local.kubeconfig_admin_content
filename = "${var.asset_dir}/auth/kubeconfig"
}

# Generated admin kubeconfig in a file named after the cluster
resource "local_file" "kubeconfig-admin-named" {
content = data.template_file.kubeconfig-admin.rendered
content = local.kubeconfig_admin_content
filename = "${var.asset_dir}/auth/${var.cluster_name}-config"
}

data "template_file" "kubeconfig-kubelet" {
template = file("${path.module}/resources/kubeconfig-kubelet")

vars = {
ca_cert = base64encode(tls_self_signed_cert.kube-ca.cert_pem)
kubelet_cert = base64encode(tls_locally_signed_cert.kubelet.cert_pem)
kubelet_key = base64encode(tls_private_key.kubelet.private_key_pem)
server = format("https://%s:%s", var.api_servers[0], var.external_apiserver_port)
}
}

# If var.api_servers_external isn't set, use var.api_servers.
# This is for supporting separate API server URLs for external clients in a backward-compatible way.
# The use of split() and join() here is because Terraform's conditional operator ('?') cannot be
# used with lists.
locals {
api_servers_external = split(",", join(",", var.api_servers_external) == "" ? join(",", var.api_servers) : join(",", var.api_servers_external))
}

data "template_file" "kubeconfig-admin" {
template = file("${path.module}/resources/kubeconfig-admin")

vars = {
name = var.cluster_name
ca_cert = base64encode(tls_self_signed_cert.kube-ca.cert_pem)
kubelet_cert = base64encode(tls_locally_signed_cert.admin.cert_pem)
kubelet_key = base64encode(tls_private_key.admin.private_key_pem)
server = format("https://%s:%s", local.api_servers_external[0], var.external_apiserver_port)
}
}
6 changes: 3 additions & 3 deletions assets/terraform-modules/bootkube/outputs.tf
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ output "cluster_dns_service_ip" {

// Generated kubeconfig for Kubelets (i.e. lower privilege than admin)
output "kubeconfig-kubelet" {
value = data.template_file.kubeconfig-kubelet.rendered
value = local.kubeconfig_kubelet_content
}

// Generated kubeconfig for admins (i.e. human super-user)
output "kubeconfig-admin" {
value = data.template_file.kubeconfig-admin.rendered
value = local.kubeconfig_admin_content
}

# etcd TLS assets
Expand Down Expand Up @@ -80,7 +80,7 @@ output "kubernetes_values" {
}

output "kubelet_values" {
value = join("", data.template_file.kubelet.*.rendered)
value = join("", [for i in range(local.kubelet) : local.kubelet_content])
}

output "calico_values" {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ data "ct_config" "controller-ignitions" {
etcd_arch_tag_suffix = var.os_arch == "arm64" ? "-arm64" : ""
etcd_arch_options = var.os_arch == "arm64" ? "ETCD_UNSUPPORTED_ARCH=arm64" : ""
# etcd0=https://cluster-etcd0.example.com,etcd1=https://cluster-etcd1.example.com,...
etcd_initial_cluster = join(",", data.template_file.etcds.*.rendered)
etcd_initial_cluster = join(",", [for i in range(var.controller_count) : format("etcd%d=https://%s-etcd%d.%s:2380", i, var.cluster_name, i, var.dns_zone)])
kubeconfig = var.enable_tls_bootstrap ? indent(10, templatefile("${path.module}/workers/cl/bootstrap-kubeconfig.yaml.tmpl", {
token_id = random_string.bootstrap_token_id[0].result
token_secret = random_string.bootstrap_token_secret[0].result
Expand All @@ -74,14 +74,3 @@ data "ct_config" "controller-ignitions" {
})
snippets = var.controller_clc_snippets
}

data "template_file" "etcds" {
count = var.controller_count
template = "etcd$${index}=https://$${cluster_name}-etcd$${index}.$${dns_zone}:2380"

vars = {
index = count.index
cluster_name = var.cluster_name
dns_zone = var.dns_zone
}
}
Loading