Documentation ¶
Overview ¶
Package chroot is able to create an Outscale OMI without requiring the launch of a new instance for every build. It does this by attaching and mounting the root volume of another OMI and chrooting into that directory. It then creates an OMI from that attached drive.
Index ¶
- Constants
- func AvailableDevice() (string, error)
- func RunLocalCommands(commands []string, wrappedCommand CommandWrapper, ictx interpolate.Context, ...) error
- func ShellCommand(command string) *exec.Cmd
- type Builder
- type Cleanup
- type CommandWrapper
- type Communicator
- func (c *Communicator) Download(src string, w io.Writer) error
- func (c *Communicator) DownloadDir(src string, dst string, exclude []string) error
- func (c *Communicator) Start(ctx context.Context, cmd *packersdk.RemoteCmd) error
- func (c *Communicator) Upload(dst string, r io.Reader, fi *os.FileInfo) error
- func (c *Communicator) UploadDir(dst string, src string, exclude []string) error
- type Config
- type FlatConfig
- type StepCheckRootDevice
- type StepChrootProvision
- type StepCopyFiles
- type StepCreateOMI
- type StepCreateVolume
- type StepEarlyCleanup
- type StepEarlyUnflock
- type StepFlock
- type StepLinkVolume
- type StepMountDevice
- type StepMountExtra
- type StepPostMountCommands
- type StepPreMountCommands
- type StepPrepareDevice
- type StepSnapshot
- type StepVmInfo
Constants ¶
const BuilderId = "oapi.outscale.chroot"
The unique ID for this builder
const LOCK_EX = 2
See: http://linux.die.net/include/sys/file.h
const LOCK_NB = 4
const LOCK_UN = 8
Variables ¶
This section is empty.
Functions ¶
func AvailableDevice ¶
AvailableDevice finds an available device and returns it. Note that you should externally hold a flock or something in order to guarantee that this device is available across processes.
func RunLocalCommands ¶
func RunLocalCommands(commands []string, wrappedCommand CommandWrapper, ictx interpolate.Context, ui packersdk.Ui) error
func ShellCommand ¶
ShellCommand takes a command string and returns an *exec.Cmd to execute it within the context of a shell (/bin/sh).
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 CommandWrapper ¶
CommandWrapper is a type that given a command, will possibly modify that command in-flight. This might return an error.
type Communicator ¶
type Communicator struct { Chroot string CmdWrapper CommandWrapper }
Communicator is a special communicator that works by executing commands locally but within a chroot.
func (*Communicator) DownloadDir ¶
func (c *Communicator) DownloadDir(src string, dst string, exclude []string) error
type Config ¶
type Config struct { common.PackerConfig `mapstructure:",squash"` osccommon.OMIBlockDevices `mapstructure:",squash"` osccommon.OMIConfig `mapstructure:",squash"` osccommon.AccessConfig `mapstructure:",squash"` ChrootMounts [][]string `mapstructure:"chroot_mounts"` CommandWrapper string `mapstructure:"command_wrapper"` CopyFiles []string `mapstructure:"copy_files"` DevicePath string `mapstructure:"device_path"` NVMEDevicePath string `mapstructure:"nvme_device_path"` FromScratch bool `mapstructure:"from_scratch"` MountOptions []string `mapstructure:"mount_options"` MountPartition string `mapstructure:"mount_partition"` MountPath string `mapstructure:"mount_path"` PostMountCommands []string `mapstructure:"post_mount_commands"` PreMountCommands []string `mapstructure:"pre_mount_commands"` RootDeviceName string `mapstructure:"root_device_name"` RootVolumeSize int64 `mapstructure:"root_volume_size"` RootVolumeType string `mapstructure:"root_volume_type"` SourceOMI string `mapstructure:"source_omi"` SourceOMIFilter osccommon.OmiFilterOptions `mapstructure:"source_omi_filter"` RootVolumeTags osccommon.TagMap `mapstructure:"root_volume_tags"` // 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.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 FlatConfig ¶ added in v1.4.5
type FlatConfig struct { PackerBuildName *string `mapstructure:"packer_build_name" cty:"packer_build_name" hcl:"packer_build_name"` PackerBuilderType *string `mapstructure:"packer_builder_type" cty:"packer_builder_type" hcl:"packer_builder_type"` PackerCoreVersion *string `mapstructure:"packer_core_version" cty:"packer_core_version" hcl:"packer_core_version"` PackerDebug *bool `mapstructure:"packer_debug" cty:"packer_debug" hcl:"packer_debug"` PackerForce *bool `mapstructure:"packer_force" cty:"packer_force" hcl:"packer_force"` PackerOnError *string `mapstructure:"packer_on_error" cty:"packer_on_error" hcl:"packer_on_error"` PackerUserVars map[string]string `mapstructure:"packer_user_variables" cty:"packer_user_variables" hcl:"packer_user_variables"` PackerSensitiveVars []string `mapstructure:"packer_sensitive_variables" cty:"packer_sensitive_variables" hcl:"packer_sensitive_variables"` OMIMappings []common.FlatBlockDevice `mapstructure:"omi_block_device_mappings" cty:"omi_block_device_mappings" hcl:"omi_block_device_mappings"` OMIName *string `mapstructure:"omi_name" cty:"omi_name" hcl:"omi_name"` OMIDescription *string `mapstructure:"omi_description" cty:"omi_description" hcl:"omi_description"` OMIVirtType *string `mapstructure:"omi_virtualization_type" cty:"omi_virtualization_type" hcl:"omi_virtualization_type"` OMIAccountIDs []string `mapstructure:"omi_account_ids" cty:"omi_account_ids" hcl:"omi_account_ids"` OMIGroups []string `mapstructure:"omi_groups" cty:"omi_groups" hcl:"omi_groups"` OMIProductCodes []string `mapstructure:"omi_product_codes" cty:"omi_product_codes" hcl:"omi_product_codes"` OMIRegions []string `mapstructure:"omi_regions" cty:"omi_regions" hcl:"omi_regions"` OMISkipRegionValidation *bool `mapstructure:"skip_region_validation" cty:"skip_region_validation" hcl:"skip_region_validation"` OMITags common.TagMap `mapstructure:"tags" cty:"tags" hcl:"tags"` OMIForceDeregister *bool `mapstructure:"force_deregister" cty:"force_deregister" hcl:"force_deregister"` OMIForceDeleteSnapshot *bool `mapstructure:"force_delete_snapshot" cty:"force_delete_snapshot" hcl:"force_delete_snapshot"` SnapshotTags common.TagMap `mapstructure:"snapshot_tags" cty:"snapshot_tags" hcl:"snapshot_tags"` SnapshotAccountIDs []string `mapstructure:"snapshot_account_ids" cty:"snapshot_account_ids" hcl:"snapshot_account_ids"` SnapshotGroups []string `mapstructure:"snapshot_groups" cty:"snapshot_groups" hcl:"snapshot_groups"` AccessKey *string `mapstructure:"access_key" cty:"access_key" hcl:"access_key"` CustomEndpointOAPI *string `mapstructure:"custom_endpoint_oapi" cty:"custom_endpoint_oapi" hcl:"custom_endpoint_oapi"` InsecureSkipTLSVerify *bool `mapstructure:"insecure_skip_tls_verify" cty:"insecure_skip_tls_verify" hcl:"insecure_skip_tls_verify"` MFACode *string `mapstructure:"mfa_code" cty:"mfa_code" hcl:"mfa_code"` ProfileName *string `mapstructure:"profile" cty:"profile" hcl:"profile"` RawRegion *string `mapstructure:"region" cty:"region" hcl:"region"` SecretKey *string `mapstructure:"secret_key" cty:"secret_key" hcl:"secret_key"` SkipMetadataApiCheck *bool `mapstructure:"skip_metadata_api_check" cty:"skip_metadata_api_check" hcl:"skip_metadata_api_check"` Token *string `mapstructure:"token" cty:"token" hcl:"token"` X509certPath *string `mapstructure:"x509_cert_path" cty:"x509_cert_path" hcl:"x509_cert_path"` X509keyPath *string `mapstructure:"x509_key_path" cty:"x509_key_path" hcl:"x509_key_path"` ChrootMounts [][]string `mapstructure:"chroot_mounts" cty:"chroot_mounts" hcl:"chroot_mounts"` CommandWrapper *string `mapstructure:"command_wrapper" cty:"command_wrapper" hcl:"command_wrapper"` CopyFiles []string `mapstructure:"copy_files" cty:"copy_files" hcl:"copy_files"` DevicePath *string `mapstructure:"device_path" cty:"device_path" hcl:"device_path"` NVMEDevicePath *string `mapstructure:"nvme_device_path" cty:"nvme_device_path" hcl:"nvme_device_path"` FromScratch *bool `mapstructure:"from_scratch" cty:"from_scratch" hcl:"from_scratch"` MountOptions []string `mapstructure:"mount_options" cty:"mount_options" hcl:"mount_options"` MountPartition *string `mapstructure:"mount_partition" cty:"mount_partition" hcl:"mount_partition"` MountPath *string `mapstructure:"mount_path" cty:"mount_path" hcl:"mount_path"` PostMountCommands []string `mapstructure:"post_mount_commands" cty:"post_mount_commands" hcl:"post_mount_commands"` PreMountCommands []string `mapstructure:"pre_mount_commands" cty:"pre_mount_commands" hcl:"pre_mount_commands"` RootDeviceName *string `mapstructure:"root_device_name" cty:"root_device_name" hcl:"root_device_name"` RootVolumeSize *int64 `mapstructure:"root_volume_size" cty:"root_volume_size" hcl:"root_volume_size"` RootVolumeType *string `mapstructure:"root_volume_type" cty:"root_volume_type" hcl:"root_volume_type"` SourceOMI *string `mapstructure:"source_omi" cty:"source_omi" hcl:"source_omi"` SourceOMIFilter *common.FlatOmiFilterOptions `mapstructure:"source_omi_filter" cty:"source_omi_filter" hcl:"source_omi_filter"` RootVolumeTags common.TagMap `mapstructure:"root_volume_tags" cty:"root_volume_tags" hcl:"root_volume_tags"` }
FlatConfig is an auto-generated flat version of Config. Where the contents of a field with a `mapstructure:,squash` tag are bubbled up.
type StepCheckRootDevice ¶
type StepCheckRootDevice struct{}
StepCheckRootDevice makes sure the root device on the OMI is BSU-backed.
func (*StepCheckRootDevice) Cleanup ¶
func (s *StepCheckRootDevice) Cleanup(multistep.StateBag)
func (*StepCheckRootDevice) Run ¶
func (s *StepCheckRootDevice) Run(_ context.Context, state multistep.StateBag) multistep.StepAction
type StepChrootProvision ¶
type StepChrootProvision struct { }
StepChrootProvision provisions the instance within a chroot.
func (*StepChrootProvision) Cleanup ¶
func (s *StepChrootProvision) Cleanup(state multistep.StateBag)
func (*StepChrootProvision) Run ¶
func (s *StepChrootProvision) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepCopyFiles ¶
type StepCopyFiles struct {
// contains filtered or unexported fields
}
StepCopyFiles copies some files from the host into the chroot environment.
Produces:
copy_files_cleanup CleanupFunc - A function to clean up the copied files early.
func (*StepCopyFiles) Cleanup ¶
func (s *StepCopyFiles) Cleanup(state multistep.StateBag)
func (*StepCopyFiles) CleanupFunc ¶
func (s *StepCopyFiles) CleanupFunc(state multistep.StateBag) error
func (*StepCopyFiles) Run ¶
func (s *StepCopyFiles) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepCreateOMI ¶
StepCreateOMI creates the OMI.
func (*StepCreateOMI) Cleanup ¶
func (s *StepCreateOMI) Cleanup(state multistep.StateBag)
func (*StepCreateOMI) Run ¶
func (s *StepCreateOMI) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepCreateVolume ¶
type StepCreateVolume struct { RootVolumeSize int64 RootVolumeType string RootVolumeTags osccommon.TagMap RawRegion string Ctx interpolate.Context // contains filtered or unexported fields }
StepCreateVolume creates a new volume from the snapshot of the root device of the OMI.
Produces:
volume_id string - The ID of the created volume
func (*StepCreateVolume) Cleanup ¶
func (s *StepCreateVolume) Cleanup(state multistep.StateBag)
func (*StepCreateVolume) Run ¶
func (s *StepCreateVolume) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepEarlyCleanup ¶
type StepEarlyCleanup struct{}
StepEarlyCleanup performs some of the cleanup steps early in order to prepare for snapshotting and creating an AMI.
func (*StepEarlyCleanup) Cleanup ¶
func (s *StepEarlyCleanup) Cleanup(state multistep.StateBag)
func (*StepEarlyCleanup) Run ¶
func (s *StepEarlyCleanup) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepEarlyUnflock ¶
type StepEarlyUnflock struct{}
StepEarlyUnflock unlocks the flock.
func (*StepEarlyUnflock) Cleanup ¶
func (s *StepEarlyUnflock) Cleanup(state multistep.StateBag)
func (*StepEarlyUnflock) Run ¶
func (s *StepEarlyUnflock) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepFlock ¶
type StepFlock struct {
// contains filtered or unexported fields
}
StepFlock provisions the instance within a chroot.
Produces:
flock_cleanup Cleanup - To perform early cleanup
type StepLinkVolume ¶
type StepLinkVolume struct {
// contains filtered or unexported fields
}
StepLinkVolume attaches the previously created volume to an available device location.
Produces:
device string - The location where the volume was attached. attach_cleanup CleanupFunc
func (*StepLinkVolume) Cleanup ¶
func (s *StepLinkVolume) Cleanup(state multistep.StateBag)
func (*StepLinkVolume) CleanupFunc ¶
func (s *StepLinkVolume) CleanupFunc(state multistep.StateBag) error
func (*StepLinkVolume) Run ¶
func (s *StepLinkVolume) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepMountDevice ¶
type StepMountDevice struct { MountOptions []string MountPartition string // contains filtered or unexported fields }
StepMountDevice mounts the attached device.
Produces:
mount_path string - The location where the volume was mounted. mount_device_cleanup CleanupFunc - To perform early cleanup
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(_ context.Context, state multistep.StateBag) multistep.StepAction
type StepMountExtra ¶
type StepMountExtra struct {
// contains filtered or unexported fields
}
StepMountExtra mounts the attached device.
Produces:
mount_extra_cleanup CleanupFunc - To perform early cleanup
func (*StepMountExtra) Cleanup ¶
func (s *StepMountExtra) Cleanup(state multistep.StateBag)
func (*StepMountExtra) CleanupFunc ¶
func (s *StepMountExtra) CleanupFunc(state multistep.StateBag) error
func (*StepMountExtra) Run ¶
func (s *StepMountExtra) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepPostMountCommands ¶
type StepPostMountCommands struct {
Commands []string
}
StepPostMountCommands allows running arbitrary commands after mounting the device, but prior to the bind mount and copy steps.
func (*StepPostMountCommands) Cleanup ¶
func (s *StepPostMountCommands) Cleanup(state multistep.StateBag)
func (*StepPostMountCommands) Run ¶
func (s *StepPostMountCommands) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepPreMountCommands ¶
type StepPreMountCommands struct {
Commands []string
}
StepPreMountCommands sets up the a new block device when building from scratch
func (*StepPreMountCommands) Cleanup ¶
func (s *StepPreMountCommands) Cleanup(state multistep.StateBag)
func (*StepPreMountCommands) Run ¶
func (s *StepPreMountCommands) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepPrepareDevice ¶
type StepPrepareDevice struct { }
StepPrepareDevice finds an available device and sets it.
func (*StepPrepareDevice) Cleanup ¶
func (s *StepPrepareDevice) Cleanup(state multistep.StateBag)
func (*StepPrepareDevice) Run ¶
func (s *StepPrepareDevice) Run(_ context.Context, state multistep.StateBag) multistep.StepAction
type StepSnapshot ¶
type StepSnapshot struct { RawRegion string // contains filtered or unexported fields }
StepSnapshot creates a snapshot of the created volume.
Produces:
snapshot_id string - ID of the created snapshot
func (*StepSnapshot) Cleanup ¶
func (s *StepSnapshot) Cleanup(state multistep.StateBag)
func (*StepSnapshot) Run ¶
func (s *StepSnapshot) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction
type StepVmInfo ¶
type StepVmInfo struct{}
StepVmInfo verifies that this builder is running on an Outscale vm.
func (*StepVmInfo) Cleanup ¶
func (s *StepVmInfo) Cleanup(multistep.StateBag)
func (*StepVmInfo) Run ¶
func (s *StepVmInfo) Run(_ context.Context, state multistep.StateBag) multistep.StepAction
Source Files ¶
- builder.go
- builder.hcl2spec.go
- cleanup.go
- command.go
- communicator.go
- device.go
- lockfile_unix.go
- run_local_commands.go
- step_check_root_device.go
- step_chroot_provision.go
- step_copy_files.go
- step_create_omi.go
- step_create_volume.go
- step_early_cleanup.go
- step_early_unflock.go
- step_flock.go
- step_link_volume.go
- step_mount_device.go
- step_mount_extra.go
- step_post_mount_commands.go
- step_pre_mount_commands.go
- step_prepare_device.go
- step_snapshot.go
- step_vm_info.go