diff --git a/internal/core/machine.go b/internal/core/machine.go index 5766e9a08..a00eac47e 100644 --- a/internal/core/machine.go +++ b/internal/core/machine.go @@ -187,8 +187,11 @@ func (m *Machine) ConnectionInfo() (info *core.ConnectionInfo, err error) { // MachineState implements core.Machine func (m *Machine) MachineState() (state *core.MachineState, err error) { - var result core.MachineState - return &result, mapstructure.Decode(m.machine.State, &result) + p, err := m.Provider() + if err != nil { + return nil, err + } + return p.State() } // SetMachineState implements core.Machine diff --git a/internal/core/target.go b/internal/core/target.go index 995f1597c..280d806ac 100644 --- a/internal/core/target.go +++ b/internal/core/target.go @@ -79,6 +79,14 @@ func (t *Target) SetName(value string) (err error) { // Provider implements core.Target func (t *Target) Provider() (p core.Provider, err error) { + defer func() { + if p != nil { + err = seedPlugin(p, t) + if err == nil { + t.cache.Register("provider", p) + } + } + }() i := t.cache.Get("provider") if i != nil { p = i.(core.Provider) @@ -95,15 +103,6 @@ func (t *Target) Provider() (p core.Provider, err error) { } p = provider.Value.(core.Provider) - if err = seedPlugin(p, t); err != nil { - t.logger.Error("failed to seed provider plugin", - "error", err, - ) - - return - } - t.cache.Register("provider", p) - return } diff --git a/lib/vagrant/machine/remote.rb b/lib/vagrant/machine/remote.rb index 4dafa2816..041b4ecb2 100644 --- a/lib/vagrant/machine/remote.rb +++ b/lib/vagrant/machine/remote.rb @@ -136,14 +136,7 @@ module Vagrant end def state - # TODO: this should be using the vagrant go core (client.machine_state). - # Since there is currently no way to access providers in the go machine - # leave this here for now. Once the provider has been ported, this should - # be updated. - s = @provider.state - raise Errors::MachineStateInvalid if !s.is_a?(MachineState) - client.set_machine_state(s) unless s.nil? - return s + client.machine_state end def ssh_info diff --git a/plugins/commands/serve/service/provider_service.rb b/plugins/commands/serve/service/provider_service.rb index 6f712806e..d65661afc 100644 --- a/plugins/commands/serve/service/provider_service.rb +++ b/plugins/commands/serve/service/provider_service.rb @@ -110,7 +110,7 @@ module VagrantPlugins def state_spec(*_) funcspec( args: [ - SDK::Args::Target::Machine, + SDK::Args::Target ], result: SDK::Args::Target::Machine::State, )