mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-28 01:41:48 -06:00
b40a4fb741
This is part of a general effort to move all of Terraform's non-library package surface under internal in order to reinforce that these are for internal use within Terraform only. If you were previously importing packages under this prefix into an external codebase, you could pin to an earlier release tag as an interim solution until you've make a plan to achieve the same functionality some other way.
42 lines
983 B
Go
42 lines
983 B
Go
package discovery
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
// PluginMeta is metadata about a plugin, useful for launching the plugin
|
|
// and for understanding which plugins are available.
|
|
type PluginMeta struct {
|
|
// Name is the name of the plugin, e.g. as inferred from the plugin
|
|
// binary's filename, or by explicit configuration.
|
|
Name string
|
|
|
|
// Version is the semver version of the plugin, expressed as a string
|
|
// that might not be semver-valid.
|
|
Version VersionStr
|
|
|
|
// Path is the absolute path of the executable that can be launched
|
|
// to provide the RPC server for this plugin.
|
|
Path string
|
|
}
|
|
|
|
// SHA256 returns a SHA256 hash of the content of the referenced executable
|
|
// file, or an error if the file's contents cannot be read.
|
|
func (m PluginMeta) SHA256() ([]byte, error) {
|
|
f, err := os.Open(m.Path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer f.Close()
|
|
|
|
h := sha256.New()
|
|
_, err = io.Copy(h, f)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return h.Sum(nil), nil
|
|
}
|