Skip to content

Commit 834b894

Browse files
committed
fix: k8s escape resource filename
Signed-off-by: chenk <[email protected]>
1 parent e939169 commit 834b894

File tree

2 files changed

+43
-3
lines changed

2 files changed

+43
-3
lines changed

pkg/k8s/scanner/io.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package scanner
33
import (
44
"fmt"
55
"os"
6+
"regexp"
67
"runtime"
7-
"strings"
88

99
"golang.org/x/xerrors"
1010
"gopkg.in/yaml.v3"
@@ -18,8 +18,8 @@ func createTempFile(artifact *artifacts.Artifact) (string, error) {
1818
filename := fmt.Sprintf("%s-%s-%s-*.yaml", artifact.Namespace, artifact.Kind, artifact.Name)
1919

2020
if runtime.GOOS == "windows" {
21-
//sanitize file name to removed unsupported char on windows os
22-
filename = strings.ReplaceAll(filename, ":", "-")
21+
//removes characters not permitted in file/directory names on Windows
22+
filename = filenameWindowsFriendly(filename)
2323
}
2424
file, err := os.CreateTemp("", filename)
2525
if err != nil {
@@ -44,3 +44,9 @@ func removeFile(filename string) {
4444
log.Logger.Errorf("failed to remove temp file %s: %s:", filename, err)
4545
}
4646
}
47+
48+
var r, _ = regexp.Compile("\\\\|/|:|\\*|\\?|<|>")
49+
50+
func filenameWindowsFriendly(name string) string {
51+
return r.ReplaceAllString(name, "_")
52+
}

pkg/k8s/scanner/io_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package scanner
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
)
8+
9+
func Test_FilenameWindowsFriendly(t *testing.T) {
10+
11+
tests := []struct {
12+
name string
13+
fileName string
14+
want string
15+
}{
16+
{
17+
name: "name with invalid char - colon",
18+
fileName: `kube-system-Role-system:controller:bootstrap-signer-2934213283.yaml`,
19+
want: `kube-system-Role-system_controller_bootstrap-signer-2934213283.yaml`,
20+
},
21+
{
22+
name: "name with no invalid chars",
23+
fileName: `kube-system-Role-system-controller-bootstrap-signer-2934213283.yaml`,
24+
want: `kube-system-Role-system-controller-bootstrap-signer-2934213283.yaml`,
25+
},
26+
}
27+
28+
for _, test := range tests {
29+
t.Run(test.name, func(t *testing.T) {
30+
got := filenameWindowsFriendly(test.fileName)
31+
assert.Equal(t, test.want, got)
32+
})
33+
}
34+
}

0 commit comments

Comments
 (0)