kube_cluster 0.20.1 → 1.0.0

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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +34 -0
  4. data/Gemfile.lock +5 -37
  5. data/flake.nix +2 -1
  6. data/kube_cluster.gemspec +2 -4
  7. data/lib/kube/cluster/container.rb +17 -17
  8. data/lib/kube/cluster/manifest.rb +158 -158
  9. data/lib/kube/cluster/middleware/annotations.rb +42 -42
  10. data/lib/kube/cluster/middleware/hpa_for_deployment.rb +134 -134
  11. data/lib/kube/cluster/middleware/ingress_for_service.rb +75 -75
  12. data/lib/kube/cluster/middleware/labels.rb +58 -58
  13. data/lib/kube/cluster/middleware/pod_anti_affinity.rb +104 -104
  14. data/lib/kube/cluster/middleware/resource_preset.rb +145 -145
  15. data/lib/kube/cluster/middleware/security_context.rb +127 -127
  16. data/lib/kube/cluster/middleware/service_for_deployment.rb +120 -120
  17. data/lib/kube/cluster/middleware.rb +219 -221
  18. data/lib/kube/cluster/resource/dirty_tracking.rb +388 -388
  19. data/lib/kube/cluster/resource.rb +16 -16
  20. data/lib/kube/cluster/standard/cdi/data_volume.rb +13 -13
  21. data/lib/kube/cluster/standard/cloud_native_pg/cluster.rb +11 -11
  22. data/lib/kube/cluster/standard/cloud_native_pg/database_with_external_secret.rb +11 -11
  23. data/lib/kube/cluster/standard/cloud_native_pg/external_secret.rb +11 -11
  24. data/lib/kube/cluster/standard/cloud_native_pg/helm.rb +26 -26
  25. data/lib/kube/cluster/standard/config_map.rb +11 -11
  26. data/lib/kube/cluster/standard/cron_job.rb +13 -13
  27. data/lib/kube/cluster/standard/cron_job_with_service_account.rb +12 -12
  28. data/lib/kube/cluster/standard/custom_resource_definition.rb +12 -12
  29. data/lib/kube/cluster/standard/daemon_set.rb +12 -12
  30. data/lib/kube/cluster/standard/deployment_with_service.rb +82 -82
  31. data/lib/kube/cluster/standard/env_processing.rb +15 -15
  32. data/lib/kube/cluster/standard/eso/external_secret.rb +13 -13
  33. data/lib/kube/cluster/standard/forgejo/helm.rb +11 -11
  34. data/lib/kube/cluster/standard/gateway_api/http_route.rb +322 -19
  35. data/lib/kube/cluster/standard/job.rb +12 -12
  36. data/lib/kube/cluster/standard/job_with_service_account.rb +11 -11
  37. data/lib/kube/cluster/standard/kube_virt/virtual_machine.rb +11 -11
  38. data/lib/kube/cluster/standard/meta_controller/composite_controller.rb +13 -13
  39. data/lib/kube/cluster/standard/meta_controller/decorator_controller.rb +13 -13
  40. data/lib/kube/cluster/standard/perses/perses.rb +9 -9
  41. data/lib/kube/cluster/standard/perses/perses_datasource.rb +13 -13
  42. data/lib/kube/cluster/standard/persistent_volume_claim.rb +12 -12
  43. data/lib/kube/cluster/standard/role.rb +12 -12
  44. data/lib/kube/cluster/standard/role_binding.rb +10 -10
  45. data/lib/kube/cluster/standard/secret.rb +11 -11
  46. data/lib/kube/cluster/standard/service.rb +12 -12
  47. data/lib/kube/cluster/standard/service_account.rb +9 -9
  48. data/lib/kube/cluster/standard/service_account_with_role.rb +10 -10
  49. data/lib/kube/cluster/standard/victoria_metrics/vl_agent.rb +9 -9
  50. data/lib/kube/cluster/standard/victoria_metrics/vl_single.rb +9 -9
  51. data/lib/kube/cluster/standard/victoria_metrics/vm_agent.rb +9 -9
  52. data/lib/kube/cluster/standard/victoria_metrics/vm_node_scrape.rb +9 -9
  53. data/lib/kube/cluster/standard/victoria_metrics/vm_service_scrape.rb +9 -9
  54. data/lib/kube/cluster/standard/victoria_metrics/vm_single.rb +9 -9
  55. data/lib/kube/cluster/standard/volume_processing.rb +3 -3
  56. data/lib/kube/cluster/version.rb +1 -1
  57. data/lib/kube/cluster.rb +137 -1
  58. data/lib/kube/helm/chart.rb +323 -323
  59. data/lib/kube/helm/endpoint.rb +58 -58
  60. data/lib/kube/helm/repo.rb +160 -160
  61. metadata +7 -20
@@ -75,143 +75,143 @@ module Kube
75
75
  end
76
76
  end
77
77
 
78
- test do
79
- Middleware = Kube::Cluster::Middleware
80
-
81
- it "generates_service_from_deployment" do
82
- m = manifest(Kube::Cluster["Deployment"].new {
83
- metadata.name = "web"
84
- metadata.namespace = "production"
85
- metadata.labels = { app: "web" }
86
- spec.selector.matchLabels = { app: "web" }
87
- spec.template.metadata.labels = { app: "web" }
88
- spec.template.spec.containers = [
89
- { name: "web", image: "nginx", ports: [{ name: "http", containerPort: 8080, protocol: "TCP" }] },
90
- ]
91
- })
92
-
93
- Middleware::ServiceForDeployment.new.call(m)
94
-
95
- deploy, service = m.resources
96
- sh = service.to_h
97
- port = sh.dig(:spec, :ports, 0)
98
-
99
- port[:protocol].should == "TCP"
100
- end
78
+ __END__
101
79
 
102
- it "maps_multiple_ports" do
103
- m = manifest(Kube::Cluster["Deployment"].new {
104
- metadata.name = "web"
105
- spec.selector.matchLabels = { app: "web" }
106
- spec.template.metadata.labels = { app: "web" }
107
- spec.template.spec.containers = [
108
- {
109
- name: "web", image: "nginx",
110
- ports: [
111
- { name: "http", containerPort: 8080 },
112
- { name: "metrics", containerPort: 9090 },
113
- ],
114
- },
115
- ]
116
- })
117
-
118
- Middleware::ServiceForDeployment.new.call(m)
119
- service = m.resources.last
120
- ports = service.to_h.dig(:spec, :ports)
121
-
122
- ports.size.should == 2
123
- end
80
+ Middleware = Kube::Cluster::Middleware
124
81
 
125
- it "copies_labels_from_source" do
126
- m = manifest(Kube::Cluster["Deployment"].new {
127
- metadata.name = "web"
128
- metadata.labels = { "app.kubernetes.io/name": "web", "app.kubernetes.io/size": "small" }
129
- spec.selector.matchLabels = { app: "web" }
130
- spec.template.metadata.labels = { app: "web" }
131
- spec.template.spec.containers = [
132
- { name: "web", image: "nginx", ports: [{ name: "http", containerPort: 8080 }] },
133
- ]
134
- })
135
-
136
- Middleware::ServiceForDeployment.new.call(m)
137
- service_labels = m.resources.last.to_h.dig(:metadata, :labels)
138
-
139
- service_labels[:"app.kubernetes.io/size"].should == "small"
140
- end
82
+ it "generates_service_from_deployment" do
83
+ m = manifest(Kube::Cluster["Deployment"].new {
84
+ metadata.name = "web"
85
+ metadata.namespace = "production"
86
+ metadata.labels = { app: "web" }
87
+ spec.selector.matchLabels = { app: "web" }
88
+ spec.template.metadata.labels = { app: "web" }
89
+ spec.template.spec.containers = [
90
+ { name: "web", image: "nginx", ports: [{ name: "http", containerPort: 8080, protocol: "TCP" }] },
91
+ ]
92
+ })
141
93
 
142
- it "skips_deployment_without_named_ports" do
143
- m = manifest(Kube::Cluster["Deployment"].new {
144
- metadata.name = "web"
145
- spec.selector.matchLabels = { app: "web" }
146
- spec.template.metadata.labels = { app: "web" }
147
- spec.template.spec.containers = [
148
- { name: "web", image: "nginx", ports: [{ containerPort: 8080 }] },
149
- ]
150
- })
94
+ Middleware::ServiceForDeployment.new.call(m)
151
95
 
152
- Middleware::ServiceForDeployment.new.call(m)
96
+ deploy, service = m.resources
97
+ sh = service.to_h
98
+ port = sh.dig(:spec, :ports, 0)
153
99
 
154
- m.resources.size.should == 1
155
- end
100
+ port[:protocol].should == "TCP"
101
+ end
156
102
 
157
- it "skips_deployment_without_ports" do
158
- m = manifest(Kube::Cluster["Deployment"].new {
159
- metadata.name = "worker"
160
- spec.selector.matchLabels = { app: "worker" }
161
- spec.template.metadata.labels = { app: "worker" }
162
- spec.template.spec.containers = [
163
- { name: "worker", image: "worker:latest" },
164
- ]
165
- })
103
+ it "maps_multiple_ports" do
104
+ m = manifest(Kube::Cluster["Deployment"].new {
105
+ metadata.name = "web"
106
+ spec.selector.matchLabels = { app: "web" }
107
+ spec.template.metadata.labels = { app: "web" }
108
+ spec.template.spec.containers = [
109
+ {
110
+ name: "web", image: "nginx",
111
+ ports: [
112
+ { name: "http", containerPort: 8080 },
113
+ { name: "metrics", containerPort: 9090 },
114
+ ],
115
+ },
116
+ ]
117
+ })
118
+
119
+ Middleware::ServiceForDeployment.new.call(m)
120
+ service = m.resources.last
121
+ ports = service.to_h.dig(:spec, :ports)
122
+
123
+ ports.size.should == 2
124
+ end
166
125
 
167
- Middleware::ServiceForDeployment.new.call(m)
126
+ it "copies_labels_from_source" do
127
+ m = manifest(Kube::Cluster["Deployment"].new {
128
+ metadata.name = "web"
129
+ metadata.labels = { "app.kubernetes.io/name": "web", "app.kubernetes.io/size": "small" }
130
+ spec.selector.matchLabels = { app: "web" }
131
+ spec.template.metadata.labels = { app: "web" }
132
+ spec.template.spec.containers = [
133
+ { name: "web", image: "nginx", ports: [{ name: "http", containerPort: 8080 }] },
134
+ ]
135
+ })
136
+
137
+ Middleware::ServiceForDeployment.new.call(m)
138
+ service_labels = m.resources.last.to_h.dig(:metadata, :labels)
139
+
140
+ service_labels[:"app.kubernetes.io/size"].should == "small"
141
+ end
168
142
 
169
- m.resources.size.should == 1
170
- end
143
+ it "skips_deployment_without_named_ports" do
144
+ m = manifest(Kube::Cluster["Deployment"].new {
145
+ metadata.name = "web"
146
+ spec.selector.matchLabels = { app: "web" }
147
+ spec.template.metadata.labels = { app: "web" }
148
+ spec.template.spec.containers = [
149
+ { name: "web", image: "nginx", ports: [{ containerPort: 8080 }] },
150
+ ]
151
+ })
171
152
 
172
- it "skips_non_pod_bearing_resources" do
173
- m = manifest(Kube::Cluster["ConfigMap"].new { metadata.name = "config" })
153
+ Middleware::ServiceForDeployment.new.call(m)
174
154
 
175
- Middleware::ServiceForDeployment.new.call(m)
155
+ m.resources.size.should == 1
156
+ end
176
157
 
177
- m.resources.size.should == 1
178
- end
158
+ it "skips_deployment_without_ports" do
159
+ m = manifest(Kube::Cluster["Deployment"].new {
160
+ metadata.name = "worker"
161
+ spec.selector.matchLabels = { app: "worker" }
162
+ spec.template.metadata.labels = { app: "worker" }
163
+ spec.template.spec.containers = [
164
+ { name: "worker", image: "worker:latest" },
165
+ ]
166
+ })
167
+
168
+ Middleware::ServiceForDeployment.new.call(m)
179
169
 
180
- it "skips_deployment_without_match_labels" do
181
- m = manifest(Kube::Cluster["Deployment"].new {
182
- metadata.name = "web"
183
- spec.template.metadata.labels = { app: "web" }
184
- spec.template.spec.containers = [
185
- { name: "web", image: "nginx", ports: [{ name: "http", containerPort: 8080 }] },
186
- ]
187
- })
170
+ m.resources.size.should == 1
171
+ end
188
172
 
189
- Middleware::ServiceForDeployment.new.call(m)
173
+ it "skips_non_pod_bearing_resources" do
174
+ m = manifest(Kube::Cluster["ConfigMap"].new { metadata.name = "config" })
190
175
 
191
- m.resources.size.should == 1
192
- end
176
+ Middleware::ServiceForDeployment.new.call(m)
193
177
 
194
- it "works_with_statefulset" do
195
- m = manifest(Kube::Cluster["StatefulSet"].new {
196
- metadata.name = "db"
197
- metadata.namespace = "database"
198
- spec.selector.matchLabels = { app: "db" }
199
- spec.template.metadata.labels = { app: "db" }
200
- spec.template.spec.containers = [
201
- { name: "postgres", image: "postgres:16", ports: [{ name: "tcp-pg", containerPort: 5432 }] },
202
- ]
203
- })
178
+ m.resources.size.should == 1
179
+ end
204
180
 
205
- Middleware::ServiceForDeployment.new.call(m)
181
+ it "skips_deployment_without_match_labels" do
182
+ m = manifest(Kube::Cluster["Deployment"].new {
183
+ metadata.name = "web"
184
+ spec.template.metadata.labels = { app: "web" }
185
+ spec.template.spec.containers = [
186
+ { name: "web", image: "nginx", ports: [{ name: "http", containerPort: 8080 }] },
187
+ ]
188
+ })
206
189
 
207
- m.resources.last.to_h.dig(:metadata, :namespace).should == "database"
208
- end
190
+ Middleware::ServiceForDeployment.new.call(m)
209
191
 
210
- private
192
+ m.resources.size.should == 1
193
+ end
211
194
 
212
- def manifest(*resources)
213
- m = Kube::Cluster::Manifest.new
214
- resources.each { |r| m << r }
215
- m
216
- end
195
+ it "works_with_statefulset" do
196
+ m = manifest(Kube::Cluster["StatefulSet"].new {
197
+ metadata.name = "db"
198
+ metadata.namespace = "database"
199
+ spec.selector.matchLabels = { app: "db" }
200
+ spec.template.metadata.labels = { app: "db" }
201
+ spec.template.spec.containers = [
202
+ { name: "postgres", image: "postgres:16", ports: [{ name: "tcp-pg", containerPort: 5432 }] },
203
+ ]
204
+ })
205
+
206
+ Middleware::ServiceForDeployment.new.call(m)
207
+
208
+ m.resources.last.to_h.dig(:metadata, :namespace).should == "database"
217
209
  end
210
+
211
+ private
212
+
213
+ def manifest(*resources)
214
+ m = Kube::Cluster::Manifest.new
215
+ resources.each { |r| m << r }
216
+ m
217
+ end