Replace machine usage with target. Update proto ref location to plugin sdk
This commit is contained in:
parent
c547fba079
commit
3f86194f60
@ -8,6 +8,7 @@ import (
|
||||
"github.com/hashicorp/go-plugin"
|
||||
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/helper/paths"
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/terminal"
|
||||
configpkg "github.com/hashicorp/vagrant/internal/config"
|
||||
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
|
||||
@ -166,8 +167,8 @@ func (b *Basis) LoadProject(p *vagrant_server.Project) (*Project, error) {
|
||||
return b.Project, nil
|
||||
}
|
||||
|
||||
func (b *Basis) Ref() *vagrant_server.Ref_Basis {
|
||||
return &vagrant_server.Ref_Basis{
|
||||
func (b *Basis) Ref() *vagrant_plugin_sdk.Ref_Basis {
|
||||
return &vagrant_plugin_sdk.Ref_Basis{
|
||||
Name: b.basis.Name,
|
||||
ResourceId: b.basis.ResourceId,
|
||||
}
|
||||
|
||||
@ -5,40 +5,41 @@ import (
|
||||
|
||||
"github.com/hashicorp/go-hclog"
|
||||
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/terminal"
|
||||
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
|
||||
)
|
||||
|
||||
type Machine struct {
|
||||
type Target struct {
|
||||
ui terminal.UI
|
||||
|
||||
project *Project
|
||||
machine *vagrant_server.Machine
|
||||
target *vagrant_server.Target
|
||||
logger hclog.Logger
|
||||
}
|
||||
|
||||
func (m *Machine) UI() terminal.UI {
|
||||
func (m *Target) UI() terminal.UI {
|
||||
return m.ui
|
||||
}
|
||||
|
||||
func (m *Machine) Ref() *vagrant_server.Ref_Machine {
|
||||
return &vagrant_server.Ref_Machine{
|
||||
ResourceId: m.machine.ResourceId,
|
||||
Name: m.machine.Name,
|
||||
func (m *Target) Ref() *vagrant_plugin_sdk.Ref_Target {
|
||||
return &vagrant_plugin_sdk.Ref_Target{
|
||||
ResourceId: m.target.ResourceId,
|
||||
Name: m.target.Name,
|
||||
Project: m.project.Ref(),
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Machine) job() *vagrant_server.Job {
|
||||
func (m *Target) job() *vagrant_server.Job {
|
||||
job := m.project.job()
|
||||
job.Machine = m.Ref()
|
||||
job.Target = m.Ref()
|
||||
return job
|
||||
}
|
||||
|
||||
func (m *Machine) Close() error {
|
||||
func (m *Target) Close() error {
|
||||
return m.project.Close()
|
||||
}
|
||||
|
||||
func (m *Machine) doJob(ctx context.Context, job *vagrant_server.Job) (*vagrant_server.Job_Result, error) {
|
||||
func (m *Target) doJob(ctx context.Context, job *vagrant_server.Job) (*vagrant_server.Job_Result, error) {
|
||||
return m.project.doJob(ctx, job, m.ui)
|
||||
}
|
||||
|
||||
@ -77,7 +77,7 @@ func (p *Project) Task(ctx context.Context, op *vagrant_server.Job_RunOp) (*vagr
|
||||
return result.Run, err
|
||||
}
|
||||
|
||||
func (m *Machine) Task(ctx context.Context, op *vagrant_server.Job_RunOp) (*vagrant_server.Job_RunResult, error) {
|
||||
func (m *Target) Task(ctx context.Context, op *vagrant_server.Job_RunOp) (*vagrant_server.Job_RunResult, error) {
|
||||
if op == nil {
|
||||
op = &vagrant_server.Job_RunOp{}
|
||||
}
|
||||
|
||||
@ -20,73 +20,74 @@ import (
|
||||
type Project struct {
|
||||
ui terminal.UI
|
||||
|
||||
Machines []*Machine
|
||||
Targets []*Target
|
||||
|
||||
basis *Basis
|
||||
project *vagrant_server.Project
|
||||
logger hclog.Logger
|
||||
}
|
||||
|
||||
func (p *Project) LoadMachine(m *vagrant_server.Machine) (*Machine, error) {
|
||||
machine, err := p.GetMachine(m.Name)
|
||||
func (p *Project) LoadTarget(t *vagrant_server.Target) (*Target, error) {
|
||||
target, err := p.GetTarget(t.Name)
|
||||
if err == nil {
|
||||
return machine, nil
|
||||
return target, nil
|
||||
}
|
||||
|
||||
// Ensure the machine is set to this project
|
||||
m.Project = p.Ref()
|
||||
t.Project = p.Ref()
|
||||
|
||||
result, err := p.basis.client.FindMachine(
|
||||
result, err := p.basis.client.FindTarget(
|
||||
context.Background(),
|
||||
&vagrant_server.FindMachineRequest{
|
||||
Machine: m,
|
||||
&vagrant_server.FindTargetRequest{
|
||||
Target: t,
|
||||
},
|
||||
)
|
||||
if err == nil && result.Found {
|
||||
machine := &Machine{
|
||||
target := &Target{
|
||||
ui: p.UI(),
|
||||
project: p,
|
||||
machine: result.Machine,
|
||||
logger: p.logger.Named("machine"),
|
||||
target: result.Target,
|
||||
logger: p.logger.Named("target"),
|
||||
}
|
||||
p.Machines = append(p.Machines, machine)
|
||||
p.Targets = append(p.Targets, target)
|
||||
|
||||
return machine, nil
|
||||
return target, nil
|
||||
}
|
||||
|
||||
p.logger.Trace("failed to locate existing machine", "machine", m,
|
||||
p.logger.Trace("failed to locate existing target", "target", t,
|
||||
"result", result, "error", err)
|
||||
|
||||
// TODO: set machine box from vagrant file
|
||||
|
||||
if m.Datadir == nil {
|
||||
m.Datadir = p.GetDataDir()
|
||||
if t.Datadir == nil {
|
||||
t.Datadir = p.GetDataDir()
|
||||
}
|
||||
|
||||
if m.Provider == "" {
|
||||
m.Provider, err = p.GetDefaultProvider([]string{}, false, true)
|
||||
}
|
||||
// TODO: this is specialized
|
||||
// if t.Provider == "" {
|
||||
// t.Provider, err = p.GetDefaultProvider([]string{}, false, true)
|
||||
// }
|
||||
|
||||
uresult, err := p.basis.client.UpsertMachine(
|
||||
uresult, err := p.basis.client.UpsertTarget(
|
||||
context.Background(),
|
||||
&vagrant_server.UpsertMachineRequest{
|
||||
Machine: m,
|
||||
&vagrant_server.UpsertTargetRequest{
|
||||
Target: t,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
machine = &Machine{
|
||||
target = &Target{
|
||||
ui: p.UI(),
|
||||
project: p,
|
||||
machine: uresult.Machine,
|
||||
logger: p.logger.Named("machine"),
|
||||
target: uresult.Target,
|
||||
logger: p.logger.Named("target"),
|
||||
}
|
||||
|
||||
p.Machines = append(p.Machines, machine)
|
||||
p.Targets = append(p.Targets, target)
|
||||
|
||||
return machine, nil
|
||||
return target, nil
|
||||
}
|
||||
|
||||
// TODO: Determine default provider by implementing algorithm from
|
||||
@ -103,7 +104,7 @@ func (p *Project) GetDefaultProvider(exclude []string, forceDefault bool, checkU
|
||||
return "virtualbox", nil
|
||||
}
|
||||
|
||||
func (p *Project) GetDataDir() *vagrant_plugin_sdk.Args_DataDir_Machine {
|
||||
func (p *Project) GetDataDir() *vagrant_plugin_sdk.Args_DataDir_Target {
|
||||
// TODO: probably need to get datadir from the projet + basis
|
||||
|
||||
root, _ := paths.VagrantHome()
|
||||
@ -111,7 +112,7 @@ func (p *Project) GetDataDir() *vagrant_plugin_sdk.Args_DataDir_Machine {
|
||||
dataDir := root.Join("data")
|
||||
tmpDir := root.Join("tmp")
|
||||
|
||||
return &vagrant_plugin_sdk.Args_DataDir_Machine{
|
||||
return &vagrant_plugin_sdk.Args_DataDir_Target{
|
||||
CacheDir: cacheDir.String(),
|
||||
DataDir: dataDir.String(),
|
||||
RootDir: root.String(),
|
||||
@ -119,13 +120,13 @@ func (p *Project) GetDataDir() *vagrant_plugin_sdk.Args_DataDir_Machine {
|
||||
}
|
||||
}
|
||||
|
||||
func (p *Project) GetMachine(name string) (m *Machine, err error) {
|
||||
for _, m = range p.Machines {
|
||||
if m.Ref().Name == name {
|
||||
func (p *Project) GetTarget(name string) (t *Target, err error) {
|
||||
for _, t = range p.Targets {
|
||||
if t.Ref().Name == name {
|
||||
return
|
||||
}
|
||||
}
|
||||
return nil, errors.New("failed to locate requested machine")
|
||||
return nil, errors.New("failed to locate requested target")
|
||||
}
|
||||
|
||||
func (p *Project) UI() terminal.UI {
|
||||
@ -137,8 +138,8 @@ func (p *Project) Close() error {
|
||||
}
|
||||
|
||||
// Ref returns the raw Vagrant server API client.
|
||||
func (p *Project) Ref() *vagrant_server.Ref_Project {
|
||||
return &vagrant_server.Ref_Project{
|
||||
func (p *Project) Ref() *vagrant_plugin_sdk.Ref_Project {
|
||||
return &vagrant_plugin_sdk.Ref_Project{
|
||||
Name: p.project.Name,
|
||||
ResourceId: p.project.ResourceId,
|
||||
Basis: p.basis.Ref(),
|
||||
|
||||
@ -13,7 +13,6 @@ import (
|
||||
"github.com/hashicorp/go-plugin"
|
||||
"google.golang.org/grpc"
|
||||
|
||||
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
|
||||
"github.com/hashicorp/vagrant/internal/protocolversion"
|
||||
"github.com/hashicorp/vagrant/internal/server"
|
||||
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user