Documentation ¶
Overview ¶
Package chroot is able to create an Azure managed image without requiring the launch of a new virtual machine for every build. It does this by attaching and mounting the root disk and chrooting into that directory. It then creates a managed image from that attached disk.
Code generated by "mapstructure-to-hcl2 -type Config"; DO NOT EDIT.
Index ¶
Constants ¶
const BuilderId = "azure.chroot"
BuilderId is the unique ID for this builder
Variables ¶
var DiskNotFoundError = errors.New("Disk not found")
var NewDiskAttacher = func(azureClient client.AzureClientSet) DiskAttacher {
return &diskAttacher{
azcli: azureClient,
}
}
Functions ¶
func CreateVMMetadataTemplateFunc ¶
CreateVMMetadataTemplateFunc returns a template function that retrieves VM metadata. VM metadata is retrieved only once and reused for all executions of the function.
Types ¶
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 ¶
type Config struct { common.PackerConfig `mapstructure:",squash"` ClientConfig client.Config `mapstructure:",squash"` // When set to `true`, starts with an empty, unpartitioned disk. Defaults to `false`. FromScratch bool `mapstructure:"from_scratch"` // Either a managed disk resource ID or a publisher:offer:sku:version specifier for plaform image sources. Source string `mapstructure:"source" required:"true"` // How to run shell commands. This may be useful to set environment variables or perhaps run // a command with sudo or so on. This is a configuration template where the `.Command` variable // is replaced with the command to be run. Defaults to `{{.Command}}`. CommandWrapper string `mapstructure:"command_wrapper"` // A series of commands to execute after attaching the root volume and before mounting the chroot. // This is not required unless using `from_scratch`. If so, this should include any partitioning // and filesystem creation commands. The path to the device is provided by `{{.Device}}`. PreMountCommands []string `mapstructure:"pre_mount_commands"` // Options to supply the `mount` command when mounting devices. Each option will be prefixed with // `-o` and supplied to the `mount` command ran by Packer. Because this command is ran in a shell, // user discretion is advised. See this manual page for the `mount` command for valid file system specific options. MountOptions []string `mapstructure:"mount_options"` // The partition number containing the / partition. By default this is the first partition of the volume. MountPartition string `mapstructure:"mount_partition"` // The path where the volume will be mounted. This is where the chroot environment will be. This defaults // to `/mnt/packer-amazon-chroot-volumes/{{.Device}}`. This is a configuration template where the `.Device` // variable is replaced with the name of the device where the volume is attached. MountPath string `mapstructure:"mount_path"` // As `pre_mount_commands`, but the commands are executed after mounting the root device and before the // extra mount and copy steps. The device and mount path are provided by `{{.Device}}` and `{{.MountPath}}`. PostMountCommands []string `mapstructure:"post_mount_commands"` // This is a list of devices to mount into the chroot environment. This configuration parameter requires // some additional documentation which is in the "Chroot Mounts" section below. Please read that section // for more information on how to use this. ChrootMounts [][]string `mapstructure:"chroot_mounts"` // Paths to files on the running Azure instance that will be copied into the chroot environment prior to // provisioning. Defaults to `/etc/resolv.conf` so that DNS lookups work. Pass an empty list to skip copying // `/etc/resolv.conf`. You may need to do this if you're building an image that uses systemd. CopyFiles []string `mapstructure:"copy_files"` // The name of the temporary disk that will be created in the resource group of the VM that Packer is // running on. Will be generated if not set. TemporaryOSDiskName string `mapstructure:"temporary_os_disk_name"` // Try to resize the OS disk to this size on the first copy. Disks can only be englarged. If not specified, // the disk will keep its original size. Required when using `from_scratch` OSDiskSizeGB int32 `mapstructure:"os_disk_size_gb"` // The [storage SKU](https://docs.microsoft.com/en-us/rest/api/compute/disks/createorupdate#diskstorageaccounttypes) // to use for the OS Disk. Defaults to `Standard_LRS`. OSDiskStorageAccountType string `mapstructure:"os_disk_storage_account_type"` // The [cache type](https://docs.microsoft.com/en-us/rest/api/compute/images/createorupdate#cachingtypes) // specified in the resulting image and for attaching it to the Packer VM. Defaults to `ReadOnly` OSDiskCacheType string `mapstructure:"os_disk_cache_type"` // If set to `true`, leaves the temporary disk behind in the Packer VM resource group. Defaults to `false` OSDiskSkipCleanup bool `mapstructure:"os_disk_skip_cleanup"` // The image to create using this build. ImageResourceID string `mapstructure:"image_resource_id" required:"true"` // The [Hyper-V generation type](https://docs.microsoft.com/en-us/rest/api/compute/images/createorupdate#hypervgenerationtypes). // Defaults to `V1`. ImageHyperVGeneration string `mapstructure:"image_hyperv_generation"` // contains filtered or unexported fields }
Config is the configuration that is chained through the steps and settable from the template.
func (*Config) FlatMapstructure ¶ added in v1.5.0
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.
func (*Config) GetContext ¶
func (c *Config) GetContext() interpolate.Context
GetContext implements ContextProvider to allow steps to use the config context for template interpolation
type DiskAttacher ¶
type DiskAttacher interface { AttachDisk(ctx context.Context, disk string) (lun int32, err error) DiskPathForLun(lun int32) string WaitForDevice(ctx context.Context, i int32) (device string, err error) DetachDisk(ctx context.Context, disk string) (err error) WaitForDetach(ctx context.Context, diskID string) error }
type FlatConfig ¶ added in v1.5.0
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"` CloudEnvironmentName *string `mapstructure:"cloud_environment_name" required:"false" cty:"cloud_environment_name"` ClientID *string `mapstructure:"client_id" cty:"client_id"` ClientSecret *string `mapstructure:"client_secret" cty:"client_secret"` ClientCertPath *string `mapstructure:"client_cert_path" cty:"client_cert_path"` ClientJWT *string `mapstructure:"client_jwt" cty:"client_jwt"` ObjectID *string `mapstructure:"object_id" cty:"object_id"` TenantID *string `mapstructure:"tenant_id" required:"false" cty:"tenant_id"` SubscriptionID *string `mapstructure:"subscription_id" cty:"subscription_id"` FromScratch *bool `mapstructure:"from_scratch" cty:"from_scratch"` Source *string `mapstructure:"source" required:"true" cty:"source"` CommandWrapper *string `mapstructure:"command_wrapper" cty:"command_wrapper"` PreMountCommands []string `mapstructure:"pre_mount_commands" cty:"pre_mount_commands"` MountOptions []string `mapstructure:"mount_options" cty:"mount_options"` MountPartition *string `mapstructure:"mount_partition" cty:"mount_partition"` MountPath *string `mapstructure:"mount_path" cty:"mount_path"` PostMountCommands []string `mapstructure:"post_mount_commands" cty:"post_mount_commands"` ChrootMounts [][]string `mapstructure:"chroot_mounts" cty:"chroot_mounts"` CopyFiles []string `mapstructure:"copy_files" cty:"copy_files"` TemporaryOSDiskName *string `mapstructure:"temporary_os_disk_name" cty:"temporary_os_disk_name"` OSDiskSizeGB *int32 `mapstructure:"os_disk_size_gb" cty:"os_disk_size_gb"` OSDiskStorageAccountType *string `mapstructure:"os_disk_storage_account_type" cty:"os_disk_storage_account_type"` OSDiskCacheType *string `mapstructure:"os_disk_cache_type" cty:"os_disk_cache_type"` OSDiskSkipCleanup *bool `mapstructure:"os_disk_skip_cleanup" cty:"os_disk_skip_cleanup"` ImageResourceID *string `mapstructure:"image_resource_id" required:"true" cty:"image_resource_id"` ImageHyperVGeneration *string `mapstructure:"image_hyperv_generation" cty:"image_hyperv_generation"` }
FlatConfig is an auto-generated flat version of Config. Where the contents of a field with a `mapstructure:,squash` tag are bubbled up.
type StepAttachDisk ¶
type StepAttachDisk struct {
// contains filtered or unexported fields
}
func (*StepAttachDisk) Cleanup ¶
func (s *StepAttachDisk) Cleanup(state multistep.StateBag)
func (*StepAttachDisk) CleanupFunc ¶
func (s *StepAttachDisk) CleanupFunc(state multistep.StateBag) error
func (*StepAttachDisk) Run ¶
func (s *StepAttachDisk) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepCreateImage ¶
type StepCreateImage struct { ImageResourceID string ImageOSState string OSDiskStorageAccountType string OSDiskCacheType string Location string // contains filtered or unexported fields }
func (*StepCreateImage) Cleanup ¶
func (*StepCreateImage) Cleanup(bag multistep.StateBag)
func (*StepCreateImage) Run ¶
func (s *StepCreateImage) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepCreateNewDisk ¶
type StepCreateNewDisk struct {
SubscriptionID, ResourceGroup, DiskName string
DiskSizeGB int32 // optional, ignored if 0
DiskStorageAccountType string // from compute.DiskStorageAccountTypes
HyperVGeneration string
Location string
PlatformImage *client.PlatformImage
SourceDiskResourceID string
SkipCleanup bool
}
func (StepCreateNewDisk) Cleanup ¶
func (s StepCreateNewDisk) Cleanup(state multistep.StateBag)
func (StepCreateNewDisk) Run ¶
func (s StepCreateNewDisk) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepMountDevice ¶
type StepMountDevice struct { MountOptions []string MountPartition string MountPath string // contains filtered or unexported fields }
func (*StepMountDevice) Cleanup ¶
func (s *StepMountDevice) Cleanup(state multistep.StateBag)
func (*StepMountDevice) CleanupFunc ¶
func (s *StepMountDevice) CleanupFunc(state multistep.StateBag) error
func (*StepMountDevice) Run ¶
func (s *StepMountDevice) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepVerifySourceDisk ¶
type StepVerifySourceDisk struct { SubscriptionID string SourceDiskResourceID string Location string }
func (StepVerifySourceDisk) Cleanup ¶
func (s StepVerifySourceDisk) Cleanup(state multistep.StateBag)
func (StepVerifySourceDisk) Run ¶
func (s StepVerifySourceDisk) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction