From 33221ec0120c1f7c380a07c04a8f693f33c2fe6b 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 ++++++++++++++++++++++ pkg/limayaml/limayaml.go | 9 +++++++++ 2 files changed, 31 insertions(+) diff --git a/cmd/limactl/genschema.go b/cmd/limactl/genschema.go index 09bec5e930f..92fb56f112f 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/pkg/limayaml/limayaml.go b/pkg/limayaml/limayaml.go index d1c890022cd..3ffc49ac4d2 100644 --- a/pkg/limayaml/limayaml.go +++ b/pkg/limayaml/limayaml.go @@ -46,7 +46,9 @@ type LimaYAML struct { type ( OS = string + OSType = OS Arch = string + ArchType = Arch MountType = string VMType = string ) @@ -71,6 +73,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 Rosetta struct { Enabled *bool `yaml:"enabled" json:"enabled" jsonschema:"nullable"` BinFmt *bool `yaml:"binfmt" json:"binfmt" jsonschema:"nullable"`