From 7b0cf97b7912535914e32c0b23b208aa4181d720 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20F=20Bj=C3=B6rklund?= Date: Thu, 16 May 2024 20:08:32 +0200 Subject: [PATCH] Add jsonschema enum for the property types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Anders F Björklund --- cmd/limactl/genschema.go | 22 ++++++++++++++++++++++ go.mod | 2 +- pkg/limayaml/limayaml.go | 9 +++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/cmd/limactl/genschema.go b/cmd/limactl/genschema.go index 737634ca365..687fb5e2df8 100644 --- a/cmd/limactl/genschema.go +++ b/cmd/limactl/genschema.go @@ -7,6 +7,7 @@ import ( "github.com/invopop/jsonschema" "github.com/lima-vm/lima/pkg/limayaml" "github.com/spf13/cobra" + orderedmap "github.com/wk8/go-ordered-map/v2" ) func newGenSchemaCommand() *cobra.Command { @@ -20,6 +21,22 @@ func newGenSchemaCommand() *cobra.Command { return genschemaCommand } +func toAny(args []string) []any { + result := []any{nil} + for _, arg := range args { + result = append(result, arg) + } + return result +} + +func getProp(props *orderedmap.OrderedMap[string, *jsonschema.Schema], key string) *jsonschema.Schema { + value, ok := props.Get(key) + if !ok { + return nil + } + return value +} + func genschemaAction(cmd *cobra.Command, _ []string) error { schema := jsonschema.Reflect(&limayaml.LimaYAML{}) // allow Disk to be either string (name) or object (struct) @@ -28,6 +45,11 @@ func genschemaAction(cmd *cobra.Command, _ []string) error { {Type: "string"}, {Type: "object"}, } + properties := schema.Definitions["LimaYAML"].Properties + getProp(properties, "os").Enum = toAny(limayaml.OSTypes) + getProp(properties, "arch").Enum = toAny(limayaml.ArchTypes) + getProp(properties, "mountType").Enum = toAny(limayaml.MountTypes) + getProp(properties, "vmType").Enum = toAny(limayaml.VMTypes) j, err := json.MarshalIndent(schema, "", " ") if err != nil { return err diff --git a/go.mod b/go.mod index f0eb6310865..0f3ff373b78 100644 --- a/go.mod +++ b/go.mod @@ -40,6 +40,7 @@ require ( github.com/sirupsen/logrus v1.9.4-0.20230606125235-dd1b4c2e81af github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 + github.com/wk8/go-ordered-map/v2 v2.1.8 golang.org/x/net v0.30.0 golang.org/x/sync v0.8.0 golang.org/x/sys v0.26.0 @@ -112,7 +113,6 @@ require ( github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 // indirect - github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/yuin/gopher-lua v1.1.1 // indirect go.uber.org/atomic v1.7.0 // indirect diff --git a/pkg/limayaml/limayaml.go b/pkg/limayaml/limayaml.go index ad363cb4131..132beea13cd 100644 --- a/pkg/limayaml/limayaml.go +++ b/pkg/limayaml/limayaml.go @@ -50,7 +50,9 @@ type LimaYAML struct { type ( OS = string + OSType = OS Arch = string + ArchType = Arch MountType = string VMType = string ) @@ -75,6 +77,13 @@ const ( WSL2 VMType = "wsl2" ) +var ( + OSTypes = []OSType{LINUX} + ArchTypes = []ArchType{X8664, AARCH64, ARMV7L, RISCV64} + MountTypes = []MountType{REVSSHFS, NINEP, VIRTIOFS, WSLMount} + VMTypes = []VMType{QEMU, VZ, WSL2} +) + type VMOpts struct { QEMU QEMUOpts `yaml:"qemu,omitempty" json:"qemu,omitempty"` }