Documentation ¶
Overview ¶
Code generated by "mapstructure-to-hcl2 -type Config"; DO NOT EDIT.
Index ¶
Constants ¶
View Source
const BuilderId = "transcend.qemu"
View Source
const KeyLeftShift uint32 = 0xFFE1
Variables ¶
This section is empty.
Functions ¶
func VNCPassword ¶ added in v1.4.3
func VNCPassword() string
Types ¶
type Artifact ¶
type Artifact struct {
// contains filtered or unexported fields
}
Artifact is the result of running the Qemu builder, namely a set of files associated with the resulting machine.
type Builder ¶
type Builder struct {
// contains filtered or unexported fields
}
func (*Builder) ConfigSpec ¶ added in v1.5.0
func (b *Builder) ConfigSpec() hcldec.ObjectSpec
type Config ¶ added in v0.8.0
type Config struct { common.PackerConfig `mapstructure:",squash"` common.HTTPConfig `mapstructure:",squash"` common.ISOConfig `mapstructure:",squash"` bootcommand.VNCConfig `mapstructure:",squash"` shutdowncommand.ShutdownConfig `mapstructure:",squash"` Comm communicator.Config `mapstructure:",squash"` common.FloppyConfig `mapstructure:",squash"` // Use iso from provided url. Qemu must support // curl block device. This defaults to `false`. ISOSkipCache bool `mapstructure:"iso_skip_cache" required:"false"` // The accelerator type to use when running the VM. // This may be `none`, `kvm`, `tcg`, `hax`, `hvf`, `whpx`, or `xen`. The appropriate // software must have already been installed on your build machine to use the // accelerator you specified. When no accelerator is specified, Packer will try // to use `kvm` if it is available but will default to `tcg` otherwise. // // -> The `hax` accelerator has issues attaching CDROM ISOs. This is an // upstream issue which can be tracked // [here](https://github.com/intel/haxm/issues/20). // // -> The `hvf` and `whpx` accelerator are new and experimental as of // [QEMU 2.12.0](https://wiki.qemu.org/ChangeLog/2.12#Host_support). // You may encounter issues unrelated to Packer when using these. You may need to // add [ "-global", "virtio-pci.disable-modern=on" ] to `qemuargs` depending on the // guest operating system. // // -> For `whpx`, note that [Stefan Weil's QEMU for Windows distribution](https://qemu.weilnetz.de/w64/) // does not include WHPX support and users may need to compile or source a // build of QEMU for Windows themselves with WHPX support. Accelerator string `mapstructure:"accelerator" required:"false"` // Additional disks to create. Uses `vm_name` as the disk name template and // appends `-#` where `#` is the position in the array. `#` starts at 1 since 0 // is the default disk. Each string represents the disk image size in bytes. // Optional suffixes 'k' or 'K' (kilobyte, 1024), 'M' (megabyte, 1024k), 'G' // (gigabyte, 1024M), 'T' (terabyte, 1024G), 'P' (petabyte, 1024T) and 'E' // (exabyte, 1024P) are supported. 'b' is ignored. Per qemu-img documentation. // Each additional disk uses the same disk parameters as the default disk. // Unset by default. AdditionalDiskSize []string `mapstructure:"disk_additional_size" required:"false"` // The number of cpus to use when building the VM. // The default is `1` CPU. CpuCount int `mapstructure:"cpus" required:"false"` // The interface to use for the disk. Allowed values include any of `ide`, // `scsi`, `virtio` or `virtio-scsi`^\*. Note also that any boot commands // or kickstart type scripts must have proper adjustments for resulting // device names. The Qemu builder uses `virtio` by default. // // ^\* Please be aware that use of the `scsi` disk interface has been // disabled by Red Hat due to a bug described // [here](https://bugzilla.redhat.com/show_bug.cgi?id=1019220). If you are // running Qemu on RHEL or a RHEL variant such as CentOS, you *must* choose // one of the other listed interfaces. Using the `scsi` interface under // these circumstances will cause the build to fail. DiskInterface string `mapstructure:"disk_interface" required:"false"` // The size in bytes of the hard disk of the VM. Suffix with the first // letter of common byte types. Use "k" or "K" for kilobytes, "M" for // megabytes, G for gigabytes, and T for terabytes. If no value is provided // for disk_size, Packer uses a default of `40960M` (40 GB). If a disk_size // number is provided with no units, Packer will default to Megabytes. DiskSize string `mapstructure:"disk_size" required:"false"` // The cache mode to use for disk. Allowed values include any of // `writethrough`, `writeback`, `none`, `unsafe` or `directsync`. By // default, this is set to `writeback`. DiskCache string `mapstructure:"disk_cache" required:"false"` // The discard mode to use for disk. Allowed values // include any of unmap or ignore. By default, this is set to ignore. DiskDiscard string `mapstructure:"disk_discard" required:"false"` // The detect-zeroes mode to use for disk. // Allowed values include any of unmap, on or off. Defaults to off. // When the value is "off" we don't set the flag in the qemu command, so that // Packer still works with old versions of QEMU that don't have this option. DetectZeroes string `mapstructure:"disk_detect_zeroes" required:"false"` // Packer compacts the QCOW2 image using // qemu-img convert. Set this option to true to disable compacting. // Defaults to false. SkipCompaction bool `mapstructure:"skip_compaction" required:"false"` // Apply compression to the QCOW2 disk file // using qemu-img convert. Defaults to false. DiskCompression bool `mapstructure:"disk_compression" required:"false"` // Either `qcow2` or `raw`, this specifies the output format of the virtual // machine image. This defaults to `qcow2`. Format string `mapstructure:"format" required:"false"` // Packer defaults to building QEMU virtual machines by // launching a GUI that shows the console of the machine being built. When this // value is set to `true`, the machine will start without a console. // // You can still see the console if you make a note of the VNC display // number chosen, and then connect using `vncviewer -Shared <host>:<display>` Headless bool `mapstructure:"headless" required:"false"` // Packer defaults to building from an ISO file, this parameter controls // whether the ISO URL supplied is actually a bootable QEMU image. When // this value is set to `true`, the machine will either clone the source or // use it as a backing file (if `use_backing_file` is `true`); then, it // will resize the image according to `disk_size` and boot it. DiskImage bool `mapstructure:"disk_image" required:"false"` // Only applicable when disk_image is true // and format is qcow2, set this option to true to create a new QCOW2 // file that uses the file located at iso_url as a backing file. The new file // will only contain blocks that have changed compared to the backing file, so // enabling this option can significantly reduce disk usage. UseBackingFile bool `mapstructure:"use_backing_file" required:"false"` // The type of machine emulation to use. Run your qemu binary with the // flags `-machine help` to list available types for your system. This // defaults to `pc`. MachineType string `mapstructure:"machine_type" required:"false"` // The amount of memory to use when building the VM // in megabytes. This defaults to 512 megabytes. MemorySize int `mapstructure:"memory" required:"false"` // The driver to use for the network interface. Allowed values `ne2k_pci`, // `i82551`, `i82557b`, `i82559er`, `rtl8139`, `e1000`, `pcnet`, `virtio`, // `virtio-net`, `virtio-net-pci`, `usb-net`, `i82559a`, `i82559b`, // `i82559c`, `i82550`, `i82562`, `i82557a`, `i82557c`, `i82801`, // `vmxnet3`, `i82558a` or `i82558b`. The Qemu builder uses `virtio-net` by // default. NetDevice string `mapstructure:"net_device" required:"false"` // This is the path to the directory where the // resulting virtual machine will be created. This may be relative or absolute. // If relative, the path is relative to the working directory when packer // is executed. This directory must not exist or be empty prior to running // the builder. By default this is output-BUILDNAME where "BUILDNAME" is the // name of the build. OutputDir string `mapstructure:"output_directory" required:"false"` // Allows complete control over the qemu command line (though not, at this // time, qemu-img). Each array of strings makes up a command line switch // that overrides matching default switch/value pairs. Any value specified // as an empty string is ignored. All values after the switch are // concatenated with no separator. // // ~> **Warning:** The qemu command line allows extreme flexibility, so // beware of conflicting arguments causing failures of your run. For // instance, using --no-acpi could break the ability to send power signal // type commands (e.g., shutdown -P now) to the virtual machine, thus // preventing proper shutdown. To see the defaults, look in the packer.log // file and search for the qemu-system-x86 command. The arguments are all // printed for review. // // The following shows a sample usage: // // “` json { // "qemuargs": [ // [ "-m", "1024M" ], // [ "--no-acpi", "" ], // [ // "-netdev", // "user,id=mynet0,", // "hostfwd=hostip:hostport-guestip:guestport", // "" // ], // [ "-device", "virtio-net,netdev=mynet0" ] // ] // } // “` // // would produce the following (not including other defaults supplied by // the builder and not otherwise conflicting with the qemuargs): // // “` text qemu-system-x86 -m 1024m --no-acpi -netdev // user,id=mynet0,hostfwd=hostip:hostport-guestip:guestport -device // virtio-net,netdev=mynet0" “` // // ~> **Windows Users:** [QEMU for Windows](https://qemu.weilnetz.de/) // builds are available though an environmental variable does need to be // set for QEMU for Windows to redirect stdout to the console instead of // stdout.txt. // // The following shows the environment variable that needs to be set for // Windows QEMU support: // // “` text setx SDL_STDIO_REDIRECT=0 “` // // You can also use the `SSHHostPort` template variable to produce a packer // template that can be invoked by `make` in parallel: // // “` json { // "qemuargs": [ // [ "-netdev", "user,hostfwd=tcp::{{ .SSHHostPort }}-:22,id=forward"], // [ "-device", "virtio-net,netdev=forward,id=net0"] // ] // } “` // // `make -j 3 my-awesome-packer-templates` spawns 3 packer processes, each // of which will bind to their own SSH port as determined by each process. // This will also work with WinRM, just change the port forward in // `qemuargs` to map to WinRM's default port of `5985` or whatever value // you have the service set to listen on. QemuArgs [][]string `mapstructure:"qemuargs" required:"false"` // The name of the Qemu binary to look for. This // defaults to qemu-system-x86_64, but may need to be changed for // some platforms. For example qemu-kvm, or qemu-system-i386 may be a // better choice for some systems. QemuBinary string `mapstructure:"qemu_binary" required:"false"` // Enable QMP socket. Location is specified by `qmp_socket_path`. Defaults // to false. QMPEnable bool `mapstructure:"qmp_enable" required:"false"` // QMP Socket Path when `qmp_enable` is true. Defaults to // `output_directory`/`vm_name`.monitor. QMPSocketPath string `mapstructure:"qmp_socket_path" required:"false"` // The minimum and maximum port to use for the SSH port on the host machine // which is forwarded to the SSH port on the guest machine. Because Packer // often runs in parallel, Packer will choose a randomly available port in // this range to use as the host port. By default this is 2222 to 4444. SSHHostPortMin int `mapstructure:"ssh_host_port_min" required:"false"` SSHHostPortMax int `mapstructure:"ssh_host_port_max" required:"false"` // If true, do not pass a -display option // to qemu, allowing it to choose the default. This may be needed when running // under macOS, and getting errors about sdl not being available. UseDefaultDisplay bool `mapstructure:"use_default_display" required:"false"` // What QEMU -display option to use. Defaults to gtk, use none to not pass the // -display option allowing QEMU to choose the default. This may be needed when // running under macOS, and getting errors about sdl not being available. Display string `mapstructure:"display" required:"false"` // The IP address that should be // binded to for VNC. By default packer will use 127.0.0.1 for this. If you // wish to bind to all interfaces use 0.0.0.0. VNCBindAddress string `mapstructure:"vnc_bind_address" required:"false"` // Whether or not to set a password on the VNC server. This option // automatically enables the QMP socket. See `qmp_socket_path`. Defaults to // `false`. VNCUsePassword bool `mapstructure:"vnc_use_password" required:"false"` // The minimum and maximum port // to use for VNC access to the virtual machine. The builder uses VNC to type // the initial boot_command. Because Packer generally runs in parallel, // Packer uses a randomly chosen port in this range that appears available. By // default this is 5900 to 6000. The minimum and maximum ports are inclusive. VNCPortMin int `mapstructure:"vnc_port_min" required:"false"` VNCPortMax int `mapstructure:"vnc_port_max"` // This is the name of the image (QCOW2 or IMG) file for // the new virtual machine. By default this is packer-BUILDNAME, where // "BUILDNAME" is the name of the build. Currently, no file extension will be // used unless it is specified in this option. VMName string `mapstructure:"vm_name" required:"false"` // These are deprecated, but we keep them around for BC // TODO(@mitchellh): remove SSHWaitTimeout time.Duration `mapstructure:"ssh_wait_timeout" required:"false"` // TODO(mitchellh): deprecate RunOnce bool `mapstructure:"run_once"` // contains filtered or unexported fields }
func (*Config) FlatMapstructure ¶ added in v1.4.5
FlatMapstructure returns a new FlatConfig. FlatConfig is an auto-generated flat version of Config. Where the contents a fields with a `mapstructure:,squash` tag are bubbled up.
type Driver ¶
type Driver interface { // Stop stops a running machine, forcefully. Stop() error // Qemu executes the given command via qemu-system-x86_64 Qemu(qemuArgs ...string) error // wait on shutdown of the VM with option to cancel WaitForShutdown(<-chan struct{}) bool // Qemu executes the given command via qemu-img QemuImg(...string) error // Verify checks to make sure that this driver should function // properly. If there is any indication the driver can't function, // this will return an error. Verify() error // Version reads the version of Qemu that is installed. Version() (string, error) }
A driver is able to talk to qemu-system-x86_64 and perform certain operations with it.
type DriverCancelCallback ¶
type FlatConfig ¶ added in v1.4.5
type FlatConfig struct { PackerBuildName *string `mapstructure:"packer_build_name" cty:"packer_build_name"` PackerBuilderType *string `mapstructure:"packer_builder_type" cty:"packer_builder_type"` PackerDebug *bool `mapstructure:"packer_debug" cty:"packer_debug"` PackerForce *bool `mapstructure:"packer_force" cty:"packer_force"` PackerOnError *string `mapstructure:"packer_on_error" cty:"packer_on_error"` PackerUserVars map[string]string `mapstructure:"packer_user_variables" cty:"packer_user_variables"` PackerSensitiveVars []string `mapstructure:"packer_sensitive_variables" cty:"packer_sensitive_variables"` HTTPDir *string `mapstructure:"http_directory" cty:"http_directory"` HTTPPortMin *int `mapstructure:"http_port_min" cty:"http_port_min"` HTTPPortMax *int `mapstructure:"http_port_max" cty:"http_port_max"` ISOChecksum *string `mapstructure:"iso_checksum" required:"true" cty:"iso_checksum"` ISOChecksumURL *string `mapstructure:"iso_checksum_url" cty:"iso_checksum_url"` ISOChecksumType *string `mapstructure:"iso_checksum_type" cty:"iso_checksum_type"` RawSingleISOUrl *string `mapstructure:"iso_url" required:"true" cty:"iso_url"` ISOUrls []string `mapstructure:"iso_urls" cty:"iso_urls"` TargetPath *string `mapstructure:"iso_target_path" cty:"iso_target_path"` TargetExtension *string `mapstructure:"iso_target_extension" cty:"iso_target_extension"` BootGroupInterval *string `mapstructure:"boot_keygroup_interval" cty:"boot_keygroup_interval"` BootWait *string `mapstructure:"boot_wait" cty:"boot_wait"` BootCommand []string `mapstructure:"boot_command" cty:"boot_command"` DisableVNC *bool `mapstructure:"disable_vnc" cty:"disable_vnc"` BootKeyInterval *string `mapstructure:"boot_key_interval" cty:"boot_key_interval"` ShutdownCommand *string `mapstructure:"shutdown_command" required:"false" cty:"shutdown_command"` ShutdownTimeout *string `mapstructure:"shutdown_timeout" required:"false" cty:"shutdown_timeout"` Type *string `mapstructure:"communicator" cty:"communicator"` PauseBeforeConnect *string `mapstructure:"pause_before_connecting" cty:"pause_before_connecting"` SSHHost *string `mapstructure:"ssh_host" cty:"ssh_host"` SSHPort *int `mapstructure:"ssh_port" cty:"ssh_port"` SSHUsername *string `mapstructure:"ssh_username" cty:"ssh_username"` SSHPassword *string `mapstructure:"ssh_password" cty:"ssh_password"` SSHKeyPairName *string `mapstructure:"ssh_keypair_name" cty:"ssh_keypair_name"` SSHTemporaryKeyPairName *string `mapstructure:"temporary_key_pair_name" cty:"temporary_key_pair_name"` SSHClearAuthorizedKeys *bool `mapstructure:"ssh_clear_authorized_keys" cty:"ssh_clear_authorized_keys"` SSHPrivateKeyFile *string `mapstructure:"ssh_private_key_file" cty:"ssh_private_key_file"` SSHPty *bool `mapstructure:"ssh_pty" cty:"ssh_pty"` SSHTimeout *string `mapstructure:"ssh_timeout" cty:"ssh_timeout"` SSHAgentAuth *bool `mapstructure:"ssh_agent_auth" cty:"ssh_agent_auth"` SSHDisableAgentForwarding *bool `mapstructure:"ssh_disable_agent_forwarding" cty:"ssh_disable_agent_forwarding"` SSHHandshakeAttempts *int `mapstructure:"ssh_handshake_attempts" cty:"ssh_handshake_attempts"` SSHBastionHost *string `mapstructure:"ssh_bastion_host" cty:"ssh_bastion_host"` SSHBastionPort *int `mapstructure:"ssh_bastion_port" cty:"ssh_bastion_port"` SSHBastionAgentAuth *bool `mapstructure:"ssh_bastion_agent_auth" cty:"ssh_bastion_agent_auth"` SSHBastionUsername *string `mapstructure:"ssh_bastion_username" cty:"ssh_bastion_username"` SSHBastionPassword *string `mapstructure:"ssh_bastion_password" cty:"ssh_bastion_password"` SSHBastionPrivateKeyFile *string `mapstructure:"ssh_bastion_private_key_file" cty:"ssh_bastion_private_key_file"` SSHFileTransferMethod *string `mapstructure:"ssh_file_transfer_method" cty:"ssh_file_transfer_method"` SSHProxyHost *string `mapstructure:"ssh_proxy_host" cty:"ssh_proxy_host"` SSHProxyPort *int `mapstructure:"ssh_proxy_port" cty:"ssh_proxy_port"` SSHProxyUsername *string `mapstructure:"ssh_proxy_username" cty:"ssh_proxy_username"` SSHProxyPassword *string `mapstructure:"ssh_proxy_password" cty:"ssh_proxy_password"` SSHKeepAliveInterval *string `mapstructure:"ssh_keep_alive_interval" cty:"ssh_keep_alive_interval"` SSHReadWriteTimeout *string `mapstructure:"ssh_read_write_timeout" cty:"ssh_read_write_timeout"` SSHRemoteTunnels []string `mapstructure:"ssh_remote_tunnels" cty:"ssh_remote_tunnels"` SSHLocalTunnels []string `mapstructure:"ssh_local_tunnels" cty:"ssh_local_tunnels"` SSHPublicKey []byte `mapstructure:"ssh_public_key" cty:"ssh_public_key"` SSHPrivateKey []byte `mapstructure:"ssh_private_key" cty:"ssh_private_key"` WinRMUser *string `mapstructure:"winrm_username" cty:"winrm_username"` WinRMPassword *string `mapstructure:"winrm_password" cty:"winrm_password"` WinRMHost *string `mapstructure:"winrm_host" cty:"winrm_host"` WinRMPort *int `mapstructure:"winrm_port" cty:"winrm_port"` WinRMTimeout *string `mapstructure:"winrm_timeout" cty:"winrm_timeout"` WinRMUseSSL *bool `mapstructure:"winrm_use_ssl" cty:"winrm_use_ssl"` WinRMInsecure *bool `mapstructure:"winrm_insecure" cty:"winrm_insecure"` WinRMUseNTLM *bool `mapstructure:"winrm_use_ntlm" cty:"winrm_use_ntlm"` FloppyFiles []string `mapstructure:"floppy_files" cty:"floppy_files"` FloppyDirectories []string `mapstructure:"floppy_dirs" cty:"floppy_dirs"` FloppyLabel *string `mapstructure:"floppy_label" cty:"floppy_label"` ISOSkipCache *bool `mapstructure:"iso_skip_cache" required:"false" cty:"iso_skip_cache"` Accelerator *string `mapstructure:"accelerator" required:"false" cty:"accelerator"` AdditionalDiskSize []string `mapstructure:"disk_additional_size" required:"false" cty:"disk_additional_size"` CpuCount *int `mapstructure:"cpus" required:"false" cty:"cpus"` DiskInterface *string `mapstructure:"disk_interface" required:"false" cty:"disk_interface"` DiskSize *string `mapstructure:"disk_size" required:"false" cty:"disk_size"` DiskCache *string `mapstructure:"disk_cache" required:"false" cty:"disk_cache"` DiskDiscard *string `mapstructure:"disk_discard" required:"false" cty:"disk_discard"` DetectZeroes *string `mapstructure:"disk_detect_zeroes" required:"false" cty:"disk_detect_zeroes"` SkipCompaction *bool `mapstructure:"skip_compaction" required:"false" cty:"skip_compaction"` DiskCompression *bool `mapstructure:"disk_compression" required:"false" cty:"disk_compression"` Format *string `mapstructure:"format" required:"false" cty:"format"` Headless *bool `mapstructure:"headless" required:"false" cty:"headless"` DiskImage *bool `mapstructure:"disk_image" required:"false" cty:"disk_image"` UseBackingFile *bool `mapstructure:"use_backing_file" required:"false" cty:"use_backing_file"` MachineType *string `mapstructure:"machine_type" required:"false" cty:"machine_type"` MemorySize *int `mapstructure:"memory" required:"false" cty:"memory"` NetDevice *string `mapstructure:"net_device" required:"false" cty:"net_device"` OutputDir *string `mapstructure:"output_directory" required:"false" cty:"output_directory"` QemuArgs [][]string `mapstructure:"qemuargs" required:"false" cty:"qemuargs"` QemuBinary *string `mapstructure:"qemu_binary" required:"false" cty:"qemu_binary"` QMPEnable *bool `mapstructure:"qmp_enable" required:"false" cty:"qmp_enable"` QMPSocketPath *string `mapstructure:"qmp_socket_path" required:"false" cty:"qmp_socket_path"` SSHHostPortMin *int `mapstructure:"ssh_host_port_min" required:"false" cty:"ssh_host_port_min"` SSHHostPortMax *int `mapstructure:"ssh_host_port_max" required:"false" cty:"ssh_host_port_max"` UseDefaultDisplay *bool `mapstructure:"use_default_display" required:"false" cty:"use_default_display"` Display *string `mapstructure:"display" required:"false" cty:"display"` VNCBindAddress *string `mapstructure:"vnc_bind_address" required:"false" cty:"vnc_bind_address"` VNCUsePassword *bool `mapstructure:"vnc_use_password" required:"false" cty:"vnc_use_password"` VNCPortMin *int `mapstructure:"vnc_port_min" required:"false" cty:"vnc_port_min"` VNCPortMax *int `mapstructure:"vnc_port_max" cty:"vnc_port_max"` VMName *string `mapstructure:"vm_name" required:"false" cty:"vm_name"` SSHWaitTimeout *string `mapstructure:"ssh_wait_timeout" required:"false" cty:"ssh_wait_timeout"` RunOnce *bool `mapstructure:"run_once" cty:"run_once"` }
FlatConfig is an auto-generated flat version of Config. Where the contents of a field with a `mapstructure:,squash` tag are bubbled up.
type QemuDriver ¶
type QemuDriver struct { QemuPath string QemuImgPath string // contains filtered or unexported fields }
func (*QemuDriver) Qemu ¶
func (d *QemuDriver) Qemu(qemuArgs ...string) error
func (*QemuDriver) QemuImg ¶
func (d *QemuDriver) QemuImg(args ...string) error
func (*QemuDriver) Stop ¶
func (d *QemuDriver) Stop() error
func (*QemuDriver) Verify ¶
func (d *QemuDriver) Verify() error
func (*QemuDriver) Version ¶
func (d *QemuDriver) Version() (string, error)
func (*QemuDriver) WaitForShutdown ¶
func (d *QemuDriver) WaitForShutdown(cancelCh <-chan struct{}) bool
Source Files ¶
- artifact.go
- builder.go
- builder.hcl2spec.go
- driver.go
- ssh.go
- step_configure_qmp.go
- step_configure_vnc.go
- step_convert_disk.go
- step_copy_disk.go
- step_create_disk.go
- step_forward_ssh.go
- step_prepare_output_dir.go
- step_resize_disk.go
- step_run.go
- step_set_iso.go
- step_shutdown.go
- step_type_boot_command.go
Click to show internal directories.
Click to hide internal directories.