From 1c943e4480ba2042fc3feabf363ec88eb2efbaee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Thu, 9 May 2024 19:15:54 +0200 Subject: [PATCH] feat: upload xz compressed images (#16) Required for Talos images: https://www.talos.dev/v1.7/talos-guides/install/cloud-platforms/hetzner/#rescue-mode --- cmd/upload.go | 4 ++-- hcloudimages/client.go | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cmd/upload.go b/cmd/upload.go index a7021b9..843791a 100644 --- a/cmd/upload.go +++ b/cmd/upload.go @@ -86,10 +86,10 @@ func init() { uploadCmd.MarkFlagsMutuallyExclusive(uploadFlagImageURL, uploadFlagImagePath) uploadCmd.MarkFlagsOneRequired(uploadFlagImageURL, uploadFlagImagePath) - uploadCmd.Flags().String(uploadFlagCompression, "", "Type of compression that was used on the disk image [choices: bz2]") + uploadCmd.Flags().String(uploadFlagCompression, "", "Type of compression that was used on the disk image [choices: bz2, xz]") _ = uploadCmd.RegisterFlagCompletionFunc( uploadFlagCompression, - cobra.FixedCompletions([]string{string(hcloudimages.CompressionBZ2)}, cobra.ShellCompDirectiveNoFileComp), + cobra.FixedCompletions([]string{string(hcloudimages.CompressionBZ2), string(hcloudimages.CompressionXZ)}, cobra.ShellCompDirectiveNoFileComp), ) uploadCmd.Flags().String(uploadFlagArchitecture, "", "CPU architecture of the disk image [choices: x86, arm]") diff --git a/hcloudimages/client.go b/hcloudimages/client.go index 9e28f6d..5205b77 100644 --- a/hcloudimages/client.go +++ b/hcloudimages/client.go @@ -86,9 +86,10 @@ type Compression string const ( CompressionNone Compression = "" CompressionBZ2 Compression = "bz2" + CompressionXZ Compression = "xz" // Possible future additions: - // zip,xz,zstd + // zip,zstd ) // NewClient instantiates a new client. It requires a working [*hcloud.Client] to interact with the Hetzner Cloud API. @@ -290,6 +291,8 @@ func (s *Client) Upload(ctx context.Context, options UploadOptions) (*hcloud.Ima switch options.ImageCompression { case CompressionBZ2: cmd += "bzip2 -cd | " + case CompressionXZ: + cmd += "xz -cd | " default: return nil, fmt.Errorf("unknown compression: %q", options.ImageCompression) }