fix(postrenderer): correctly serialize manifests for WASM plugins

WASM post-renderer plugins were receiving empty manifests because
bytes.Buffer does not serialize its contents when encoded to JSON.

This change updates the schema to use string and converts between
string and bytes.Buffer at runtime boundaries so manifests are passed
correctly to and from plugins.

Signed-off-by: samuraikillers <fatechanger77@gmail.com>
pull/31834/head
samuraikillers 1 month ago
parent 4a91f3ad5c
commit 4b6329de7e

@ -255,7 +255,7 @@ func (r *SubprocessPluginRuntime) runPostrenderer(input *Input) (*Output, error)
go func() {
defer stdin.Close()
io.Copy(stdin, msg.Manifests)
io.Copy(stdin, bytes.NewBufferString(msg.Manifests))
}()
postRendered := &bytes.Buffer{}
@ -272,7 +272,7 @@ func (r *SubprocessPluginRuntime) runPostrenderer(input *Input) (*Output, error)
return &Output{
Message: schema.OutputMessagePostRendererV1{
Manifests: postRendered,
Manifests: postRendered.String(),
},
}, nil
}

@ -16,19 +16,15 @@ limitations under the License.
package schema
import (
"bytes"
)
// InputMessagePostRendererV1 implements Input.Message
type InputMessagePostRendererV1 struct {
Manifests *bytes.Buffer `json:"manifests"`
Manifests string `json:"manifests"`
// from CLI --post-renderer-args
ExtraArgs []string `json:"extraArgs"`
}
type OutputMessagePostRendererV1 struct {
Manifests *bytes.Buffer `json:"manifests"`
Manifests string `json:"manifests"`
}
type ConfigPostRendererV1 struct{}

@ -64,7 +64,7 @@ func (r *postRendererPlugin) Run(renderedManifests *bytes.Buffer) (*bytes.Buffer
input := &plugin.Input{
Message: schema.InputMessagePostRendererV1{
ExtraArgs: r.args,
Manifests: renderedManifests,
Manifests: renderedManifests.String(),
},
}
output, err := r.plugin.Invoke(context.Background(), input)
@ -76,9 +76,9 @@ func (r *postRendererPlugin) Run(renderedManifests *bytes.Buffer) (*bytes.Buffer
// If the binary returned almost nothing, it's likely that it didn't
// successfully render anything
if len(bytes.TrimSpace(outputMessage.Manifests.Bytes())) == 0 {
if len(bytes.TrimSpace([]byte(outputMessage.Manifests))) == 0 {
return nil, fmt.Errorf("post-renderer %q produced empty output", r.plugin.Metadata().Name)
}
return outputMessage.Manifests, nil
return bytes.NewBufferString(outputMessage.Manifests), nil
}

Loading…
Cancel
Save