kube_schema 1.3.8 → 1.3.10
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/bin/copy-schemas-over +2 -0
- data/bin/create-kubevirt-x-values +54 -0
- data/lib/kube/schema/instance.rb +52 -0
- data/lib/kube/schema/version.rb +1 -1
- data/schemas/kubevirt-definitions.json +287 -161
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ec9dd9097e79e7347dad7507a4670448598cbabf88d5347f4f54304cbdea582e
|
|
4
|
+
data.tar.gz: 0d0fc8aad770317f4e1a666e62b5a884433165dd84aebafcb7ba759c8e37ede2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9d1b2444bed18ac8c17c9e383e4f5e063b032cde1ac18a6528e8de363af63f750ff00b0010198165f73e0c0c782f2fdf4f9b69afb0e3ac0051272e993d97d507
|
|
7
|
+
data.tar.gz: 7fdfcd1388bfe2eda4097602ff9397c3564b84921133806f7784a947e6a7fab9a88ece0d6497a24a6327924f6cd2ba5be948b4ae878cbaa43009e7f6bd0a067a
|
data/Gemfile.lock
CHANGED
data/bin/copy-schemas-over
CHANGED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# Rewrites schemas/kubevirt-definitions.json in-place to:
|
|
4
|
+
# 1. Add x-kubernetes-group-version-kind annotations
|
|
5
|
+
# 2. Fix $ref pointers from k8s.io.* to io.k8s.* prefix
|
|
6
|
+
#
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
DEFS_FILE="schemas/kubevirt-definitions.json"
|
|
10
|
+
|
|
11
|
+
echo "Rewriting $DEFS_FILE..."
|
|
12
|
+
|
|
13
|
+
jq '
|
|
14
|
+
# GVK map: definition key -> [{ group, version, kind }]
|
|
15
|
+
{
|
|
16
|
+
"v1.KubeVirt": [{ group: "kubevirt.io", version: "v1", kind: "KubeVirt" }],
|
|
17
|
+
"v1.VirtualMachine": [{ group: "kubevirt.io", version: "v1", kind: "VirtualMachine" }],
|
|
18
|
+
"v1.VirtualMachineExport": [{ group: "export.kubevirt.io", version: "v1", kind: "VirtualMachineExport" }],
|
|
19
|
+
"v1.VirtualMachineInstance": [{ group: "kubevirt.io", version: "v1", kind: "VirtualMachineInstance" }],
|
|
20
|
+
"v1.VirtualMachineInstanceMigration": [{ group: "kubevirt.io", version: "v1", kind: "VirtualMachineInstanceMigration" }],
|
|
21
|
+
"v1.VirtualMachineInstancePreset": [{ group: "kubevirt.io", version: "v1", kind: "VirtualMachineInstancePreset" }],
|
|
22
|
+
"v1.VirtualMachineInstanceReplicaSet": [{ group: "kubevirt.io", version: "v1", kind: "VirtualMachineInstanceReplicaSet" }],
|
|
23
|
+
"v1alpha1.MigrationPolicy": [{ group: "migrations.kubevirt.io", version: "v1alpha1", kind: "MigrationPolicy" }],
|
|
24
|
+
"v1alpha1.VirtualMachineBackup": [{ group: "backup.kubevirt.io", version: "v1alpha1", kind: "VirtualMachineBackup" }],
|
|
25
|
+
"v1beta1.VirtualMachineClone": [{ group: "clone.kubevirt.io", version: "v1beta1", kind: "VirtualMachineClone" }],
|
|
26
|
+
"v1beta1.VirtualMachineClusterInstancetype":[{ group: "instancetype.kubevirt.io", version: "v1beta1", kind: "VirtualMachineClusterInstancetype" }],
|
|
27
|
+
"v1beta1.VirtualMachineClusterPreference": [{ group: "instancetype.kubevirt.io", version: "v1beta1", kind: "VirtualMachineClusterPreference" }],
|
|
28
|
+
"v1beta1.VirtualMachineInstancetype": [{ group: "instancetype.kubevirt.io", version: "v1beta1", kind: "VirtualMachineInstancetype" }],
|
|
29
|
+
"v1beta1.VirtualMachinePool": [{ group: "pool.kubevirt.io", version: "v1beta1", kind: "VirtualMachinePool" }],
|
|
30
|
+
"v1beta1.VirtualMachinePreference": [{ group: "instancetype.kubevirt.io", version: "v1beta1", kind: "VirtualMachinePreference" }],
|
|
31
|
+
"v1beta1.VirtualMachineRestore": [{ group: "snapshot.kubevirt.io", version: "v1beta1", kind: "VirtualMachineRestore" }],
|
|
32
|
+
"v1beta1.VirtualMachineSnapshot": [{ group: "snapshot.kubevirt.io", version: "v1beta1", kind: "VirtualMachineSnapshot" }],
|
|
33
|
+
"v1beta1.VirtualMachineSnapshotContent": [{ group: "snapshot.kubevirt.io", version: "v1beta1", kind: "VirtualMachineSnapshotContent" }]
|
|
34
|
+
} as $gvk_map |
|
|
35
|
+
|
|
36
|
+
# Inject x-kubernetes-group-version-kind annotations
|
|
37
|
+
with_entries(
|
|
38
|
+
if $gvk_map[.key] then
|
|
39
|
+
.value["x-kubernetes-group-version-kind"] = $gvk_map[.key]
|
|
40
|
+
else . end
|
|
41
|
+
) |
|
|
42
|
+
|
|
43
|
+
# Fix $ref pointers: kubevirt uses k8s.io.* but base schema uses io.k8s.*
|
|
44
|
+
walk(
|
|
45
|
+
if type == "string" and startswith("#/definitions/k8s.io.")
|
|
46
|
+
then sub("^#/definitions/k8s\\.io\\."; "#/definitions/io.k8s.")
|
|
47
|
+
else . end
|
|
48
|
+
)
|
|
49
|
+
' "$DEFS_FILE" > "${DEFS_FILE}.tmp" && mv "${DEFS_FILE}.tmp" "$DEFS_FILE"
|
|
50
|
+
|
|
51
|
+
ANNOTATED=$(jq '[.[] | select(has("x-kubernetes-group-version-kind"))] | length' "$DEFS_FILE")
|
|
52
|
+
TOTAL=$(jq 'length' "$DEFS_FILE")
|
|
53
|
+
STALE_REFS=$(jq -r '[.. | strings | select(startswith("#/definitions/k8s.io."))] | length' "$DEFS_FILE")
|
|
54
|
+
echo "Done. $ANNOTATED/$TOTAL definitions annotated. $STALE_REFS stale k8s.io refs remaining."
|
data/lib/kube/schema/instance.rb
CHANGED
|
@@ -311,6 +311,58 @@ if __FILE__ == $0
|
|
|
311
311
|
end
|
|
312
312
|
end
|
|
313
313
|
|
|
314
|
+
describe "KubeVirt schemas" do
|
|
315
|
+
it "resolves VirtualMachine" do
|
|
316
|
+
klass = instance["VirtualMachine"]
|
|
317
|
+
expect(klass).to be_a(Class)
|
|
318
|
+
expect(klass).to be < Kube::Schema::Resource
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
it "has correct defaults for VirtualMachine" do
|
|
322
|
+
klass = instance["VirtualMachine"]
|
|
323
|
+
expect(klass.defaults).to eq({ "apiVersion" => "kubevirt.io/v1", "kind" => "VirtualMachine" })
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
it "includes VirtualMachine in list_resources" do
|
|
327
|
+
expect(instance.list_resources).to include("VirtualMachine")
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
it "resolves VirtualMachineInstance" do
|
|
331
|
+
klass = instance["VirtualMachineInstance"]
|
|
332
|
+
expect(klass.defaults).to eq({ "apiVersion" => "kubevirt.io/v1", "kind" => "VirtualMachineInstance" })
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
it "resolves KubeVirt" do
|
|
336
|
+
klass = instance["KubeVirt"]
|
|
337
|
+
expect(klass.defaults).to eq({ "apiVersion" => "kubevirt.io/v1", "kind" => "KubeVirt" })
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
it "can instantiate a VirtualMachine with the block DSL" do
|
|
341
|
+
resource = instance["VirtualMachine"].new {
|
|
342
|
+
metadata.name = "test-vm"
|
|
343
|
+
}
|
|
344
|
+
expect(resource.to_h[:apiVersion]).to eq("kubevirt.io/v1")
|
|
345
|
+
expect(resource.to_h[:kind]).to eq("VirtualMachine")
|
|
346
|
+
expect(resource.to_h[:metadata][:name]).to eq("test-vm")
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
it "validates a VirtualMachine without $ref resolution errors" do
|
|
350
|
+
resource = instance["VirtualMachine"].new {
|
|
351
|
+
metadata.name = "test-vm"
|
|
352
|
+
spec.runStrategy = "Always"
|
|
353
|
+
spec.template.metadata.labels = { "kubevirt.io/vm": "test-vm" }
|
|
354
|
+
spec.template.spec.domain.cpu = { cores: 1 }
|
|
355
|
+
spec.template.spec.domain.devices = {}
|
|
356
|
+
spec.template.spec.domain.memory = { guest: "1Gi" }
|
|
357
|
+
spec.template.spec.domain.resources = { requests: { memory: "1Gi" } }
|
|
358
|
+
spec.template.spec.volumes = [
|
|
359
|
+
{ name: "rootdisk", containerDisk: { image: "registry.example.com/vm:latest" } }
|
|
360
|
+
]
|
|
361
|
+
}
|
|
362
|
+
expect { resource.to_yaml }.not_to raise_error
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
|
|
314
366
|
describe "class-level schemer cache" do
|
|
315
367
|
it "shares the schemer across instances of the same version" do
|
|
316
368
|
a = described_class.new("1.34")
|