CP-18646: Make packer-build-xenserver support other-config for vm packing

Signed-off-by: kunm <kun.ma@citrix.com>
This commit is contained in:
kunm 2016-08-22 20:13:15 +08:00
parent c64f6973c4
commit b1f0013d8c
3 changed files with 37 additions and 5 deletions

View File

@ -22,9 +22,10 @@ type config struct {
common.PackerConfig `mapstructure:",squash"`
xscommon.CommonConfig `mapstructure:",squash"`
VMMemory uint `mapstructure:"vm_memory"`
DiskSize uint `mapstructure:"disk_size"`
CloneTemplate string `mapstructure:"clone_template"`
VMMemory uint `mapstructure:"vm_memory"`
DiskSize uint `mapstructure:"disk_size"`
CloneTemplate string `mapstructure:"clone_template"`
VMOtherConfig map[string]string `mapstructure:"vm_other_config"`
ISOChecksum string `mapstructure:"iso_checksum"`
ISOChecksumType string `mapstructure:"iso_checksum_type"`

View File

@ -56,18 +56,34 @@ func (self *stepCreateInstance) Run(state multistep.StateBag) multistep.StepActi
return multistep.ActionHalt
}
instance.SetPlatform(config.PlatformArgs)
err = instance.SetPlatform(config.PlatformArgs)
if err != nil {
ui.Error(fmt.Sprintf("Error setting VM platform: %s", err.Error()))
return multistep.ActionHalt
}
instance.SetDescription(config.VMDescription)
err = instance.SetDescription(config.VMDescription)
if err != nil {
ui.Error(fmt.Sprintf("Error setting VM description: %s", err.Error()))
return multistep.ActionHalt
}
if len(config.VMOtherConfig) != 0 {
vm_other_config, err := instance.GetOtherConfig()
if err != nil {
ui.Error(fmt.Sprintf("Error getting VM other-config: %s", err.Error()))
return multistep.ActionHalt
}
for key, value := range config.VMOtherConfig {
vm_other_config[key] = value
}
err = instance.SetOtherConfig(vm_other_config)
if err != nil {
ui.Error(fmt.Sprintf("Error setting VM other-config: %s", err.Error()))
return multistep.ActionHalt
}
}
// Create VDI for the instance
sr, err := config.GetSR(client)

View File

@ -521,6 +521,21 @@ func (self *VM) SetIsATemplate(is_a_template bool) (err error) {
return
}
func (self *VM) GetOtherConfig() (other_config map[string]string, err error) {
result := APIResult{}
other_config = make(map[string]string)
err = self.Client.APICall(&result, "VM.get_other_config", self.Ref)
if err != nil {
return
}
for key, value := range result.Value.(xmlrpc.Struct) {
if valueStr, ok := value.(string); ok {
other_config[key] = valueStr
}
}
return
}
func (self *VM) SetOtherConfig(other_config map[string]string) (err error) {
result := APIResult{}
other_config_rec := make(xmlrpc.Struct)