90a57c411f
In order that something consuming an artifact can have access to extra builder specific data add the State method which allows the caller to ask for arbitary values by name.
89 lines
1.9 KiB
Go
89 lines
1.9 KiB
Go
package rpc
|
|
|
|
import (
|
|
"github.com/mitchellh/packer/packer"
|
|
"net/rpc"
|
|
)
|
|
|
|
// An implementation of packer.Artifact where the artifact is actually
|
|
// available over an RPC connection.
|
|
type artifact struct {
|
|
client *rpc.Client
|
|
endpoint string
|
|
}
|
|
|
|
// ArtifactServer wraps a packer.Artifact implementation and makes it
|
|
// exportable as part of a Golang RPC server.
|
|
type ArtifactServer struct {
|
|
artifact packer.Artifact
|
|
}
|
|
|
|
func (a *artifact) BuilderId() (result string) {
|
|
a.client.Call(a.endpoint+".BuilderId", new(interface{}), &result)
|
|
return
|
|
}
|
|
|
|
func (a *artifact) Files() (result []string) {
|
|
a.client.Call(a.endpoint+".Files", new(interface{}), &result)
|
|
return
|
|
}
|
|
|
|
func (a *artifact) Id() (result string) {
|
|
a.client.Call(a.endpoint+".Id", new(interface{}), &result)
|
|
return
|
|
}
|
|
|
|
func (a *artifact) String() (result string) {
|
|
a.client.Call(a.endpoint+".String", new(interface{}), &result)
|
|
return
|
|
}
|
|
|
|
func (a *artifact) State(name string) (result interface{}) {
|
|
a.client.Call(a.endpoint+".State", name, &result)
|
|
return
|
|
}
|
|
|
|
func (a *artifact) Destroy() error {
|
|
var result error
|
|
if err := a.client.Call(a.endpoint+".Destroy", new(interface{}), &result); err != nil {
|
|
return err
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func (s *ArtifactServer) BuilderId(args *interface{}, reply *string) error {
|
|
*reply = s.artifact.BuilderId()
|
|
return nil
|
|
}
|
|
|
|
func (s *ArtifactServer) Files(args *interface{}, reply *[]string) error {
|
|
*reply = s.artifact.Files()
|
|
return nil
|
|
}
|
|
|
|
func (s *ArtifactServer) Id(args *interface{}, reply *string) error {
|
|
*reply = s.artifact.Id()
|
|
return nil
|
|
}
|
|
|
|
func (s *ArtifactServer) String(args *interface{}, reply *string) error {
|
|
*reply = s.artifact.String()
|
|
return nil
|
|
}
|
|
|
|
func (s *ArtifactServer) State(name string, reply *interface{}) error {
|
|
*reply = s.artifact.State(name)
|
|
return nil
|
|
}
|
|
|
|
func (s *ArtifactServer) Destroy(args *interface{}, reply *error) error {
|
|
err := s.artifact.Destroy()
|
|
if err != nil {
|
|
err = NewBasicError(err)
|
|
}
|
|
|
|
*reply = err
|
|
return nil
|
|
}
|