2016-05-26 23:21:55 -04:00
package lxd
import (
"fmt"
2017-09-05 17:09:15 -04:00
"github.com/hashicorp/packer/common"
"github.com/hashicorp/packer/helper/config"
"github.com/hashicorp/packer/packer"
"github.com/hashicorp/packer/template/interpolate"
2016-05-26 23:21:55 -04:00
"github.com/mitchellh/mapstructure"
"time"
)
type Config struct {
common . PackerConfig ` mapstructure:",squash" `
2017-10-18 00:57:13 -04:00
OutputImage string ` mapstructure:"output_image" `
ContainerName string ` mapstructure:"container_name" `
CommandWrapper string ` mapstructure:"command_wrapper" `
Image string ` mapstructure:"image" `
PublishProperties map [ string ] string ` mapstructure:"publish_properties" `
2016-05-31 19:53:50 -04:00
InitTimeout time . Duration
2016-05-26 23:21:55 -04:00
ctx interpolate . Context
}
func NewConfig ( raws ... interface { } ) ( * Config , error ) {
var c Config
var md mapstructure . Metadata
err := config . Decode ( & c , & config . DecodeOpts {
Metadata : & md ,
Interpolate : true ,
} , raws ... )
if err != nil {
return nil , err
}
// Accumulate any errors
var errs * packer . MultiError
if c . ContainerName == "" {
c . ContainerName = fmt . Sprintf ( "packer-%s" , c . PackerBuildName )
}
2016-05-30 19:13:59 -04:00
if c . OutputImage == "" {
c . OutputImage = c . ContainerName
}
2016-05-26 23:21:55 -04:00
if c . CommandWrapper == "" {
c . CommandWrapper = "{{.Command}}"
}
if c . Image == "" {
2016-05-31 19:53:50 -04:00
errs = packer . MultiErrorAppend ( errs , fmt . Errorf ( "`image` is a required parameter for LXD. Please specify an image by alias or fingerprint. e.g. `ubuntu-daily:x`" ) )
2016-05-26 23:21:55 -04:00
}
if errs != nil && len ( errs . Errors ) > 0 {
return nil , errs
}
return & c , nil
}