Move functions from machine to target. Clean arguments for dynamic call
This commit is contained in:
parent
2ee3f6bfd3
commit
c2d19f7a95
@ -120,16 +120,32 @@ func (p *Project) JobInfo() *component.JobInfo {
|
||||
return p.jobInfo
|
||||
}
|
||||
|
||||
func (p *Project) Target(nameOrId string) *Target {
|
||||
func (p *Project) Target(nameOrId string) (*Target, error) {
|
||||
if t, ok := p.targets[nameOrId]; ok {
|
||||
return t
|
||||
return t, nil
|
||||
}
|
||||
for _, t := range p.targets {
|
||||
if t.target.ResourceId == nameOrId {
|
||||
return t
|
||||
return t, nil
|
||||
}
|
||||
}
|
||||
return nil
|
||||
return nil, errors.New("requested target does not exist")
|
||||
}
|
||||
|
||||
func (p *Project) TargetNames() ([]string, error) {
|
||||
var names []string
|
||||
for _, t := range p.project.Targets {
|
||||
names = append(names, t.Name)
|
||||
}
|
||||
return names, nil
|
||||
}
|
||||
|
||||
func (p *Project) TargetIds() ([]string, error) {
|
||||
var ids []string
|
||||
for _, t := range p.project.Targets {
|
||||
ids = append(ids, t.ResourceId)
|
||||
}
|
||||
return ids, nil
|
||||
}
|
||||
|
||||
func (p *Project) LoadTarget(topts ...TargetOption) (t *Target, err error) {
|
||||
@ -153,10 +169,18 @@ func (p *Project) LoadTarget(topts ...TargetOption) (t *Target, err error) {
|
||||
}
|
||||
|
||||
// If the machine is already loaded, return that
|
||||
if target, ok := p.targets[t.target.Name]; ok {
|
||||
if target, ok := p.targets[t.target.ResourceId]; ok {
|
||||
return target, nil
|
||||
}
|
||||
|
||||
p.targets[t.target.ResourceId] = t
|
||||
|
||||
if t.dir == nil {
|
||||
if t.dir, err = p.dir.Target(t.target.Name); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure any modifications to the target are persisted
|
||||
t.Closer(func() error { return t.Save() })
|
||||
|
||||
@ -224,9 +248,7 @@ func (p *Project) Run(ctx context.Context, task *vagrant_server.Task) (err error
|
||||
(interface{})(nil),
|
||||
cmd,
|
||||
cmd.Value.(component.Command).ExecuteFunc(strings.Split(task.CommandName, " ")),
|
||||
argmapper.Typed(task.CliArgs),
|
||||
argmapper.Typed(p),
|
||||
argmapper.Named("project", p),
|
||||
argmapper.Typed(task.CliArgs, p.jobInfo, p.dir),
|
||||
)
|
||||
if err != nil || result == nil || result.(int64) != 0 {
|
||||
p.logger.Error("failed to execute command", "type", component.CommandType, "name", task.Component.Name, "result", result, "error", err)
|
||||
@ -311,13 +333,12 @@ func (p *Project) callDynamicFunc(
|
||||
|
||||
args = append(args,
|
||||
argmapper.ConverterFunc(p.mappers...),
|
||||
argmapper.Typed(
|
||||
p.jobInfo,
|
||||
p.dir,
|
||||
p.UI,
|
||||
),
|
||||
argmapper.Typed(p),
|
||||
argmapper.Named("project", p),
|
||||
argmapper.Named("project_ui", p.UI),
|
||||
)
|
||||
|
||||
p.logger.Info("running dynamic call from project", "project", p)
|
||||
return p.basis.callDynamicFunc(ctx, log, result, c, f, args...)
|
||||
}
|
||||
|
||||
@ -454,5 +475,4 @@ func WithProjectRef(r *vagrant_plugin_sdk.Ref_Project) ProjectOption {
|
||||
}
|
||||
}
|
||||
|
||||
var _ *Project = (*Project)(nil)
|
||||
var _ core.Project = (*Project)(nil)
|
||||
|
||||
@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/golang/protobuf/proto"
|
||||
"github.com/hashicorp/go-argmapper"
|
||||
@ -19,6 +20,7 @@ import (
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/component"
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/core"
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/datadir"
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/helper/path"
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/terminal"
|
||||
|
||||
@ -55,6 +57,30 @@ func (t *Target) Name() (string, error) {
|
||||
return t.target.Name, nil
|
||||
}
|
||||
|
||||
func (t *Target) SetName(value string) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (t *Target) Provider() (p core.Provider, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (t *Target) VagrantfileName() (name string, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (t *Target) VagrantfilePath() (p path.Path, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (t *Target) Communicate() (c core.Communicator, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (t *Target) UpdatedAt() (tm *time.Time, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (t *Target) ResourceId() (string, error) {
|
||||
return t.target.ResourceId, nil
|
||||
}
|
||||
@ -79,6 +105,10 @@ func (t *Target) Record() (*anypb.Any, error) {
|
||||
return t.target.Record, nil
|
||||
}
|
||||
|
||||
func (t *Target) Specialize(_ interface{}) (core.Machine, error) {
|
||||
return t.Machine(), nil
|
||||
}
|
||||
|
||||
func (t *Target) JobInfo() *component.JobInfo {
|
||||
return t.jobInfo
|
||||
}
|
||||
@ -142,9 +172,7 @@ func (t *Target) Run(ctx context.Context, task *vagrant_server.Task) (err error)
|
||||
(interface{})(nil),
|
||||
cmd,
|
||||
cmd.Value.(component.Command).ExecuteFunc(strings.Split(task.CommandName, " ")),
|
||||
argmapper.Typed(task.CliArgs),
|
||||
argmapper.Typed(t),
|
||||
argmapper.Named("target", t),
|
||||
argmapper.Typed(task.CliArgs, t.jobInfo, t.dir),
|
||||
)
|
||||
|
||||
if err != nil || result == nil || result.(int64) != 0 {
|
||||
@ -169,13 +197,12 @@ func (t *Target) callDynamicFunc(
|
||||
defer t.ui.Status().Close()
|
||||
|
||||
args = append(args,
|
||||
argmapper.Typed(
|
||||
t.jobInfo,
|
||||
t.dir,
|
||||
t.UI,
|
||||
),
|
||||
argmapper.Typed(t),
|
||||
argmapper.Named("target", t),
|
||||
argmapper.Named("target_ui", t.UI),
|
||||
)
|
||||
|
||||
t.logger.Info("running dynamic call from target", "target", t)
|
||||
return t.project.callDynamicFunc(ctx, log, result, c, f, args...)
|
||||
}
|
||||
|
||||
@ -195,6 +222,12 @@ func (t *Target) doOperation(ctx context.Context, log hclog.Logger, op operation
|
||||
return doOperation(ctx, log, t, op)
|
||||
}
|
||||
|
||||
func (t *Target) Machine() core.Machine {
|
||||
return &Machine{
|
||||
Target: t,
|
||||
}
|
||||
}
|
||||
|
||||
type TargetOption func(*Target) error
|
||||
|
||||
func WithTargetName(name string) TargetOption {
|
||||
@ -272,4 +305,4 @@ func WithTargetRef(r *vagrant_plugin_sdk.Ref_Target) TargetOption {
|
||||
}
|
||||
}
|
||||
|
||||
var _ *Target = (*Target)(nil)
|
||||
var _ core.Target = (*Target)(nil)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user