Get machine state from go impl

This commit is contained in:
sophia 2022-04-26 13:54:54 -05:00
parent b4fbf76a33
commit 6dfca17d54
4 changed files with 15 additions and 20 deletions

View File

@ -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

View File

@ -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
}

View File

@ -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

View File

@ -110,7 +110,7 @@ module VagrantPlugins
def state_spec(*_)
funcspec(
args: [
SDK::Args::Target::Machine,
SDK::Args::Target
],
result: SDK::Args::Target::Machine::State,
)