Allow post-processors in the core configuration

This commit is contained in:
Mitchell Hashimoto 2013-06-18 11:00:31 -07:00
parent e2534fe88d
commit ca7e8dbb74
3 changed files with 30 additions and 3 deletions

View File

@ -40,9 +40,10 @@ type config struct {
PluginMinPort uint
PluginMaxPort uint
Builders map[string]string
Commands map[string]string
Provisioners map[string]string
Builders map[string]string
Commands map[string]string
PostProcessors map[string]string `json:"post-processors"`
Provisioners map[string]string
}
// Decodes configuration in JSON format from the given io.Reader into
@ -94,6 +95,19 @@ func (c *config) LoadHook(name string) (packer.Hook, error) {
return c.pluginClient(name).Hook()
}
// This is a proper packer.PostProcessorFunc that can be used to load
// packer.PostProcessor implementations from defined plugins.
func (c *config) LoadPostProcessor(name string) (packer.PostProcessor, error) {
log.Printf("Loading post-processor: %s", name)
bin, ok := c.PostProcessors[name]
if !ok {
log.Printf("Post-processor not found: %s", name)
return nil, nil
}
return c.pluginClient(bin).PostProcessor()
}
// This is a proper packer.ProvisionerFunc that can be used to load
// packer.Provisioner implementations from defined plugins.
func (c *config) LoadProvisioner(name string) (packer.Provisioner, error) {

View File

@ -53,6 +53,7 @@ func main() {
envConfig.Components.Builder = config.LoadBuilder
envConfig.Components.Command = config.LoadCommand
envConfig.Components.Hook = config.LoadHook
envConfig.Components.PostProcessor = config.LoadPostProcessor
envConfig.Components.Provisioner = config.LoadProvisioner
env, err := packer.NewEnvironment(envConfig)

View File

@ -140,6 +140,18 @@ func (c *Client) Hook() (packer.Hook, error) {
return &cmdHook{packrpc.Hook(client), c}, nil
}
// Returns a post-processor implementation that is communicating over
// this client. If the client hasn't been started, this will start it.
func (c *Client) PostProcessor() (packer.PostProcessor, error) {
_, err := c.rpcClient()
if err != nil {
return nil, err
}
// TODO
return nil, nil
}
// Returns a provisioner implementation that is communicating over this
// client. If the client hasn't been started, this will start it.
func (c *Client) Provisioner() (packer.Provisioner, error) {