kube_cluster 0.3.8 → 0.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- if __FILE__ == $0
4
- require "bundler/setup"
5
- require "kube/cluster"
6
- end
3
+ require "bundler/setup"
4
+ require "kube/cluster"
7
5
 
8
6
  module Kube
9
7
  module Cluster
@@ -75,164 +73,143 @@ module Kube
75
73
  end
76
74
  end
77
75
 
78
- if __FILE__ == $0
79
- require "minitest/autorun"
80
-
81
- class ServiceForDeploymentMiddlewareTest < Minitest::Test
82
- Middleware = Kube::Cluster::Middleware
83
-
84
- def test_generates_service_from_deployment
85
- m = manifest(Kube::Cluster["Deployment"].new {
86
- metadata.name = "web"
87
- metadata.namespace = "production"
88
- metadata.labels = { app: "web" }
89
- spec.selector.matchLabels = { app: "web" }
90
- spec.template.metadata.labels = { app: "web" }
91
- spec.template.spec.containers = [
92
- { name: "web", image: "nginx", ports: [{ name: "http", containerPort: 8080, protocol: "TCP" }] },
93
- ]
94
- })
95
-
96
- Middleware::ServiceForDeployment.new.call(m)
97
-
98
- assert_equal 2, m.resources.size
99
-
100
- deploy, service = m.resources
101
- assert_equal "Deployment", deploy.to_h[:kind]
102
- assert_equal "Service", service.to_h[:kind]
103
-
104
- sh = service.to_h
105
- assert_equal "web", sh.dig(:metadata, :name)
106
- assert_equal "production", sh.dig(:metadata, :namespace)
107
- assert_equal({ app: "web" }, sh.dig(:spec, :selector))
108
-
109
- port = sh.dig(:spec, :ports, 0)
110
- assert_equal "http", port[:name]
111
- assert_equal 8080, port[:port]
112
- assert_equal "http", port[:targetPort]
113
- assert_equal "TCP", port[:protocol]
114
- end
76
+ test do
77
+ Middleware = Kube::Cluster::Middleware
115
78
 
116
- def test_maps_multiple_ports
117
- m = manifest(Kube::Cluster["Deployment"].new {
118
- metadata.name = "web"
119
- spec.selector.matchLabels = { app: "web" }
120
- spec.template.metadata.labels = { app: "web" }
121
- spec.template.spec.containers = [
122
- {
123
- name: "web", image: "nginx",
124
- ports: [
125
- { name: "http", containerPort: 8080 },
126
- { name: "metrics", containerPort: 9090 },
127
- ],
128
- },
129
- ]
130
- })
131
-
132
- Middleware::ServiceForDeployment.new.call(m)
133
- service = m.resources.last
134
- ports = service.to_h.dig(:spec, :ports)
135
-
136
- assert_equal 2, ports.size
137
- assert_equal "http", ports[0][:name]
138
- assert_equal "metrics", ports[1][:name]
139
- end
79
+ it "generates_service_from_deployment" do
80
+ m = manifest(Kube::Cluster["Deployment"].new {
81
+ metadata.name = "web"
82
+ metadata.namespace = "production"
83
+ metadata.labels = { app: "web" }
84
+ spec.selector.matchLabels = { app: "web" }
85
+ spec.template.metadata.labels = { app: "web" }
86
+ spec.template.spec.containers = [
87
+ { name: "web", image: "nginx", ports: [{ name: "http", containerPort: 8080, protocol: "TCP" }] },
88
+ ]
89
+ })
140
90
 
141
- def test_copies_labels_from_source
142
- m = manifest(Kube::Cluster["Deployment"].new {
143
- metadata.name = "web"
144
- metadata.labels = { "app.kubernetes.io/name": "web", "app.kubernetes.io/size": "small" }
145
- spec.selector.matchLabels = { app: "web" }
146
- spec.template.metadata.labels = { app: "web" }
147
- spec.template.spec.containers = [
148
- { name: "web", image: "nginx", ports: [{ name: "http", containerPort: 8080 }] },
149
- ]
150
- })
151
-
152
- Middleware::ServiceForDeployment.new.call(m)
153
- service_labels = m.resources.last.to_h.dig(:metadata, :labels)
154
-
155
- assert_equal "web", service_labels[:"app.kubernetes.io/name"]
156
- assert_equal "small", service_labels[:"app.kubernetes.io/size"]
157
- end
91
+ Middleware::ServiceForDeployment.new.call(m)
158
92
 
159
- def test_skips_deployment_without_named_ports
160
- m = manifest(Kube::Cluster["Deployment"].new {
161
- metadata.name = "web"
162
- spec.selector.matchLabels = { app: "web" }
163
- spec.template.metadata.labels = { app: "web" }
164
- spec.template.spec.containers = [
165
- { name: "web", image: "nginx", ports: [{ containerPort: 8080 }] },
166
- ]
167
- })
93
+ deploy, service = m.resources
94
+ sh = service.to_h
95
+ port = sh.dig(:spec, :ports, 0)
168
96
 
169
- Middleware::ServiceForDeployment.new.call(m)
97
+ port[:protocol].should == "TCP"
98
+ end
170
99
 
171
- assert_equal 1, m.resources.size
172
- end
100
+ it "maps_multiple_ports" do
101
+ m = manifest(Kube::Cluster["Deployment"].new {
102
+ metadata.name = "web"
103
+ spec.selector.matchLabels = { app: "web" }
104
+ spec.template.metadata.labels = { app: "web" }
105
+ spec.template.spec.containers = [
106
+ {
107
+ name: "web", image: "nginx",
108
+ ports: [
109
+ { name: "http", containerPort: 8080 },
110
+ { name: "metrics", containerPort: 9090 },
111
+ ],
112
+ },
113
+ ]
114
+ })
115
+
116
+ Middleware::ServiceForDeployment.new.call(m)
117
+ service = m.resources.last
118
+ ports = service.to_h.dig(:spec, :ports)
119
+
120
+ ports.size.should == 2
121
+ end
173
122
 
174
- def test_skips_deployment_without_ports
175
- m = manifest(Kube::Cluster["Deployment"].new {
176
- metadata.name = "worker"
177
- spec.selector.matchLabels = { app: "worker" }
178
- spec.template.metadata.labels = { app: "worker" }
179
- spec.template.spec.containers = [
180
- { name: "worker", image: "worker:latest" },
181
- ]
182
- })
123
+ it "copies_labels_from_source" do
124
+ m = manifest(Kube::Cluster["Deployment"].new {
125
+ metadata.name = "web"
126
+ metadata.labels = { "app.kubernetes.io/name": "web", "app.kubernetes.io/size": "small" }
127
+ spec.selector.matchLabels = { app: "web" }
128
+ spec.template.metadata.labels = { app: "web" }
129
+ spec.template.spec.containers = [
130
+ { name: "web", image: "nginx", ports: [{ name: "http", containerPort: 8080 }] },
131
+ ]
132
+ })
133
+
134
+ Middleware::ServiceForDeployment.new.call(m)
135
+ service_labels = m.resources.last.to_h.dig(:metadata, :labels)
136
+
137
+ service_labels[:"app.kubernetes.io/size"].should == "small"
138
+ end
183
139
 
184
- Middleware::ServiceForDeployment.new.call(m)
140
+ it "skips_deployment_without_named_ports" do
141
+ m = manifest(Kube::Cluster["Deployment"].new {
142
+ metadata.name = "web"
143
+ spec.selector.matchLabels = { app: "web" }
144
+ spec.template.metadata.labels = { app: "web" }
145
+ spec.template.spec.containers = [
146
+ { name: "web", image: "nginx", ports: [{ containerPort: 8080 }] },
147
+ ]
148
+ })
185
149
 
186
- assert_equal 1, m.resources.size
187
- end
150
+ Middleware::ServiceForDeployment.new.call(m)
188
151
 
189
- def test_skips_non_pod_bearing_resources
190
- m = manifest(Kube::Cluster["ConfigMap"].new { metadata.name = "config" })
152
+ m.resources.size.should == 1
153
+ end
191
154
 
192
- Middleware::ServiceForDeployment.new.call(m)
155
+ it "skips_deployment_without_ports" do
156
+ m = manifest(Kube::Cluster["Deployment"].new {
157
+ metadata.name = "worker"
158
+ spec.selector.matchLabels = { app: "worker" }
159
+ spec.template.metadata.labels = { app: "worker" }
160
+ spec.template.spec.containers = [
161
+ { name: "worker", image: "worker:latest" },
162
+ ]
163
+ })
193
164
 
194
- assert_equal 1, m.resources.size
195
- end
165
+ Middleware::ServiceForDeployment.new.call(m)
166
+
167
+ m.resources.size.should == 1
168
+ end
196
169
 
197
- def test_skips_deployment_without_match_labels
198
- m = manifest(Kube::Cluster["Deployment"].new {
199
- metadata.name = "web"
200
- spec.template.metadata.labels = { app: "web" }
201
- spec.template.spec.containers = [
202
- { name: "web", image: "nginx", ports: [{ name: "http", containerPort: 8080 }] },
203
- ]
204
- })
170
+ it "skips_non_pod_bearing_resources" do
171
+ m = manifest(Kube::Cluster["ConfigMap"].new { metadata.name = "config" })
205
172
 
206
- Middleware::ServiceForDeployment.new.call(m)
173
+ Middleware::ServiceForDeployment.new.call(m)
207
174
 
208
- assert_equal 1, m.resources.size
209
- end
175
+ m.resources.size.should == 1
176
+ end
210
177
 
211
- def test_works_with_statefulset
212
- m = manifest(Kube::Cluster["StatefulSet"].new {
213
- metadata.name = "db"
214
- metadata.namespace = "database"
215
- spec.selector.matchLabels = { app: "db" }
216
- spec.template.metadata.labels = { app: "db" }
217
- spec.template.spec.containers = [
218
- { name: "postgres", image: "postgres:16", ports: [{ name: "tcp-pg", containerPort: 5432 }] },
219
- ]
220
- })
221
-
222
- Middleware::ServiceForDeployment.new.call(m)
223
-
224
- assert_equal 2, m.resources.size
225
- assert_equal "Service", m.resources.last.to_h[:kind]
226
- assert_equal "db", m.resources.last.to_h.dig(:metadata, :name)
227
- assert_equal "database", m.resources.last.to_h.dig(:metadata, :namespace)
228
- end
178
+ it "skips_deployment_without_match_labels" do
179
+ m = manifest(Kube::Cluster["Deployment"].new {
180
+ metadata.name = "web"
181
+ spec.template.metadata.labels = { app: "web" }
182
+ spec.template.spec.containers = [
183
+ { name: "web", image: "nginx", ports: [{ name: "http", containerPort: 8080 }] },
184
+ ]
185
+ })
229
186
 
230
- private
187
+ Middleware::ServiceForDeployment.new.call(m)
231
188
 
232
- def manifest(*resources)
233
- m = Kube::Cluster::Manifest.new
234
- resources.each { |r| m << r }
235
- m
236
- end
189
+ m.resources.size.should == 1
190
+ end
191
+
192
+ it "works_with_statefulset" do
193
+ m = manifest(Kube::Cluster["StatefulSet"].new {
194
+ metadata.name = "db"
195
+ metadata.namespace = "database"
196
+ spec.selector.matchLabels = { app: "db" }
197
+ spec.template.metadata.labels = { app: "db" }
198
+ spec.template.spec.containers = [
199
+ { name: "postgres", image: "postgres:16", ports: [{ name: "tcp-pg", containerPort: 5432 }] },
200
+ ]
201
+ })
202
+
203
+ Middleware::ServiceForDeployment.new.call(m)
204
+
205
+ m.resources.last.to_h.dig(:metadata, :namespace).should == "database"
237
206
  end
207
+
208
+ private
209
+
210
+ def manifest(*resources)
211
+ m = Kube::Cluster::Manifest.new
212
+ resources.each { |r| m << r }
213
+ m
214
+ end
238
215
  end