github.com/sl1pm4t/terraform@v0.6.4-0.20170725213156-870617d22df3/plugin/discovery/meta.go (about)

     1  package discovery
     2  
     3  import (
     4  	"crypto/sha256"
     5  	"io"
     6  	"os"
     7  )
     8  
     9  // PluginMeta is metadata about a plugin, useful for launching the plugin
    10  // and for understanding which plugins are available.
    11  type PluginMeta struct {
    12  	// Name is the name of the plugin, e.g. as inferred from the plugin
    13  	// binary's filename, or by explicit configuration.
    14  	Name string
    15  
    16  	// Version is the semver version of the plugin, expressed as a string
    17  	// that might not be semver-valid.
    18  	Version VersionStr
    19  
    20  	// Path is the absolute path of the executable that can be launched
    21  	// to provide the RPC server for this plugin.
    22  	Path string
    23  }
    24  
    25  // SHA256 returns a SHA256 hash of the content of the referenced executable
    26  // file, or an error if the file's contents cannot be read.
    27  func (m PluginMeta) SHA256() ([]byte, error) {
    28  	f, err := os.Open(m.Path)
    29  	if err != nil {
    30  		return nil, err
    31  	}
    32  	defer f.Close()
    33  
    34  	h := sha256.New()
    35  	_, err = io.Copy(h, f)
    36  	if err != nil {
    37  		return nil, err
    38  	}
    39  
    40  	return h.Sum(nil), nil
    41  }