Update to use command info from sdk

This commit is contained in:
Chris Roberts 2022-02-09 16:56:43 -08:00 committed by Paul Hinze
parent efd4df030d
commit 14fa44a449
No known key found for this signature in database
GPG Key ID: B69DEDF2D55501C0
3 changed files with 14 additions and 72 deletions

View File

@ -17,10 +17,10 @@ import (
"github.com/mitchellh/cli"
"github.com/mitchellh/go-glint"
"github.com/hashicorp/vagrant-plugin-sdk/internal-shared/protomappers"
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
"github.com/hashicorp/vagrant-plugin-sdk/terminal"
"github.com/hashicorp/vagrant/internal/core"
"github.com/hashicorp/vagrant/internal/pkg/signalcontext"
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
"github.com/hashicorp/vagrant/internal/version"
)
@ -196,12 +196,12 @@ func Commands(
}
func registerCommand(
c *vagrant_server.Job_Command,
c *vagrant_plugin_sdk.Command_CommandInfo,
cmds map[string]cli.CommandFactory,
base *baseCommand,
parent *DynamicCommand,
) {
flgs, err := core.FlagOption(c.Flags)
flgs, err := protomappers.Flags(c.Flags)
if err != nil {
panic(err)
}

View File

@ -119,7 +119,7 @@ func NewBasis(ctx context.Context, opts ...BasisOption) (b *Basis, err error) {
// Ensure any modifications to the basis are persisted
b.Closer(func() error { return b.Save() })
// Add in our local mappers
// Add in local mappers
for _, fn := range Mappers {
f, err := argmapper.NewFunc(fn,
argmapper.Logger(dynamic.Logger),
@ -364,7 +364,7 @@ func (b *Basis) Host() (host core.Host, err error) {
func (b *Basis) Init() (result *vagrant_server.Job_InitResult, err error) {
b.logger.Debug("running init for basis")
result = &vagrant_server.Job_InitResult{
Commands: []*vagrant_server.Job_Command{},
Commands: []*vagrant_plugin_sdk.Command_CommandInfo{},
}
ctx := context.Background()
@ -376,7 +376,7 @@ func (b *Basis) Init() (result *vagrant_server.Job_InitResult, err error) {
for _, c := range cmds {
fn := c.Value.(component.Command).CommandInfoFunc()
raw, err := b.callDynamicFunc(ctx, b.logger, fn,
(*[]*vagrant_server.Job_Command)(nil),
(*[]*vagrant_plugin_sdk.Command_CommandInfo)(nil),
argmapper.Typed(b.ctx),
)
@ -385,7 +385,7 @@ func (b *Basis) Init() (result *vagrant_server.Job_InitResult, err error) {
}
result.Commands = append(result.Commands,
raw.([]*vagrant_server.Job_Command)...)
raw.([]*vagrant_plugin_sdk.Command_CommandInfo)...)
}
return

View File

@ -4,85 +4,27 @@ import (
"strings"
"github.com/hashicorp/vagrant-plugin-sdk/component"
"github.com/hashicorp/vagrant-plugin-sdk/internal-shared/protomappers"
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
)
var Mappers = []interface{}{
CommandArgToMap,
FlagOption,
JobCommandProto,
OptionFlagProto,
}
func JobCommandProto(c *component.CommandInfo) []*vagrant_server.Job_Command {
func JobCommandProto(c *component.CommandInfo) []*vagrant_plugin_sdk.Command_CommandInfo {
return jobCommandProto(c, []string{})
}
func FlagOption(input []*vagrant_server.Job_Flag) (opt component.CommandFlags, err error) {
opt = make([]*component.CommandFlag, len(input))
for i, f := range input {
opt[i] = &component.CommandFlag{
LongName: f.LongName,
ShortName: f.ShortName,
Description: f.Description,
DefaultValue: f.DefaultValue,
}
switch f.Type {
case vagrant_server.Job_Flag_STRING:
opt[i].Type = component.FlagString
case vagrant_server.Job_Flag_BOOL:
opt[i].Type = component.FlagBool
}
}
return
}
func CommandArgToMap(input *vagrant_plugin_sdk.Command_Arguments) (map[string]interface{}, error) {
result := make(map[string]interface{})
for _, flg := range input.Flags {
switch flg.Type {
case vagrant_plugin_sdk.Command_Arguments_Flag_STRING:
result[flg.Name] = flg.GetString_()
case vagrant_plugin_sdk.Command_Arguments_Flag_BOOL:
result[flg.Name] = flg.GetBool()
}
}
return result, nil
}
func OptionFlagProto(input component.CommandFlags) []*vagrant_server.Job_Flag {
output := make([]*vagrant_server.Job_Flag, len(input))
for i, f := range input {
output[i] = &vagrant_server.Job_Flag{
LongName: f.LongName,
ShortName: f.ShortName,
Description: f.Description,
DefaultValue: f.DefaultValue,
}
switch f.Type {
case component.FlagBool:
output[i].Type = vagrant_server.Job_Flag_BOOL
case component.FlagString:
output[i].Type = vagrant_server.Job_Flag_STRING
default:
panic("unsupported flag type - " + f.Type.String())
}
}
return output
}
func jobCommandProto(c *component.CommandInfo, names []string) []*vagrant_server.Job_Command {
func jobCommandProto(c *component.CommandInfo, names []string) []*vagrant_plugin_sdk.Command_CommandInfo {
names = append(names, c.Name)
cmds := []*vagrant_server.Job_Command{
flgs, _ := protomappers.FlagsProto(c.Flags)
cmds := []*vagrant_plugin_sdk.Command_CommandInfo{
{
Name: strings.Join(names, " "),
Synopsis: c.Synopsis,
Help: c.Help,
Flags: OptionFlagProto(c.Flags),
Flags: flgs,
},
}