Merge 30400a41a0
into 6af6320f8a
This commit is contained in:
commit
c3578fe9c5
@ -52,6 +52,8 @@ type CommonConfig struct {
|
|||||||
RawSSHWaitTimeout string `mapstructure:"ssh_wait_timeout"`
|
RawSSHWaitTimeout string `mapstructure:"ssh_wait_timeout"`
|
||||||
SSHWaitTimeout time.Duration
|
SSHWaitTimeout time.Duration
|
||||||
|
|
||||||
|
DestroyVIFs bool `mapstructure:"destroy_vifs"`
|
||||||
|
|
||||||
OutputDir string `mapstructure:"output_directory"`
|
OutputDir string `mapstructure:"output_directory"`
|
||||||
Format string `mapstructure:"format"`
|
Format string `mapstructure:"format"`
|
||||||
KeepVM string `mapstructure:"keep_vm"`
|
KeepVM string `mapstructure:"keep_vm"`
|
||||||
|
@ -109,6 +109,7 @@ type FlatConfig struct {
|
|||||||
RawInstallTimeout *string `mapstructure:"install_timeout" cty:"install_timeout" hcl:"install_timeout"`
|
RawInstallTimeout *string `mapstructure:"install_timeout" cty:"install_timeout" hcl:"install_timeout"`
|
||||||
SourcePath *string `mapstructure:"source_path" cty:"source_path" hcl:"source_path"`
|
SourcePath *string `mapstructure:"source_path" cty:"source_path" hcl:"source_path"`
|
||||||
Firmware *string `mapstructure:"firmware" cty:"firmware" hcl:"firmware"`
|
Firmware *string `mapstructure:"firmware" cty:"firmware" hcl:"firmware"`
|
||||||
|
DestroyVIFs *bool `mapstructure:"destroy_vifs" cty:"destroy_vifs" hcl:"destroy_vifs"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// FlatMapstructure returns a new FlatConfig.
|
// FlatMapstructure returns a new FlatConfig.
|
||||||
@ -222,6 +223,7 @@ func (*FlatConfig) HCL2Spec() map[string]hcldec.Spec {
|
|||||||
"install_timeout": &hcldec.AttrSpec{Name: "install_timeout", Type: cty.String, Required: false},
|
"install_timeout": &hcldec.AttrSpec{Name: "install_timeout", Type: cty.String, Required: false},
|
||||||
"source_path": &hcldec.AttrSpec{Name: "source_path", Type: cty.String, Required: false},
|
"source_path": &hcldec.AttrSpec{Name: "source_path", Type: cty.String, Required: false},
|
||||||
"firmware": &hcldec.AttrSpec{Name: "firmware", Type: cty.String, Required: false},
|
"firmware": &hcldec.AttrSpec{Name: "firmware", Type: cty.String, Required: false},
|
||||||
|
"destroy_vifs": &hcldec.AttrSpec{Name: "destroy_vifs", Type: cty.Bool, Required: false},
|
||||||
}
|
}
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
50
builder/xenserver/common/step_destroy_vifs.go
Normal file
50
builder/xenserver/common/step_destroy_vifs.go
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/hashicorp/packer-plugin-sdk/multistep"
|
||||||
|
"github.com/hashicorp/packer-plugin-sdk/packer"
|
||||||
|
)
|
||||||
|
|
||||||
|
type StepDestroyVIFs struct{}
|
||||||
|
|
||||||
|
func (self *StepDestroyVIFs) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction {
|
||||||
|
c := state.Get("client").(*Connection)
|
||||||
|
config := state.Get("config").(Config)
|
||||||
|
ui := state.Get("ui").(packer.Ui)
|
||||||
|
|
||||||
|
if !config.DestroyVIFs {
|
||||||
|
log.Printf("Not destroying VIFs")
|
||||||
|
return multistep.ActionContinue
|
||||||
|
}
|
||||||
|
|
||||||
|
ui.Say("Step: Destroy VIFs")
|
||||||
|
|
||||||
|
uuid := state.Get("instance_uuid").(string)
|
||||||
|
instance, err := c.client.VM.GetByUUID(c.session, uuid)
|
||||||
|
if err != nil {
|
||||||
|
ui.Error(fmt.Sprintf("Unable to get VM from UUID '%s': %s", uuid, err.Error()))
|
||||||
|
return multistep.ActionHalt
|
||||||
|
}
|
||||||
|
|
||||||
|
vifs, err := c.client.VM.GetVIFs(c.session, instance)
|
||||||
|
if err != nil {
|
||||||
|
ui.Error(fmt.Sprintf("Error getting VIFs: %s", err.Error()))
|
||||||
|
return multistep.ActionHalt
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, vif := range vifs {
|
||||||
|
err = c.client.VIF.Destroy(c.session, vif)
|
||||||
|
if err != nil {
|
||||||
|
ui.Error(fmt.Sprintf("Error destroying VIF: %s", err.Error()))
|
||||||
|
return multistep.ActionHalt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return multistep.ActionContinue
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *StepDestroyVIFs) Cleanup(state multistep.StateBag) {}
|
@ -299,6 +299,7 @@ func (self *Builder) Run(ctx context.Context, ui packer.Ui, hook packer.Hook) (p
|
|||||||
&xscommon.StepDetachVdi{
|
&xscommon.StepDetachVdi{
|
||||||
VdiUuidKey: "floppy_vdi_uuid",
|
VdiUuidKey: "floppy_vdi_uuid",
|
||||||
},
|
},
|
||||||
|
new(xscommon.StepDestroyVIFs),
|
||||||
new(xscommon.StepExport),
|
new(xscommon.StepExport),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,6 +185,7 @@ func (self *Builder) Run(ctx context.Context, ui packer.Ui, hook packer.Hook) (p
|
|||||||
&xscommon.StepDetachVdi{
|
&xscommon.StepDetachVdi{
|
||||||
VdiUuidKey: "floppy_vdi_uuid",
|
VdiUuidKey: "floppy_vdi_uuid",
|
||||||
},
|
},
|
||||||
|
new(xscommon.StepDestroyVIFs),
|
||||||
new(xscommon.StepExport),
|
new(xscommon.StepExport),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,6 +86,10 @@ each category, the available options are alphabetized and described.
|
|||||||
run `xe template-list`. Setting the correct value hints to XenServer how to
|
run `xe template-list`. Setting the correct value hints to XenServer how to
|
||||||
optimize the virtual hardware to work best with that operating system.
|
optimize the virtual hardware to work best with that operating system.
|
||||||
|
|
||||||
|
* `destroy_vifs` (boolean) - Whether to destroy VIFs on the VM prior to
|
||||||
|
exporting. Removing them may make the image more generic and reusable.
|
||||||
|
Default is `false`.
|
||||||
|
|
||||||
* `disk_size` (integer) - The size, in megabytes, of the hard disk to create
|
* `disk_size` (integer) - The size, in megabytes, of the hard disk to create
|
||||||
for the VM. By default, this is 40000 (about 40 GB).
|
for the VM. By default, this is 40000 (about 40 GB).
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user