Documentation
¶
Overview ¶
The linode package contains a packersdk.Builder implementation that builds Linode images.
Index ¶
Constants ¶
const BuilderID = "packer.linode"
The unique ID for this builder.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Artifact ¶
type Builder ¶
type Builder struct {
// contains filtered or unexported fields
}
Builder represents a Packer Builder.
func (*Builder) ConfigSpec ¶
func (b *Builder) ConfigSpec() hcldec.ObjectSpec
type Config ¶
type Config struct {
common.PackerConfig `mapstructure:",squash"`
helper.LinodeCommon `mapstructure:",squash"`
Comm communicator.Config `mapstructure:",squash"`
// Network Interfaces to add to this Linode’s Configuration Profile. Singular repeatable
// block containing a `purpose`, a `label`, and an `ipam_address` field.
Interfaces []Interface `mapstructure:"interface" required:"false"`
// The id of the region to launch the Linode instance in. Images are available in all
// regions, but there will be less delay when deploying from the region where the image
// was taken. See [regions](https://api.linode.com/v4/regions) for more information on
// the available regions. Examples are `us-east`, `us-central`, `us-west`, `ap-south`,
// `ca-east`, `ap-northeast`, `eu-central`, and `eu-west`.
Region string `mapstructure:"region" required:"true"`
// Public SSH keys need to be appended to the Linode instance.
AuthorizedKeys []string `mapstructure:"authorized_keys" required:"false"`
// Users whose SSH keys need to be appended to the Linode instance.
AuthorizedUsers []string `mapstructure:"authorized_users" required:"false"`
// The Linode type defines the pricing, CPU, disk, and RAM specs of the instance. See
// [instance types](https://api.linode.com/v4/linode/types) for more information on the
// available Linode instance types. Examples are `g6-nanode-1`, `g6-standard-2`,
// `g6-highmem-16`, and `g6-dedicated-16`.
InstanceType string `mapstructure:"instance_type" required:"true"`
// The name assigned to the Linode Instance.
Label string `mapstructure:"instance_label" required:"false"`
// Tags to apply to the instance when it is created.
Tags []string `mapstructure:"instance_tags" required:"false"`
// An Image ID to deploy the Disk from. Official Linode Images start with `linode/`,
// while user Images start with `private/`. See [images](https://api.linode.com/v4/images)
// for more information on the Images available for use. Examples are `linode/debian9`,
// `linode/fedora28`, `linode/ubuntu18.04`, `linode/arch`, and `private/12345`.
Image string `mapstructure:"image" required:"true"`
// The disk size (MiB) allocated for swap space.
SwapSize int `mapstructure:"swap_size" required:"false"`
// If true, the created Linode will have private networking enabled and assigned
// a private IPv4 address.
PrivateIP bool `mapstructure:"private_ip" required:"false"`
// The root password of the Linode instance for building the image. Please note that when
// you create a new Linode instance with a private image, you will be required to setup a
// new root password.
RootPass string `mapstructure:"root_pass" required:"false"`
// The name of the resulting image that will appear
// in your account. Defaults to `packer-{{timestamp}}` (see [configuration
// templates](/packer/docs/templates/legacy_json_templates/engine) for more info).
ImageLabel string `mapstructure:"image_label" required:"false"`
// The description of the resulting image that will appear in your account. Defaults to "".
Description string `mapstructure:"image_description" required:"false"`
// The time to wait, as a duration string, for the Linode instance to enter a desired state
// (such as "running") before timing out. The default state timeout is "5m".
StateTimeout time.Duration `mapstructure:"state_timeout" required:"false"`
// This attribute is required only if the StackScript being deployed requires input data from
// the User for successful completion. See User Defined Fields (UDFs) for more details.
//
// This attribute is required to be valid JSON.
StackScriptData map[string]string `mapstructure:"stackscript_data" required:"false"`
// A StackScript ID that will cause the referenced StackScript to be run during deployment
// of this Linode. A compatible image is required to use a StackScript. To get a list of
// available StackScript and their permitted Images see /stackscripts. This field cannot
// be used when deploying from a Backup or a Private Image.
StackScriptID int `mapstructure:"stackscript_id" required:"false"`
// The time to wait, as a duration string, for the disk image to be created successfully
// before timing out. The default image creation timeout is "10m".
ImageCreateTimeout time.Duration `mapstructure:"image_create_timeout" required:"false"`
// Whether the newly created image supports cloud-init.
CloudInit bool `mapstructure:"cloud_init" required:"false"`
// An object containing user-defined data relevant to the creation of Linodes.
Metadata Metadata `mapstructure:"metadata" required:"false"`
// The ID of the Firewall to attach this Linode to upon creation.
FirewallID int `mapstructure:"firewall_id" required:"false"`
// The regions where the outcome image will be replicated to.
ImageRegions []string `mapstructure:"image_regions" required:"false"`
// contains filtered or unexported fields
}
func (*Config) FlatMapstructure ¶
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 ¶
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"`
PersonalAccessToken *string `mapstructure:"linode_token" cty:"linode_token" hcl:"linode_token"`
APICAPath *string `mapstructure:"api_ca_path" cty:"api_ca_path" hcl:"api_ca_path"`
Type *string `mapstructure:"communicator" cty:"communicator" hcl:"communicator"`
PauseBeforeConnect *string `mapstructure:"pause_before_connecting" cty:"pause_before_connecting" hcl:"pause_before_connecting"`
SSHHost *string `mapstructure:"ssh_host" cty:"ssh_host" hcl:"ssh_host"`
SSHPort *int `mapstructure:"ssh_port" cty:"ssh_port" hcl:"ssh_port"`
SSHUsername *string `mapstructure:"ssh_username" cty:"ssh_username" hcl:"ssh_username"`
SSHPassword *string `mapstructure:"ssh_password" cty:"ssh_password" hcl:"ssh_password"`
SSHKeyPairName *string `mapstructure:"ssh_keypair_name" undocumented:"true" cty:"ssh_keypair_name" hcl:"ssh_keypair_name"`
SSHTemporaryKeyPairName *string `mapstructure:"temporary_key_pair_name" undocumented:"true" cty:"temporary_key_pair_name" hcl:"temporary_key_pair_name"`
SSHTemporaryKeyPairType *string `mapstructure:"temporary_key_pair_type" cty:"temporary_key_pair_type" hcl:"temporary_key_pair_type"`
SSHTemporaryKeyPairBits *int `mapstructure:"temporary_key_pair_bits" cty:"temporary_key_pair_bits" hcl:"temporary_key_pair_bits"`
SSHCiphers []string `mapstructure:"ssh_ciphers" cty:"ssh_ciphers" hcl:"ssh_ciphers"`
SSHClearAuthorizedKeys *bool `mapstructure:"ssh_clear_authorized_keys" cty:"ssh_clear_authorized_keys" hcl:"ssh_clear_authorized_keys"`
SSHKEXAlgos []string `mapstructure:"ssh_key_exchange_algorithms" cty:"ssh_key_exchange_algorithms" hcl:"ssh_key_exchange_algorithms"`
SSHPrivateKeyFile *string `mapstructure:"ssh_private_key_file" undocumented:"true" cty:"ssh_private_key_file" hcl:"ssh_private_key_file"`
SSHCertificateFile *string `mapstructure:"ssh_certificate_file" cty:"ssh_certificate_file" hcl:"ssh_certificate_file"`
SSHPty *bool `mapstructure:"ssh_pty" cty:"ssh_pty" hcl:"ssh_pty"`
SSHTimeout *string `mapstructure:"ssh_timeout" cty:"ssh_timeout" hcl:"ssh_timeout"`
SSHWaitTimeout *string `mapstructure:"ssh_wait_timeout" undocumented:"true" cty:"ssh_wait_timeout" hcl:"ssh_wait_timeout"`
SSHAgentAuth *bool `mapstructure:"ssh_agent_auth" undocumented:"true" cty:"ssh_agent_auth" hcl:"ssh_agent_auth"`
SSHDisableAgentForwarding *bool `mapstructure:"ssh_disable_agent_forwarding" cty:"ssh_disable_agent_forwarding" hcl:"ssh_disable_agent_forwarding"`
SSHHandshakeAttempts *int `mapstructure:"ssh_handshake_attempts" cty:"ssh_handshake_attempts" hcl:"ssh_handshake_attempts"`
SSHBastionHost *string `mapstructure:"ssh_bastion_host" cty:"ssh_bastion_host" hcl:"ssh_bastion_host"`
SSHBastionPort *int `mapstructure:"ssh_bastion_port" cty:"ssh_bastion_port" hcl:"ssh_bastion_port"`
SSHBastionAgentAuth *bool `mapstructure:"ssh_bastion_agent_auth" cty:"ssh_bastion_agent_auth" hcl:"ssh_bastion_agent_auth"`
SSHBastionUsername *string `mapstructure:"ssh_bastion_username" cty:"ssh_bastion_username" hcl:"ssh_bastion_username"`
SSHBastionPassword *string `mapstructure:"ssh_bastion_password" cty:"ssh_bastion_password" hcl:"ssh_bastion_password"`
SSHBastionInteractive *bool `mapstructure:"ssh_bastion_interactive" cty:"ssh_bastion_interactive" hcl:"ssh_bastion_interactive"`
SSHBastionPrivateKeyFile *string `mapstructure:"ssh_bastion_private_key_file" cty:"ssh_bastion_private_key_file" hcl:"ssh_bastion_private_key_file"`
SSHBastionCertificateFile *string `mapstructure:"ssh_bastion_certificate_file" cty:"ssh_bastion_certificate_file" hcl:"ssh_bastion_certificate_file"`
SSHFileTransferMethod *string `mapstructure:"ssh_file_transfer_method" cty:"ssh_file_transfer_method" hcl:"ssh_file_transfer_method"`
SSHProxyHost *string `mapstructure:"ssh_proxy_host" cty:"ssh_proxy_host" hcl:"ssh_proxy_host"`
SSHProxyPort *int `mapstructure:"ssh_proxy_port" cty:"ssh_proxy_port" hcl:"ssh_proxy_port"`
SSHProxyUsername *string `mapstructure:"ssh_proxy_username" cty:"ssh_proxy_username" hcl:"ssh_proxy_username"`
SSHProxyPassword *string `mapstructure:"ssh_proxy_password" cty:"ssh_proxy_password" hcl:"ssh_proxy_password"`
SSHKeepAliveInterval *string `mapstructure:"ssh_keep_alive_interval" cty:"ssh_keep_alive_interval" hcl:"ssh_keep_alive_interval"`
SSHReadWriteTimeout *string `mapstructure:"ssh_read_write_timeout" cty:"ssh_read_write_timeout" hcl:"ssh_read_write_timeout"`
SSHRemoteTunnels []string `mapstructure:"ssh_remote_tunnels" cty:"ssh_remote_tunnels" hcl:"ssh_remote_tunnels"`
SSHLocalTunnels []string `mapstructure:"ssh_local_tunnels" cty:"ssh_local_tunnels" hcl:"ssh_local_tunnels"`
SSHPublicKey []byte `mapstructure:"ssh_public_key" undocumented:"true" cty:"ssh_public_key" hcl:"ssh_public_key"`
SSHPrivateKey []byte `mapstructure:"ssh_private_key" undocumented:"true" cty:"ssh_private_key" hcl:"ssh_private_key"`
WinRMUser *string `mapstructure:"winrm_username" cty:"winrm_username" hcl:"winrm_username"`
WinRMPassword *string `mapstructure:"winrm_password" cty:"winrm_password" hcl:"winrm_password"`
WinRMHost *string `mapstructure:"winrm_host" cty:"winrm_host" hcl:"winrm_host"`
WinRMNoProxy *bool `mapstructure:"winrm_no_proxy" cty:"winrm_no_proxy" hcl:"winrm_no_proxy"`
WinRMPort *int `mapstructure:"winrm_port" cty:"winrm_port" hcl:"winrm_port"`
WinRMTimeout *string `mapstructure:"winrm_timeout" cty:"winrm_timeout" hcl:"winrm_timeout"`
WinRMUseSSL *bool `mapstructure:"winrm_use_ssl" cty:"winrm_use_ssl" hcl:"winrm_use_ssl"`
WinRMInsecure *bool `mapstructure:"winrm_insecure" cty:"winrm_insecure" hcl:"winrm_insecure"`
WinRMUseNTLM *bool `mapstructure:"winrm_use_ntlm" cty:"winrm_use_ntlm" hcl:"winrm_use_ntlm"`
Interfaces []FlatInterface `mapstructure:"interface" required:"false" cty:"interface" hcl:"interface"`
Region *string `mapstructure:"region" required:"true" cty:"region" hcl:"region"`
AuthorizedKeys []string `mapstructure:"authorized_keys" required:"false" cty:"authorized_keys" hcl:"authorized_keys"`
AuthorizedUsers []string `mapstructure:"authorized_users" required:"false" cty:"authorized_users" hcl:"authorized_users"`
InstanceType *string `mapstructure:"instance_type" required:"true" cty:"instance_type" hcl:"instance_type"`
Label *string `mapstructure:"instance_label" required:"false" cty:"instance_label" hcl:"instance_label"`
Tags []string `mapstructure:"instance_tags" required:"false" cty:"instance_tags" hcl:"instance_tags"`
Image *string `mapstructure:"image" required:"true" cty:"image" hcl:"image"`
SwapSize *int `mapstructure:"swap_size" required:"false" cty:"swap_size" hcl:"swap_size"`
PrivateIP *bool `mapstructure:"private_ip" required:"false" cty:"private_ip" hcl:"private_ip"`
RootPass *string `mapstructure:"root_pass" required:"false" cty:"root_pass" hcl:"root_pass"`
ImageLabel *string `mapstructure:"image_label" required:"false" cty:"image_label" hcl:"image_label"`
Description *string `mapstructure:"image_description" required:"false" cty:"image_description" hcl:"image_description"`
StateTimeout *string `mapstructure:"state_timeout" required:"false" cty:"state_timeout" hcl:"state_timeout"`
StackScriptData map[string]string `mapstructure:"stackscript_data" required:"false" cty:"stackscript_data" hcl:"stackscript_data"`
StackScriptID *int `mapstructure:"stackscript_id" required:"false" cty:"stackscript_id" hcl:"stackscript_id"`
ImageCreateTimeout *string `mapstructure:"image_create_timeout" required:"false" cty:"image_create_timeout" hcl:"image_create_timeout"`
CloudInit *bool `mapstructure:"cloud_init" required:"false" cty:"cloud_init" hcl:"cloud_init"`
Metadata *FlatMetadata `mapstructure:"metadata" required:"false" cty:"metadata" hcl:"metadata"`
FirewallID *int `mapstructure:"firewall_id" required:"false" cty:"firewall_id" hcl:"firewall_id"`
ImageRegions []string `mapstructure:"image_regions" required:"false" cty:"image_regions" hcl:"image_regions"`
}
FlatConfig is an auto-generated flat version of Config. Where the contents of a field with a `mapstructure:,squash` tag are bubbled up.
type FlatInterface ¶ added in v1.1.0
type FlatInterface struct {
Label *string `mapstructure:"label" cty:"label" hcl:"label"`
IPAMAddress *string `mapstructure:"ipam_address" cty:"ipam_address" hcl:"ipam_address"`
SubnetID *int `mapstructure:"subnet_id" cty:"subnet_id" hcl:"subnet_id"`
IPv4 *FlatInterfaceIPv4 `mapstructure:"ipv4" cty:"ipv4" hcl:"ipv4"`
IPRanges []string `mapstructure:"ip_ranges" cty:"ip_ranges" hcl:"ip_ranges"`
Purpose *string `mapstructure:"purpose" required:"true" cty:"purpose" hcl:"purpose"`
Primary *bool `mapstructure:"primary" cty:"primary" hcl:"primary"`
}
FlatInterface is an auto-generated flat version of Interface. Where the contents of a field with a `mapstructure:,squash` tag are bubbled up.
type FlatInterfaceIPv4 ¶ added in v1.2.0
type FlatInterfaceIPv4 struct {
VPC *string `mapstructure:"vpc" cty:"vpc" hcl:"vpc"`
NAT1To1 *string `mapstructure:"nat_1_1" cty:"nat_1_1" hcl:"nat_1_1"`
}
FlatInterfaceIPv4 is an auto-generated flat version of InterfaceIPv4. Where the contents of a field with a `mapstructure:,squash` tag are bubbled up.
func (*FlatInterfaceIPv4) HCL2Spec ¶ added in v1.2.0
func (*FlatInterfaceIPv4) HCL2Spec() map[string]hcldec.Spec
HCL2Spec returns the hcl spec of a InterfaceIPv4. This spec is used by HCL to read the fields of InterfaceIPv4. The decoded values from this spec will then be applied to a FlatInterfaceIPv4.
type FlatMetadata ¶ added in v1.5.0
type FlatMetadata struct {
UserData *string `mapstructure:"user_data" cty:"user_data" hcl:"user_data"`
}
FlatMetadata is an auto-generated flat version of Metadata. Where the contents of a field with a `mapstructure:,squash` tag are bubbled up.
type Interface ¶ added in v1.1.0
type Interface struct {
VLANInterfaceAttributes `mapstructure:",squash"`
VPCInterfaceAttributes `mapstructure:",squash"`
// The purpose of this interface. (public, vlan, vpc)
Purpose string `mapstructure:"purpose" required:"true"`
// Whether this interface is a primary interface.
Primary bool `mapstructure:"primary"`
}
func (*Interface) FlatMapstructure ¶ added in v1.1.0
FlatMapstructure returns a new FlatInterface. FlatInterface is an auto-generated flat version of Interface. Where the contents a fields with a `mapstructure:,squash` tag are bubbled up.
type InterfaceIPv4 ¶ added in v1.2.0
type InterfaceIPv4 struct {
// The IPv4 address from the VPC subnet to use for this interface.
VPC string `mapstructure:"vpc"`
// The public IPv4 address assigned to this Linode to be 1:1 NATed with the VPC IPv4 address.
NAT1To1 *string `mapstructure:"nat_1_1"`
}
func (*InterfaceIPv4) FlatMapstructure ¶ added in v1.2.0
func (*InterfaceIPv4) FlatMapstructure() interface{ HCL2Spec() map[string]hcldec.Spec }
FlatMapstructure returns a new FlatInterfaceIPv4. FlatInterfaceIPv4 is an auto-generated flat version of InterfaceIPv4. Where the contents a fields with a `mapstructure:,squash` tag are bubbled up.
type Metadata ¶ added in v1.5.0
type Metadata struct {
// Base64-encoded (cloud-config)[https://www.linode.com/docs/products/compute/compute-instances/guides/metadata-cloud-config/] data.
UserData string `mapstructure:"user_data"`
}
func (*Metadata) FlatMapstructure ¶ added in v1.5.0
FlatMapstructure returns a new FlatMetadata. FlatMetadata is an auto-generated flat version of Metadata. Where the contents a fields with a `mapstructure:,squash` tag are bubbled up.
type StepCreateSSHKey ¶
StepCreateSSHKey represents a Packer build step that generates SSH key pairs.
func (*StepCreateSSHKey) Cleanup ¶
func (s *StepCreateSSHKey) Cleanup(state multistep.StateBag)
Nothing to clean up. SSH keys are associated with a single Linode instance.
func (*StepCreateSSHKey) Run ¶
func (s *StepCreateSSHKey) Run(_ context.Context, state multistep.StateBag) multistep.StepAction
Run executes the Packer build step that generates SSH key pairs. The key pairs are added to the ssh config
type VLANInterfaceAttributes ¶ added in v1.5.1
type VPCInterfaceAttributes ¶ added in v1.5.1
type VPCInterfaceAttributes struct {
// The ID of the VPC Subnet this interface references.
SubnetID *int `mapstructure:"subnet_id"`
// The IPv4 configuration of this VPC interface.
IPv4 *InterfaceIPv4 `mapstructure:"ipv4"`
// The IPv4 ranges of this VPC interface.
IPRanges []string `mapstructure:"ip_ranges"`
}