Update to use command info from sdk
This commit is contained in:
parent
efd4df030d
commit
14fa44a449
@ -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)
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user