Skip to content

Commit 943988d

Browse files
authored
Merge pull request #33 from datarootsio/make_stuff_optional
Make affinity optional to avoid empty replaces and add an image_pull_…
2 parents 69574d3 + c56bafb commit 943988d

File tree

4 files changed

+101
-91
lines changed

4 files changed

+101
-91
lines changed

.github/workflows/terraform.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,4 @@ jobs:
5858
KUBECONFIG: "/etc/rancher/k3s/k3s.yaml"
5959
run: |
6060
curl -sfL https://get.k3s.io | sh -s -
61-
go test -timeout ${{ env.tests_timeout }} ./...
61+
go test -v -timeout ${{ env.tests_timeout }} ./...

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ However, you have to be consistent across variables, you cannot mix styles.
8484
| host\_aliases | Host aliases to set up in the pod. | `map(list(string))` | `{}` | no |
8585
| 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 |
8686
| image | The image to deploy. | `any` | n/a | yes |
87+
| image\_pull\_policy | The image pull policy to set to the pod | `string` | `IfNotPresent` | no |
8788
| image\_pull\_secrets | List of image pull secrets to use with the containers | `list(string)` | `[]` | no |
8889
| inject\_linkerd | Add the necessary annotations for linkerd injection | `bool` | `false` | no |
8990
| 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 |

deployment.tf

Lines changed: 93 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -45,34 +45,19 @@ resource "kubernetes_deployment" "container" {
4545
}
4646
}
4747

48-
affinity {
49-
dynamic "node_affinity" {
50-
for_each = length(var.node_affinity) > 0 ? ["node_affinity"] : []
51-
content {
52-
dynamic "preferred_during_scheduling_ignored_during_execution" {
53-
for_each = { for v in lookup(var.node_affinity, "preferred_during_scheduling_ignored_during_execution", []) : uuid() => v }
54-
content {
55-
weight = preferred_during_scheduling_ignored_during_execution.value["weight"]
56-
preference {
57-
dynamic "match_expressions" {
58-
for_each = { for v in lookup(preferred_during_scheduling_ignored_during_execution.value["preference"], "match_expressions", []) : uuid() => v }
59-
content {
60-
key = match_expressions.value["key"]
61-
operator = match_expressions.value["operator"]
62-
values = lookup(match_expressions.value, "values", [])
63-
}
64-
}
65-
}
66-
}
67-
}
68-
dynamic "required_during_scheduling_ignored_during_execution" {
69-
for_each = { for v in lookup(var.node_affinity, "required_during_scheduling_ignored_during_execution", []) : uuid() => v }
70-
content {
71-
dynamic "node_selector_term" {
72-
for_each = { for v in lookup(required_during_scheduling_ignored_during_execution.value, "node_selector_term", []) : uuid() => v }
73-
content {
48+
dynamic "affinity" {
49+
for_each = length(var.node_affinity) > 0 || length(var.pod_affinity) > 0 || length(var.node_affinity) > 0 ? ["affinity"] : []
50+
content {
51+
dynamic "node_affinity" {
52+
for_each = length(var.node_affinity) > 0 ? ["node_affinity"] : []
53+
content {
54+
dynamic "preferred_during_scheduling_ignored_during_execution" {
55+
for_each = { for v in lookup(var.node_affinity, "preferred_during_scheduling_ignored_during_execution", []) : uuid() => v }
56+
content {
57+
weight = preferred_during_scheduling_ignored_during_execution.value["weight"]
58+
preference {
7459
dynamic "match_expressions" {
75-
for_each = { for v in lookup(node_selector_term.value, "match_expressions", []) : uuid() => v }
60+
for_each = { for v in lookup(preferred_during_scheduling_ignored_during_execution.value["preference"], "match_expressions", []) : uuid() => v }
7661
content {
7762
key = match_expressions.value["key"]
7863
operator = match_expressions.value["operator"]
@@ -82,99 +67,116 @@ resource "kubernetes_deployment" "container" {
8267
}
8368
}
8469
}
70+
dynamic "required_during_scheduling_ignored_during_execution" {
71+
for_each = { for v in lookup(var.node_affinity, "required_during_scheduling_ignored_during_execution", []) : uuid() => v }
72+
content {
73+
dynamic "node_selector_term" {
74+
for_each = { for v in lookup(required_during_scheduling_ignored_during_execution.value, "node_selector_term", []) : uuid() => v }
75+
content {
76+
dynamic "match_expressions" {
77+
for_each = { for v in lookup(node_selector_term.value, "match_expressions", []) : uuid() => v }
78+
content {
79+
key = match_expressions.value["key"]
80+
operator = match_expressions.value["operator"]
81+
values = lookup(match_expressions.value, "values", [])
82+
}
83+
}
84+
}
85+
}
86+
}
87+
}
8588
}
8689
}
87-
}
88-
dynamic "pod_affinity" {
89-
for_each = length(var.pod_affinity) > 0 ? ["pod_affinity"] : []
90-
content {
91-
dynamic "preferred_during_scheduling_ignored_during_execution" {
92-
for_each = { for v in lookup(var.pod_affinity, "preferred_during_scheduling_ignored_during_execution", []) : uuid() => v }
93-
content {
94-
weight = preferred_during_scheduling_ignored_during_execution.value["weight"]
95-
pod_affinity_term {
96-
namespaces = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "namespaces", [])
97-
topology_key = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "topology_key", "")
90+
dynamic "pod_affinity" {
91+
for_each = length(var.pod_affinity) > 0 ? ["pod_affinity"] : []
92+
content {
93+
dynamic "preferred_during_scheduling_ignored_during_execution" {
94+
for_each = { for v in lookup(var.pod_affinity, "preferred_during_scheduling_ignored_during_execution", []) : uuid() => v }
95+
content {
96+
weight = preferred_during_scheduling_ignored_during_execution.value["weight"]
97+
pod_affinity_term {
98+
namespaces = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "namespaces", [])
99+
topology_key = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "topology_key", "")
100+
label_selector {
101+
match_labels = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_labels", {})
102+
dynamic "match_expressions" {
103+
for_each = { for v in lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_expressions", []) : uuid() => v }
104+
content {
105+
key = match_expressions.value["key"]
106+
operator = match_expressions.value["operator"]
107+
values = lookup(match_expressions.value, "values", [])
108+
}
109+
}
110+
}
111+
}
112+
}
113+
}
114+
dynamic "required_during_scheduling_ignored_during_execution" {
115+
for_each = { for v in lookup(var.pod_affinity, "required_during_scheduling_ignored_during_execution", []) : uuid() => v }
116+
content {
98117
label_selector {
99-
match_labels = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_labels", {})
118+
match_labels = lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_labels", {})
100119
dynamic "match_expressions" {
101-
for_each = { for v in lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_expressions", []) : uuid() => v }
120+
for_each = { for v in lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_expressions", []) : uuid() => v }
102121
content {
103122
key = match_expressions.value["key"]
104123
operator = match_expressions.value["operator"]
105124
values = lookup(match_expressions.value, "values", [])
106125
}
107126
}
108127
}
128+
namespaces = lookup(required_during_scheduling_ignored_during_execution.value, "namespaces", [])
129+
topology_key = lookup(required_during_scheduling_ignored_during_execution.value, "topology_key", "")
109130
}
110131
}
111132
}
112-
dynamic "required_during_scheduling_ignored_during_execution" {
113-
for_each = { for v in lookup(var.pod_affinity, "required_during_scheduling_ignored_during_execution", []) : uuid() => v }
114-
content {
115-
label_selector {
116-
match_labels = lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_labels", {})
117-
dynamic "match_expressions" {
118-
for_each = { for v in lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_expressions", []) : uuid() => v }
119-
content {
120-
key = match_expressions.value["key"]
121-
operator = match_expressions.value["operator"]
122-
values = lookup(match_expressions.value, "values", [])
133+
}
134+
135+
dynamic "pod_anti_affinity" {
136+
for_each = length(var.pod_anti_affinity) > 0 ? ["pod_anti_affinity"] : []
137+
content {
138+
dynamic "preferred_during_scheduling_ignored_during_execution" {
139+
for_each = { for v in lookup(var.pod_anti_affinity, "preferred_during_scheduling_ignored_during_execution", []) : uuid() => v }
140+
content {
141+
weight = preferred_during_scheduling_ignored_during_execution.value["weight"]
142+
pod_affinity_term {
143+
namespaces = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "namespaces", [])
144+
topology_key = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "topology_key", "")
145+
label_selector {
146+
match_labels = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_labels", {})
147+
dynamic "match_expressions" {
148+
for_each = { for v in lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_expressions", []) : uuid() => v }
149+
content {
150+
key = match_expressions.value["key"]
151+
operator = match_expressions.value["operator"]
152+
values = lookup(match_expressions.value, "values", [])
153+
}
154+
}
123155
}
124156
}
125157
}
126-
namespaces = lookup(required_during_scheduling_ignored_during_execution.value, "namespaces", [])
127-
topology_key = lookup(required_during_scheduling_ignored_during_execution.value, "topology_key", "")
128158
}
129-
}
130-
}
131-
}
132-
133-
dynamic "pod_anti_affinity" {
134-
for_each = length(var.pod_anti_affinity) > 0 ? ["pod_anti_affinity"] : []
135-
content {
136-
dynamic "preferred_during_scheduling_ignored_during_execution" {
137-
for_each = { for v in lookup(var.pod_anti_affinity, "preferred_during_scheduling_ignored_during_execution", []) : uuid() => v }
138-
content {
139-
weight = preferred_during_scheduling_ignored_during_execution.value["weight"]
140-
pod_affinity_term {
141-
namespaces = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "namespaces", [])
142-
topology_key = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"], "topology_key", "")
159+
dynamic "required_during_scheduling_ignored_during_execution" {
160+
for_each = { for v in lookup(var.pod_anti_affinity, "required_during_scheduling_ignored_during_execution", []) : uuid() => v }
161+
content {
143162
label_selector {
144-
match_labels = lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_labels", {})
163+
match_labels = lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_labels", {})
145164
dynamic "match_expressions" {
146-
for_each = { for v in lookup(preferred_during_scheduling_ignored_during_execution.value["pod_affinity_term"]["label_selector"], "match_expressions", []) : uuid() => v }
165+
for_each = { for v in lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_expressions", []) : uuid() => v }
147166
content {
148167
key = match_expressions.value["key"]
149168
operator = match_expressions.value["operator"]
150169
values = lookup(match_expressions.value, "values", [])
151170
}
152171
}
153172
}
173+
namespaces = lookup(required_during_scheduling_ignored_during_execution.value, "namespaces", [])
174+
topology_key = lookup(required_during_scheduling_ignored_during_execution.value, "topology_key", "")
154175
}
155176
}
156177
}
157-
dynamic "required_during_scheduling_ignored_during_execution" {
158-
for_each = { for v in lookup(var.pod_anti_affinity, "required_during_scheduling_ignored_during_execution", []) : uuid() => v }
159-
content {
160-
label_selector {
161-
match_labels = lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_labels", {})
162-
dynamic "match_expressions" {
163-
for_each = { for v in lookup(required_during_scheduling_ignored_during_execution.value["label_selector"], "match_expressions", []) : uuid() => v }
164-
content {
165-
key = match_expressions.value["key"]
166-
operator = match_expressions.value["operator"]
167-
values = lookup(match_expressions.value, "values", [])
168-
}
169-
}
170-
}
171-
namespaces = lookup(required_during_scheduling_ignored_during_execution.value, "namespaces", [])
172-
topology_key = lookup(required_during_scheduling_ignored_during_execution.value, "topology_key", "")
173-
}
174-
}
175178
}
176179
}
177-
178180
}
179181

180182
automount_service_account_token = true
@@ -223,8 +225,9 @@ resource "kubernetes_deployment" "container" {
223225
dynamic "container" {
224226
for_each = local.image
225227
content {
226-
name = container.key
227-
image = container.value
228+
name = container.key
229+
image = container.value
230+
image_pull_policy = var.image_pull_policy
228231

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

variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,12 @@ variable "pod_anti_affinity" {
163163
default = {}
164164
}
165165

166+
variable "image_pull_policy" {
167+
type = string
168+
default = "IfNotPresent"
169+
description = "Pull policy for the images, see https://kubernetes.io/docs/concepts/containers/images/"
170+
}
171+
166172
locals {
167173

168174
linkerd_annotations = {

0 commit comments

Comments
 (0)