From 80d8748780b0fbfb4d1129c67f4ad9717a970835 Mon Sep 17 00:00:00 2001 From: Stefan Majer Date: Wed, 31 May 2023 09:00:03 +0200 Subject: [PATCH] Enhance Decoder to cope with plaintext (#7993) * Enhance Decoder to cope with plaintext * Add godoc --- .../oscommon/actuator/actuator_util.go | 3 --- .../extensions/v1alpha1/helper/filecodec.go | 17 +++++++++++++++-- .../extensions/v1alpha1/helper/helper_test.go | 19 +++++++++++++++++++ .../v1alpha1/types_operatingsystemconfig.go | 2 ++ 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_util.go b/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_util.go index 30d9b1edb22..97481c65a65 100644 --- a/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_util.go +++ b/extensions/pkg/controller/operatingsystemconfig/oscommon/actuator/actuator_util.go @@ -77,9 +77,6 @@ func CloudConfigFromOperatingSystemConfig( // DataForFileContent returns the content for a FileContent, retrieving from a Secret if necessary. func DataForFileContent(ctx context.Context, c client.Client, namespace string, content *extensionsv1alpha1.FileContent) ([]byte, error) { if inline := content.Inline; inline != nil { - if len(inline.Encoding) == 0 { - return []byte(inline.Data), nil - } return extensionsv1alpha1helper.Decode(inline.Encoding, []byte(inline.Data)) } diff --git a/pkg/apis/extensions/v1alpha1/helper/filecodec.go b/pkg/apis/extensions/v1alpha1/helper/filecodec.go index 9a0a38de231..e085276e377 100644 --- a/pkg/apis/extensions/v1alpha1/helper/filecodec.go +++ b/pkg/apis/extensions/v1alpha1/helper/filecodec.go @@ -25,6 +25,7 @@ import ( ) var validFileCodecIDs = map[extensionsv1alpha1.FileCodecID]struct{}{ + extensionsv1alpha1.PlainFileCodecID: {}, extensionsv1alpha1.B64FileCodecID: {}, extensionsv1alpha1.GZIPFileCodecID: {}, extensionsv1alpha1.GZIPB64FileCodecID: {}, @@ -37,12 +38,23 @@ type FileCodec interface { } var ( + // PlainFileCodec is a noop FileCodec. + PlainFileCodec FileCodec = plainFileCodec{} // B64FileCodec is the base64 FileCodec. B64FileCodec FileCodec = b64FileCodec{} // GZIPFileCodec is the gzip FileCodec. GZIPFileCodec FileCodec = gzipFileCodec{} ) +type plainFileCodec struct{} + +func (plainFileCodec) Encode(data []byte) ([]byte, error) { + return data, nil +} +func (plainFileCodec) Decode(data []byte) ([]byte, error) { + return data, nil +} + type b64FileCodec struct{} var encoding = base64.StdEncoding @@ -92,8 +104,9 @@ func ParseFileCodecID(s string) (extensionsv1alpha1.FileCodecID, error) { } var fileCodecIDToFileCodec = map[extensionsv1alpha1.FileCodecID]FileCodec{ - extensionsv1alpha1.B64FileCodecID: B64FileCodec, - extensionsv1alpha1.GZIPFileCodecID: GZIPFileCodec, + extensionsv1alpha1.PlainFileCodecID: PlainFileCodec, + extensionsv1alpha1.B64FileCodecID: B64FileCodec, + extensionsv1alpha1.GZIPFileCodecID: GZIPFileCodec, } // FileCodecForID retrieves the FileCodec for the given FileCodecID. diff --git a/pkg/apis/extensions/v1alpha1/helper/helper_test.go b/pkg/apis/extensions/v1alpha1/helper/helper_test.go index ecade2b5542..a8b539ac8ca 100644 --- a/pkg/apis/extensions/v1alpha1/helper/helper_test.go +++ b/pkg/apis/extensions/v1alpha1/helper/helper_test.go @@ -76,3 +76,22 @@ var _ = Describe("helper", func() { }) }) }) + +var _ = Describe("filecodec", func() { + DescribeTable("#EncodeDecode", + func(input extensionsv1alpha1.FileContentInline) { + codeID, err := ParseFileCodecID(input.Encoding) + Expect(err).To(BeNil()) + encoded, err := FileCodecForID(codeID).Encode([]byte(input.Data)) + Expect(err).To(BeNil()) + + decoded, err := Decode(input.Encoding, encoded) + Expect(err).To(BeNil()) + Expect(input.Data).To(Equal(string(decoded))) + }, + + Entry("plain", extensionsv1alpha1.FileContentInline{Encoding: "", Data: "plain data input"}), + Entry("base64", extensionsv1alpha1.FileContentInline{Encoding: "b64", Data: "base64 data input"}), + Entry("gzip", extensionsv1alpha1.FileContentInline{Encoding: "gzip", Data: "gzip data input"}), + ) +}) diff --git a/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go b/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go index 4fc3a6a5cf1..149b1619c99 100644 --- a/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go +++ b/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go @@ -241,6 +241,8 @@ const ContainerDRuntimeContainersBinFolder = "/var/bin/containerruntimes" type FileCodecID string const ( + // PlainFileCodecID is the plain file codec id. + PlainFileCodecID FileCodecID = "" // B64FileCodecID is the base64 file codec id. B64FileCodecID FileCodecID = "b64" // GZIPFileCodecID is the gzip file codec id.