Skip to content

Commit

Permalink
Add jsonschema enum for the property types
Browse files Browse the repository at this point in the history
Signed-off-by: Anders F Björklund <[email protected]>
  • Loading branch information
afbjorklund committed Jun 16, 2024
1 parent ab67510 commit 33221ec
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
22 changes: 22 additions & 0 deletions cmd/limactl/genschema.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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)
Expand All @@ -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
Expand Down
9 changes: 9 additions & 0 deletions pkg/limayaml/limayaml.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@ type LimaYAML struct {

type (
OS = string
OSType = OS
Arch = string
ArchType = Arch
MountType = string
VMType = string
)
Expand All @@ -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"`
Expand Down

0 comments on commit 33221ec

Please sign in to comment.