Documentation
¶
Index ¶
Constants ¶
const BuilderID = "oxide.instance"
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Artifact ¶
type Artifact struct {
// Unique identifier of the created image.
ImageID string
// Name of the created image.
ImageName string
// Additional state data associated with the build.
StateData map[string]any
}
Artifact represents the Oxide image created by the builder. This artifact contains the image ID and name that can be used to launch new instances.
func (*Artifact) Destroy ¶
Destroy deletes the artifact when it is determined to no longer be needed.
type Builder ¶
type Builder struct {
// contains filtered or unexported fields
}
The `oxide-instance` builder creates custom images for use with [Oxide](https://oxide.computer). The builder launches a temporary instance from an existing source image, connects to the instance using its external IP, provisions the instance, and then creates a new image from the instance's boot disk. The resulting image can be used to launch new instances on Oxide.
The builder does not manage images. Once it creates an image, it is up to you to use it or delete it.
func (*Builder) ConfigSpec ¶
func (b *Builder) ConfigSpec() hcldec.ObjectSpec
ConfigSpec returns the HCL configuration specification for the builder.
type Config ¶
type Config struct {
common.PackerConfig `mapstructure:",squash"`
// Packer communicator configuration to configure how Packer connects to the
// instance for provisioning.
Comm communicator.Config `mapstructure:",squash"`
// Oxide API URL (e.g., `https://oxide.sys.example.com`). If not specified, this
// defaults to the value of the `OXIDE_HOST` environment variable.
Host string `mapstructure:"host" required:"true"`
// Oxide API token. If not specified, this defaults to the value of the
// `OXIDE_TOKEN` environment variable.
Token string `mapstructure:"token" required:"true"`
// Image ID to use for the instance's boot disk. This can be obtained from the
// `oxide-image` data source.
BootDiskImageID string `mapstructure:"boot_disk_image_id" required:"true"`
// Name or ID of the project where the temporary instance and resulting image
// will be created.
Project string `mapstructure:"project" required:"true"`
// Size of the boot disk in bytes. Defaults to `21474836480`, or 20 GiB.
BootDiskSize uint64 `mapstructure:"boot_disk_size"`
// IP pool to allocate the instance's external IP from. If not specified, the
// silo's default IP pool will be used.
IPPool string `mapstructure:"ip_pool"`
// VPC to create the instance within. Defaults to `default`.
VPC string `mapstructure:"vpc"`
// Subnet to create the instance within. Defaults to `default`.
Subnet string `mapstructure:"subnet"`
// Name of the temporary instance. Defaults to `packer-{{timestamp}}`.
Name string `mapstructure:"name"`
// Hostname of the temporary instance. Defaults to `packer-{{timestamp}}`.
Hostname string `mapstructure:"hostname"`
// Number of vCPUs to provision the instance with. Defaults to `1`.
CPUs uint64 `mapstructure:"cpus"`
// Amount of memory to provision the instance with, in bytes. Defaults to
// `2147483648`, or 2 GiB.
Memory uint64 `mapstructure:"memory"`
// An array of names or IDs of SSH public keys to inject into the instance.
SSHPublicKeys []string `mapstructure:"ssh_public_keys"`
// Name of the resulting image artifact. Defaults to
// `SOURCE_IMAGE_NAME-{{timestamp}}` where `SOURCE_IMAGE_NAME` is the name of
// the source image as retrieved from Oxide.
ArtifactName string `mapstructure:"artifact_name"`
// Operating system of the resulting image artifact. Defaults to the OS of the
// source image as retrieved from Oxide.
ArtifactOS string `mapstructure:"artifact_os"`
// Version of the resulting image artifact. Defaults to
// `SOURCE_IMAGE_VERSION-{{timestamp}}` where `SOURCE_IMAGE_VERSION` is the
// version of the source image as retrieved from Oxide.
ArtifactVersion string `mapstructure:"artifact_version"`
// contains filtered or unexported fields
}
The configuration arguments for the builder. Arguments can either be required or optional.
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"`
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"`
Host *string `mapstructure:"host" required:"true" cty:"host" hcl:"host"`
Token *string `mapstructure:"token" required:"true" cty:"token" hcl:"token"`
BootDiskImageID *string `mapstructure:"boot_disk_image_id" required:"true" cty:"boot_disk_image_id" hcl:"boot_disk_image_id"`
Project *string `mapstructure:"project" required:"true" cty:"project" hcl:"project"`
BootDiskSize *uint64 `mapstructure:"boot_disk_size" cty:"boot_disk_size" hcl:"boot_disk_size"`
IPPool *string `mapstructure:"ip_pool" cty:"ip_pool" hcl:"ip_pool"`
VPC *string `mapstructure:"vpc" cty:"vpc" hcl:"vpc"`
Subnet *string `mapstructure:"subnet" cty:"subnet" hcl:"subnet"`
Name *string `mapstructure:"name" cty:"name" hcl:"name"`
Hostname *string `mapstructure:"hostname" cty:"hostname" hcl:"hostname"`
CPUs *uint64 `mapstructure:"cpus" cty:"cpus" hcl:"cpus"`
Memory *uint64 `mapstructure:"memory" cty:"memory" hcl:"memory"`
SSHPublicKeys []string `mapstructure:"ssh_public_keys" cty:"ssh_public_keys" hcl:"ssh_public_keys"`
ArtifactName *string `mapstructure:"artifact_name" cty:"artifact_name" hcl:"artifact_name"`
ArtifactOS *string `mapstructure:"artifact_os" cty:"artifact_os" hcl:"artifact_os"`
ArtifactVersion *string `mapstructure:"artifact_version" cty:"artifact_version" hcl:"artifact_version"`
}
FlatConfig is an auto-generated flat version of Config. Where the contents of a field with a `mapstructure:,squash` tag are bubbled up.