Skip to content

Commit 5d40fd6

Browse files
Simon Emmsroboquat
Simon Emms
authored andcommitted
[installer]: refactor yq to allow it run scripts against strings
1 parent a80f68e commit 5d40fd6

File tree

2 files changed

+56
-54
lines changed

2 files changed

+56
-54
lines changed

install/installer/pkg/postprocess/postprocess.go

Lines changed: 3 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,9 @@
44
package postprocess
55

66
import (
7-
"bytes"
8-
"fmt"
9-
"os"
10-
"strings"
11-
127
"github.com/gitpod-io/gitpod/installer/pkg/common"
138
openvsxproxy "github.com/gitpod-io/gitpod/installer/pkg/components/openvsx-proxy"
14-
"github.com/mikefarah/yq/v4/pkg/yqlib"
15-
logging "gopkg.in/op/go-logging.v1"
9+
"github.com/gitpod-io/gitpod/installer/pkg/yq"
1610
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1711
"k8s.io/utils/pointer"
1812
)
@@ -38,52 +32,6 @@ type Processor struct {
3832
Name *string // Optional
3933
}
4034

41-
// process emulates how YQ parsers the file
42-
func process(expression string, obj *common.RuntimeObject) error {
43-
// Stop the logging to Stderr
44-
var format = logging.MustStringFormatter(
45-
`%{color}%{time:15:04:05} %{shortfunc} [%{level:.4s}]%{color:reset} %{message}`,
46-
)
47-
var backend = logging.AddModuleLevel(
48-
logging.NewBackendFormatter(logging.NewLogBackend(os.Stderr, "", 0), format))
49-
50-
backend.SetLevel(logging.ERROR, "")
51-
logging.SetBackend(backend)
52-
// End of logger config
53-
54-
yqlib.InitExpressionParser()
55-
56-
var writer bytes.Buffer
57-
printerWriter := yqlib.NewSinglePrinterWriter(&writer)
58-
encoder := yqlib.NewYamlEncoder(2, false, false, true)
59-
60-
printer := yqlib.NewPrinter(encoder, printerWriter)
61-
62-
decoder := yqlib.NewYamlDecoder()
63-
64-
streamEvaluator := yqlib.NewStreamEvaluator()
65-
66-
reader := strings.NewReader(obj.Content)
67-
68-
node, err := yqlib.ExpressionParser.ParseExpression(expression)
69-
if err != nil {
70-
return err
71-
}
72-
73-
// This is used for debugging
74-
filename := fmt.Sprintf("%s %s %s", obj.APIVersion, obj.Kind, obj.Metadata.Name)
75-
76-
_, err = streamEvaluator.Evaluate(filename, reader, node, printer, "", decoder)
77-
if err != nil {
78-
return err
79-
}
80-
81-
// Overwrite the content with the parsed data
82-
obj.Content = writer.String()
83-
84-
return nil
85-
}
86-
8735
func useProcessor(object common.RuntimeObject, processor Processor) bool {
8836
if object.APIVersion == processor.Type.APIVersion && object.Kind == processor.Type.Kind {
8937
// Name is optional
@@ -105,10 +53,11 @@ func Run(objects []common.RuntimeObject) ([]common.RuntimeObject, error) {
10553
for _, o := range objects {
10654
for _, p := range Processors {
10755
if useProcessor(o, p) {
108-
err := process(p.Expression, &o)
56+
output, err := yq.Process(o.Content, p.Expression)
10957
if err != nil {
11058
return nil, err
11159
}
60+
o.Content = *output
11261
}
11362
}
11463

install/installer/pkg/yq/yq.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
2+
// Licensed under the MIT License. See License-MIT.txt in the project root for license information.
3+
4+
package yq
5+
6+
import (
7+
"bytes"
8+
"os"
9+
"strings"
10+
11+
"github.com/mikefarah/yq/v4/pkg/yqlib"
12+
logging "gopkg.in/op/go-logging.v1"
13+
"k8s.io/utils/pointer"
14+
)
15+
16+
func Process(input string, expression string) (*string, error) {
17+
// Stop the logging to Stderr
18+
var format = logging.MustStringFormatter(
19+
`%{color}%{time:15:04:05} %{shortfunc} [%{level:.4s}]%{color:reset} %{message}`,
20+
)
21+
var backend = logging.AddModuleLevel(
22+
logging.NewBackendFormatter(logging.NewLogBackend(os.Stderr, "", 0), format))
23+
24+
backend.SetLevel(logging.ERROR, "")
25+
logging.SetBackend(backend)
26+
// End of logger config
27+
28+
yqlib.InitExpressionParser()
29+
30+
var writer bytes.Buffer
31+
printerWriter := yqlib.NewSinglePrinterWriter(&writer)
32+
encoder := yqlib.NewYamlEncoder(2, false, false, true)
33+
34+
printer := yqlib.NewPrinter(encoder, printerWriter)
35+
36+
decoder := yqlib.NewYamlDecoder()
37+
38+
streamEvaluator := yqlib.NewStreamEvaluator()
39+
40+
reader := strings.NewReader(input)
41+
42+
node, err := yqlib.ExpressionParser.ParseExpression(expression)
43+
if err != nil {
44+
return nil, err
45+
}
46+
47+
_, err = streamEvaluator.Evaluate("gitpod-installer.tmp.yaml", reader, node, printer, "", decoder)
48+
if err != nil {
49+
return nil, err
50+
}
51+
52+
return pointer.String(writer.String()), nil
53+
}

0 commit comments

Comments
 (0)