Skip to content

Commit

Permalink
Merge pull request #33 from datarootsio/make_stuff_optional
Browse files Browse the repository at this point in the history
Make affinity optional to avoid empty replaces and add an image_pull_…
  • Loading branch information
sam-dumont authored Sep 2, 2020
2 parents 69574d3 + c56bafb commit 943988d
Show file tree
Hide file tree
Showing 4 changed files with 101 additions and 91 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/terraform.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,4 @@ jobs:
KUBECONFIG: "/etc/rancher/k3s/k3s.yaml"
run: |
curl -sfL https://get.k3s.io | sh -s -
go test -timeout ${{ env.tests_timeout }} ./...
go test -v -timeout ${{ env.tests_timeout }} ./...
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ However, you have to be consistent across variables, you cannot mix styles.
| host\_aliases | Host aliases to set up in the pod. | `map(list(string))` | `{}` | no |
| hpa | settings for the horizontal pod autoscaler | `any` | <pre>{<br> "enabled": false,<br> "max_replicas": 6,<br> "min_replicas": 2,<br> "target_cpu": 80<br>}</pre> | no |
| image | The image to deploy. | `any` | n/a | yes |
| image\_pull\_policy | The image pull policy to set to the pod | `string` | `IfNotPresent` | no |
| image\_pull\_secrets | List of image pull secrets to use with the containers | `list(string)` | `[]` | no |
| inject\_linkerd | Add the necessary annotations for linkerd injection | `bool` | `false` | no |
| liveness\_probes | Map of liveness probes per container. Pass the regular terraform object as is : https://www.terraform.io/docs/providers/kubernetes/r/deployment.html#liveness_probe-1 | `any` | n/a | yes |
Expand Down
183 changes: 93 additions & 90 deletions deployment.tf
Original file line number Diff line number Diff line change
Expand Up @@ -45,34 +45,19 @@ resource "kubernetes_deployment" "container" {
}
}

affinity {
dynamic "node_affinity" {
for_each = length(var.node_affinity) > 0 ? ["node_affinity"] : []
content {
dynamic "preferred_during_scheduling_ignored_during_execution" {
for_each = { for v in lookup(var.node_affinity, "preferred_during_scheduling_ignored_during_execution", []) : uuid() => v }
content {
weight = preferred_during_scheduling_ignored_during_execution.value["weight"]
preference {
dynamic "match_expressions" {
for_each = { for v in lookup(preferred_during_scheduling_ignored_during_execution.value["preference"], "match_expressions", []) : uuid() => v }
content {
key = match_expressions.value["key"]
operator = match_expressions.value["operator"]
values = lookup(match_expressions.value, "values", [])
}
}
}
}
}
dynamic "required_during_scheduling_ignored_during_execution" {
for_each = { for v in lookup(var.node_affinity, "required_during_scheduling_ignored_during_execution", []) : uuid() => v }
content {
dynamic "node_selector_term" {
for_each = { for v in lookup(required_during_scheduling_ignored_during_execution.value, "node_selector_term", []) : uuid() => v }
content {
dynamic "affinity" {
for_each = length(var.node_affinity) > 0 || length(var.pod_affinity) > 0 || length(var.node_affinity) > 0 ? ["affinity"] : []
content {
dynamic "node_affinity" {
for_each = length(var.node_affinity) > 0 ? ["node_affinity"] : []
content {
dynamic "preferred_during_scheduling_ignored_during_execution" {
for_each = { for v in lookup(var.node_affinity, "preferred_during_scheduling_ignored_during_execution", []) : uuid() => v }
content {
weight = preferred_during_scheduling_ignored_during_execution.value["weight"]
preference {
dynamic "match_expressions" {
for_each = { for v in lookup(node_selector_term.value, "match_expressions", []) : uuid() => v }
for_each = { for v in lookup(preferred_during_scheduling_ignored_during_execution.value["preference"], "match_expressions", []) : uuid() => v }
content {
key = match_expressions.value["key"]
operator = match_expressions.value["operator"]
Expand All @@ -82,99 +67,116 @@ resource "kubernetes_deployment" "container" {
}
}
}
dynamic "required_during_scheduling_ignored_during_execution" {
for_each = { for v in lookup(var.node_affinity, "required_during_scheduling_ignored_during_execution", []) : uuid() => v }
content {
dynamic "node_selector_term" {
for_each = { for v in lookup(required_during_scheduling_ignored_during_execution.value, "node_selector_term", []) : uuid() => v }
content {
dynamic "match_expressions" {
for_each = { for v in lookup(node_selector_term.value, "match_expressions", []) : uuid() => v }
content {
key = match_expressions.value["key"]
operator = match_expressions.value["operator"]
values = lookup(match_expressions.value, "values", [])
}
}
}
}
}
}
}
}
}
dynamic "pod_affinity" {
for_each = length(var.pod_affinity) > 0 ? ["pod_affinity"] : []
content {
dynamic "preferred_during_scheduling_ignored_during_execution" {
for_each = { for v in lookup(var.pod_affinity, "preferred_during_scheduling_ignored_during_execution", []) : uuid() => v }
content {
weight = preferred_during_scheduling_ignored_during_execution.value["weight"]
pod_affinity_term {
namespaces = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "namespaces", [])
topology_key = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "topology_key", "")
dynamic "pod_affinity" {
for_each = length(var.pod_affinity) > 0 ? ["pod_affinity"] : []
content {
dynamic "preferred_during_scheduling_ignored_during_execution" {
for_each = { for v in lookup(var.pod_affinity, "preferred_during_scheduling_ignored_during_execution", []) : uuid() => v }
content {
weight = preferred_during_scheduling_ignored_during_execution.value["weight"]
pod_affinity_term {
namespaces = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "namespaces", [])
topology_key = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "topology_key", "")
label_selector {
match_labels = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_labels", {})
dynamic "match_expressions" {
for_each = { for v in lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_expressions", []) : uuid() => v }
content {
key = match_expressions.value["key"]
operator = match_expressions.value["operator"]
values = lookup(match_expressions.value, "values", [])
}
}
}
}
}
}
dynamic "required_during_scheduling_ignored_during_execution" {
for_each = { for v in lookup(var.pod_affinity, "required_during_scheduling_ignored_during_execution", []) : uuid() => v }
content {
label_selector {
match_labels = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_labels", {})
match_labels = lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_labels", {})
dynamic "match_expressions" {
for_each = { for v in lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_expressions", []) : uuid() => v }
for_each = { for v in lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_expressions", []) : uuid() => v }
content {
key = match_expressions.value["key"]
operator = match_expressions.value["operator"]
values = lookup(match_expressions.value, "values", [])
}
}
}
namespaces = lookup(required_during_scheduling_ignored_during_execution.value, "namespaces", [])
topology_key = lookup(required_during_scheduling_ignored_during_execution.value, "topology_key", "")
}
}
}
dynamic "required_during_scheduling_ignored_during_execution" {
for_each = { for v in lookup(var.pod_affinity, "required_during_scheduling_ignored_during_execution", []) : uuid() => v }
content {
label_selector {
match_labels = lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_labels", {})
dynamic "match_expressions" {
for_each = { for v in lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_expressions", []) : uuid() => v }
content {
key = match_expressions.value["key"]
operator = match_expressions.value["operator"]
values = lookup(match_expressions.value, "values", [])
}

dynamic "pod_anti_affinity" {
for_each = length(var.pod_anti_affinity) > 0 ? ["pod_anti_affinity"] : []
content {
dynamic "preferred_during_scheduling_ignored_during_execution" {
for_each = { for v in lookup(var.pod_anti_affinity, "preferred_during_scheduling_ignored_during_execution", []) : uuid() => v }
content {
weight = preferred_during_scheduling_ignored_during_execution.value["weight"]
pod_affinity_term {
namespaces = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "namespaces", [])
topology_key = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "topology_key", "")
label_selector {
match_labels = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_labels", {})
dynamic "match_expressions" {
for_each = { for v in lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_expressions", []) : uuid() => v }
content {
key = match_expressions.value["key"]
operator = match_expressions.value["operator"]
values = lookup(match_expressions.value, "values", [])
}
}
}
}
}
namespaces = lookup(required_during_scheduling_ignored_during_execution.value, "namespaces", [])
topology_key = lookup(required_during_scheduling_ignored_during_execution.value, "topology_key", "")
}
}
}
}

dynamic "pod_anti_affinity" {
for_each = length(var.pod_anti_affinity) > 0 ? ["pod_anti_affinity"] : []
content {
dynamic "preferred_during_scheduling_ignored_during_execution" {
for_each = { for v in lookup(var.pod_anti_affinity, "preferred_during_scheduling_ignored_during_execution", []) : uuid() => v }
content {
weight = preferred_during_scheduling_ignored_during_execution.value["weight"]
pod_affinity_term {
namespaces = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "namespaces", [])
topology_key = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "topology_key", "")
dynamic "required_during_scheduling_ignored_during_execution" {
for_each = { for v in lookup(var.pod_anti_affinity, "required_during_scheduling_ignored_during_execution", []) : uuid() => v }
content {
label_selector {
match_labels = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_labels", {})
match_labels = lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_labels", {})
dynamic "match_expressions" {
for_each = { for v in lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_expressions", []) : uuid() => v }
for_each = { for v in lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_expressions", []) : uuid() => v }
content {
key = match_expressions.value["key"]
operator = match_expressions.value["operator"]
values = lookup(match_expressions.value, "values", [])
}
}
}
namespaces = lookup(required_during_scheduling_ignored_during_execution.value, "namespaces", [])
topology_key = lookup(required_during_scheduling_ignored_during_execution.value, "topology_key", "")
}
}
}
dynamic "required_during_scheduling_ignored_during_execution" {
for_each = { for v in lookup(var.pod_anti_affinity, "required_during_scheduling_ignored_during_execution", []) : uuid() => v }
content {
label_selector {
match_labels = lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_labels", {})
dynamic "match_expressions" {
for_each = { for v in lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_expressions", []) : uuid() => v }
content {
key = match_expressions.value["key"]
operator = match_expressions.value["operator"]
values = lookup(match_expressions.value, "values", [])
}
}
}
namespaces = lookup(required_during_scheduling_ignored_during_execution.value, "namespaces", [])
topology_key = lookup(required_during_scheduling_ignored_during_execution.value, "topology_key", "")
}
}
}
}

}

automount_service_account_token = true
Expand Down Expand Up @@ -223,8 +225,9 @@ resource "kubernetes_deployment" "container" {
dynamic "container" {
for_each = local.image
content {
name = container.key
image = container.value
name = container.key
image = container.value
image_pull_policy = var.image_pull_policy

args = lookup(local.args, container.key, [])

Expand Down
6 changes: 6 additions & 0 deletions variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,12 @@ variable "pod_anti_affinity" {
default = {}
}

variable "image_pull_policy" {
type = string
default = "IfNotPresent"
description = "Pull policy for the images, see https://kubernetes.io/docs/concepts/containers/images/"
}

locals {

linkerd_annotations = {
Expand Down

0 comments on commit 943988d

Please sign in to comment.