82 lines
1.8 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package guest
import (
"errors"
"github.com/hashicorp/vagrant-plugin-sdk/component"
plugincore "github.com/hashicorp/vagrant-plugin-sdk/core"
"github.com/hashicorp/vagrant/builtin/otherplugin/guest/cap"
)
type GuestConfig struct {
}
// AlwaysTrueGuest is a Guest implementation for myplugin.
type AlwaysTrueGuest struct {
config GuestConfig
}
func (c *AlwaysTrueGuest) Seed(args ...interface{}) error {
return nil
}
func (c *AlwaysTrueGuest) Seeds() ([]interface{}, error) {
return nil, nil
}
// DetectFunc implements component.Guest
func (h *AlwaysTrueGuest) GuestDetectFunc() interface{} {
return h.Detect
}
func (h *AlwaysTrueGuest) Detect(t plugincore.Target) bool {
m, err := t.Specialize((*plugincore.Machine)(nil))
if err != nil {
return false
}
machine := m.(plugincore.Machine)
machine.ConnectionInfo()
// TODO: need a communicator to connect to guest
return true
}
// ParentsFunc implements component.Guest
func (h *AlwaysTrueGuest) ParentFunc() interface{} {
return h.Parent
}
func (h *AlwaysTrueGuest) Parent() string {
return ""
}
// HasCapabilityFunc implements component.Guest
func (h *AlwaysTrueGuest) HasCapabilityFunc() interface{} {
return h.CheckCapability
}
func (h *AlwaysTrueGuest) CheckCapability(n *component.NamedCapability) bool {
if n.Capability == "hello" {
return true
}
return false
}
// CapabilityFunc implements component.Guest
func (h *AlwaysTrueGuest) CapabilityFunc(name string) interface{} {
if name == "hello" {
return h.WriteHelloCap
}
return errors.New("invalid capability requested")
}
func (h *AlwaysTrueGuest) WriteHelloCap(m plugincore.Machine) error {
return cap.WriteHello(m)
}
var (
_ component.Guest = (*AlwaysTrueGuest)(nil)
)