pangea-kubernetes 0.1.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 (50) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/auto-bump.yml +11 -0
  3. data/.github/workflows/ci.yml +7 -0
  4. data/.github/workflows/release.yml +22 -0
  5. data/.gitignore +6 -0
  6. data/.rspec +3 -0
  7. data/AGENTS.md +3 -0
  8. data/CLAUDE.md +370 -0
  9. data/Gemfile +9 -0
  10. data/Gemfile.lock +128 -0
  11. data/README.md +42 -0
  12. data/Rakefile +8 -0
  13. data/flake.lock +2144 -0
  14. data/flake.nix +30 -0
  15. data/gemset.nix +312 -0
  16. data/lib/pangea/kubernetes/architecture.rb +383 -0
  17. data/lib/pangea/kubernetes/backend_registry.rb +117 -0
  18. data/lib/pangea/kubernetes/backends/aws_eks.rb +203 -0
  19. data/lib/pangea/kubernetes/backends/aws_nixos.rb +1347 -0
  20. data/lib/pangea/kubernetes/backends/azure_aks.rb +145 -0
  21. data/lib/pangea/kubernetes/backends/azure_nixos.rb +275 -0
  22. data/lib/pangea/kubernetes/backends/base.rb +116 -0
  23. data/lib/pangea/kubernetes/backends/gcp_gke.rb +176 -0
  24. data/lib/pangea/kubernetes/backends/gcp_nixos.rb +240 -0
  25. data/lib/pangea/kubernetes/backends/hcloud_k3s.rb +181 -0
  26. data/lib/pangea/kubernetes/backends/nixos_base.rb +235 -0
  27. data/lib/pangea/kubernetes/bare_metal/cloud_init.rb +196 -0
  28. data/lib/pangea/kubernetes/bare_metal/cluster_reference.rb +72 -0
  29. data/lib/pangea/kubernetes/load_balancer.rb +157 -0
  30. data/lib/pangea/kubernetes/network_backend_registry.rb +54 -0
  31. data/lib/pangea/kubernetes/network_backends/base.rb +78 -0
  32. data/lib/pangea/kubernetes/network_backends/cilium.rb +105 -0
  33. data/lib/pangea/kubernetes/network_backends/vpc_cni.rb +36 -0
  34. data/lib/pangea/kubernetes/types/argocd_config.rb +55 -0
  35. data/lib/pangea/kubernetes/types/control_plane_config.rb +65 -0
  36. data/lib/pangea/kubernetes/types/etcd_config.rb +64 -0
  37. data/lib/pangea/kubernetes/types/firewall_config.rb +39 -0
  38. data/lib/pangea/kubernetes/types/k3s_config.rb +112 -0
  39. data/lib/pangea/kubernetes/types/kernel_config.rb +31 -0
  40. data/lib/pangea/kubernetes/types/kubernetes_config.rb +129 -0
  41. data/lib/pangea/kubernetes/types/persistent_state_config.rb +100 -0
  42. data/lib/pangea/kubernetes/types/pki_config.rb +48 -0
  43. data/lib/pangea/kubernetes/types/secrets_config.rb +41 -0
  44. data/lib/pangea/kubernetes/types/vpn_config.rb +188 -0
  45. data/lib/pangea/kubernetes/types/wait_for_dns_config.rb +35 -0
  46. data/lib/pangea/kubernetes/types.rb +521 -0
  47. data/lib/pangea-kubernetes/version.rb +5 -0
  48. data/lib/pangea-kubernetes.rb +43 -0
  49. data/pangea-kubernetes.gemspec +33 -0
  50. metadata +192 -0
data/flake.nix ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ description = "Pangea Kubernetes — cloud-agnostic Kubernetes abstractions";
3
+
4
+ inputs = {
5
+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
6
+ ruby-nix.url = "github:inscapist/ruby-nix";
7
+ flake-utils.url = "github:numtide/flake-utils";
8
+ substrate = {
9
+ url = "github:pleme-io/substrate";
10
+ inputs.nixpkgs.follows = "nixpkgs";
11
+ };
12
+ forge = {
13
+ url = "github:pleme-io/forge";
14
+ inputs.nixpkgs.follows = "nixpkgs";
15
+ inputs.substrate.follows = "substrate";
16
+ };
17
+ devenv = {
18
+ url = "github:cachix/devenv";
19
+ inputs.nixpkgs.follows = "nixpkgs";
20
+ };
21
+ };
22
+
23
+ outputs = { self, nixpkgs, ruby-nix, flake-utils, substrate, forge, ... }:
24
+ (import "${substrate}/lib/ruby-gem-flake.nix" {
25
+ inherit nixpkgs ruby-nix flake-utils substrate forge;
26
+ }) {
27
+ inherit self;
28
+ name = "pangea-kubernetes";
29
+ };
30
+ }
data/gemset.nix ADDED
@@ -0,0 +1,312 @@
1
+ {
2
+ abstract-synthesizer = {
3
+ groups = ["default"];
4
+ platforms = [];
5
+ source = {
6
+ remotes = ["https://rubygems.org"];
7
+ sha256 = "1724yzbklcmiiahb7s3y1ir1i0n03b9c3arlib35g85d8hf0h75d";
8
+ type = "gem";
9
+ };
10
+ version = "0.0.15";
11
+ };
12
+ base64 = {
13
+ groups = ["default"];
14
+ platforms = [];
15
+ source = {
16
+ remotes = ["https://rubygems.org"];
17
+ sha256 = "0yx9yn47a8lkfcjmigk79fykxvr80r4m1i35q82sxzynpbm7lcr7";
18
+ type = "gem";
19
+ };
20
+ version = "0.3.0";
21
+ };
22
+ bigdecimal = {
23
+ groups = ["default"];
24
+ platforms = [];
25
+ source = {
26
+ remotes = ["https://rubygems.org"];
27
+ sha256 = "19y406nx17arzsbc515mjmr6k5p59afprspa1k423yd9cp8d61wb";
28
+ type = "gem";
29
+ };
30
+ version = "4.0.1";
31
+ };
32
+ concurrent-ruby = {
33
+ groups = ["default"];
34
+ platforms = [];
35
+ source = {
36
+ remotes = ["https://rubygems.org"];
37
+ sha256 = "1aymcakhzl83k77g2f2krz07bg1cbafbcd2ghvwr4lky3rz86mkb";
38
+ type = "gem";
39
+ };
40
+ version = "1.3.6";
41
+ };
42
+ diff-lcs = {
43
+ groups = ["default" "development"];
44
+ platforms = [];
45
+ source = {
46
+ remotes = ["https://rubygems.org"];
47
+ sha256 = "0qlrj2qyysc9avzlr4zs1py3x684hqm61n4czrsk1pyllz5x5q4s";
48
+ type = "gem";
49
+ };
50
+ version = "1.6.2";
51
+ };
52
+ docile = {
53
+ groups = ["default" "development"];
54
+ platforms = [];
55
+ source = {
56
+ remotes = ["https://rubygems.org"];
57
+ sha256 = "07pj4z3h8wk4fgdn6s62vw1lwvhj0ac0x10vfbdkr9xzk7krn5cn";
58
+ type = "gem";
59
+ };
60
+ version = "1.4.1";
61
+ };
62
+ dry-core = {
63
+ dependencies = ["concurrent-ruby" "logger" "zeitwerk"];
64
+ groups = ["default"];
65
+ platforms = [];
66
+ source = {
67
+ remotes = ["https://rubygems.org"];
68
+ sha256 = "18cn9s2p7cbgacy0z41h3sf9jvl75vjfmvj774apyffzi3dagi8c";
69
+ type = "gem";
70
+ };
71
+ version = "1.2.0";
72
+ };
73
+ dry-inflector = {
74
+ groups = ["default"];
75
+ platforms = [];
76
+ source = {
77
+ remotes = ["https://rubygems.org"];
78
+ sha256 = "1k1dd35sqqqg2abd2g2w78m94pa3mcwvmrsjbkr3hxpn0jxw5c3z";
79
+ type = "gem";
80
+ };
81
+ version = "1.3.1";
82
+ };
83
+ dry-logic = {
84
+ dependencies = ["bigdecimal" "concurrent-ruby" "dry-core" "zeitwerk"];
85
+ groups = ["default"];
86
+ platforms = [];
87
+ source = {
88
+ remotes = ["https://rubygems.org"];
89
+ sha256 = "18nf8mbnhgvkw34drj7nmvpx2afmyl2nyzncn3wl3z4h1yyfsvys";
90
+ type = "gem";
91
+ };
92
+ version = "1.6.0";
93
+ };
94
+ dry-struct = {
95
+ dependencies = ["dry-core" "dry-types" "ice_nine" "zeitwerk"];
96
+ groups = ["default"];
97
+ platforms = [];
98
+ source = {
99
+ remotes = ["https://rubygems.org"];
100
+ sha256 = "0ri9iqxknxvvhpbshf6jn7bq581k8l67iv23mii69yr4k5aqphvl";
101
+ type = "gem";
102
+ };
103
+ version = "1.8.0";
104
+ };
105
+ dry-types = {
106
+ dependencies = ["bigdecimal" "concurrent-ruby" "dry-core" "dry-inflector" "dry-logic" "zeitwerk"];
107
+ groups = ["default"];
108
+ platforms = [];
109
+ source = {
110
+ remotes = ["https://rubygems.org"];
111
+ sha256 = "0y7icwaa26ycikz6h97gwd1hji3r280n4yr2kmn5sfgqp76yxsxs";
112
+ type = "gem";
113
+ };
114
+ version = "1.9.1";
115
+ };
116
+ ice_nine = {
117
+ groups = ["default"];
118
+ platforms = [];
119
+ source = {
120
+ remotes = ["https://rubygems.org"];
121
+ sha256 = "1nv35qg1rps9fsis28hz2cq2fx1i96795f91q4nmkm934xynll2x";
122
+ type = "gem";
123
+ };
124
+ version = "0.11.2";
125
+ };
126
+ logger = {
127
+ groups = ["default"];
128
+ platforms = [];
129
+ source = {
130
+ remotes = ["https://rubygems.org"];
131
+ sha256 = "00q2zznygpbls8asz5knjvvj2brr3ghmqxgr83xnrdj4rk3xwvhr";
132
+ type = "gem";
133
+ };
134
+ version = "1.7.0";
135
+ };
136
+ pangea-aws = {
137
+ dependencies = ["dry-struct" "dry-types" "pangea-core" "terraform-synthesizer"];
138
+ groups = ["default"];
139
+ platforms = [];
140
+ source = {
141
+ path = ../pangea-aws;
142
+ type = "path";
143
+ };
144
+ version = "0.2.0";
145
+ };
146
+ pangea-azure = {
147
+ dependencies = ["dry-struct" "dry-types" "pangea-core" "terraform-synthesizer"];
148
+ groups = ["default"];
149
+ platforms = [];
150
+ source = {
151
+ path = ../pangea-azure;
152
+ type = "path";
153
+ };
154
+ version = "0.1.0";
155
+ };
156
+ pangea-core = {
157
+ dependencies = ["base64" "dry-struct" "dry-types" "terraform-synthesizer"];
158
+ groups = ["default"];
159
+ platforms = [];
160
+ source = {
161
+ path = ../pangea-core;
162
+ type = "path";
163
+ };
164
+ version = "0.3.0";
165
+ };
166
+ pangea-gcp = {
167
+ dependencies = ["dry-struct" "dry-types" "pangea-core" "terraform-synthesizer"];
168
+ groups = ["default"];
169
+ platforms = [];
170
+ source = {
171
+ path = ../pangea-gcp;
172
+ type = "path";
173
+ };
174
+ version = "0.1.0";
175
+ };
176
+ pangea-hcloud = {
177
+ dependencies = ["dry-struct" "dry-types" "pangea-core" "terraform-synthesizer"];
178
+ groups = ["default"];
179
+ platforms = [];
180
+ source = {
181
+ path = ../pangea-hcloud;
182
+ type = "path";
183
+ };
184
+ version = "0.1.0";
185
+ };
186
+ pangea-kubernetes = {
187
+ dependencies = ["dry-struct" "dry-types" "pangea-core" "terraform-synthesizer"];
188
+ groups = ["default"];
189
+ platforms = [];
190
+ source = {
191
+ path = ./.;
192
+ type = "path";
193
+ };
194
+ version = "0.1.0";
195
+ };
196
+ rake = {
197
+ groups = ["development"];
198
+ platforms = [];
199
+ source = {
200
+ remotes = ["https://rubygems.org"];
201
+ sha256 = "175iisqb211n0qbfyqd8jz2g01q6xj038zjf4q0nm8k6kz88k7lc";
202
+ type = "gem";
203
+ };
204
+ version = "13.3.1";
205
+ };
206
+ rspec = {
207
+ dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
208
+ groups = ["development"];
209
+ platforms = [];
210
+ source = {
211
+ remotes = ["https://rubygems.org"];
212
+ sha256 = "11q5hagj6vr694innqj4r45jrm8qcwvkxjnphqgyd66piah88qi0";
213
+ type = "gem";
214
+ };
215
+ version = "3.13.2";
216
+ };
217
+ rspec-core = {
218
+ dependencies = ["rspec-support"];
219
+ groups = ["default" "development"];
220
+ platforms = [];
221
+ source = {
222
+ remotes = ["https://rubygems.org"];
223
+ sha256 = "0bcbh9yv6cs6pv299zs4bvalr8yxa51kcdd1pjl60yv625j3r0m8";
224
+ type = "gem";
225
+ };
226
+ version = "3.13.6";
227
+ };
228
+ rspec-expectations = {
229
+ dependencies = ["diff-lcs" "rspec-support"];
230
+ groups = ["default" "development"];
231
+ platforms = [];
232
+ source = {
233
+ remotes = ["https://rubygems.org"];
234
+ sha256 = "0dl8npj0jfpy31bxi6syc7jymyd861q277sfr6jawq2hv6hx791k";
235
+ type = "gem";
236
+ };
237
+ version = "3.13.5";
238
+ };
239
+ rspec-mocks = {
240
+ dependencies = ["diff-lcs" "rspec-support"];
241
+ groups = ["default" "development"];
242
+ platforms = [];
243
+ source = {
244
+ remotes = ["https://rubygems.org"];
245
+ sha256 = "071bqrk2rblk3zq3jk1xxx0dr92y0szi5pxdm8waimxici706y89";
246
+ type = "gem";
247
+ };
248
+ version = "3.13.7";
249
+ };
250
+ rspec-support = {
251
+ groups = ["default" "development"];
252
+ platforms = [];
253
+ source = {
254
+ remotes = ["https://rubygems.org"];
255
+ sha256 = "0z64h5rznm2zv21vjdjshz4v0h7bxvg02yc6g7yzxakj11byah06";
256
+ type = "gem";
257
+ };
258
+ version = "3.13.7";
259
+ };
260
+ simplecov = {
261
+ dependencies = ["docile" "simplecov-html" "simplecov_json_formatter"];
262
+ groups = ["development"];
263
+ platforms = [];
264
+ source = {
265
+ remotes = ["https://rubygems.org"];
266
+ sha256 = "198kcbrjxhhzca19yrdcd6jjj9sb51aaic3b0sc3pwjghg3j49py";
267
+ type = "gem";
268
+ };
269
+ version = "0.22.0";
270
+ };
271
+ simplecov-html = {
272
+ groups = ["default" "development"];
273
+ platforms = [];
274
+ source = {
275
+ remotes = ["https://rubygems.org"];
276
+ sha256 = "0ikjfwydgs08nm3xzc4cn4b6z6rmcrj2imp84xcnimy2wxa8w2xx";
277
+ type = "gem";
278
+ };
279
+ version = "0.13.2";
280
+ };
281
+ simplecov_json_formatter = {
282
+ groups = ["default" "development"];
283
+ platforms = [];
284
+ source = {
285
+ remotes = ["https://rubygems.org"];
286
+ sha256 = "0a5l0733hj7sk51j81ykfmlk2vd5vaijlq9d5fn165yyx3xii52j";
287
+ type = "gem";
288
+ };
289
+ version = "0.1.4";
290
+ };
291
+ terraform-synthesizer = {
292
+ dependencies = ["abstract-synthesizer"];
293
+ groups = ["default"];
294
+ platforms = [];
295
+ source = {
296
+ remotes = ["https://rubygems.org"];
297
+ sha256 = "01yl1s6xnxn3qh42ybqanxdgcfpppg2cvjk8pka7xcf5hxz9qxda";
298
+ type = "gem";
299
+ };
300
+ version = "0.0.28";
301
+ };
302
+ zeitwerk = {
303
+ groups = ["default"];
304
+ platforms = [];
305
+ source = {
306
+ remotes = ["https://rubygems.org"];
307
+ sha256 = "1pbkiwwla5gldgb3saamn91058nl1sq1344l5k36xsh9ih995nnq";
308
+ type = "gem";
309
+ };
310
+ version = "2.7.5";
311
+ };
312
+ }