@@ -8,19 +8,22 @@ import (
8
8
"strings"
9
9
"text/template"
10
10
11
+ "github.com/openshift/api/config"
12
+ "github.com/openshift/library-go/pkg/manifest"
11
13
"github.com/pkg/errors"
12
-
14
+ "k8s.io/apimachinery/pkg/runtime/schema"
13
15
utilerrors "k8s.io/apimachinery/pkg/util/errors"
14
16
"k8s.io/apimachinery/pkg/util/sets"
15
17
)
16
18
17
19
// Render renders critical manifests from /manifests to outputDir.
18
20
func Render (outputDir , releaseImage , clusterProfile string ) error {
19
21
var (
20
- manifestsDir = filepath .Join (DefaultPayloadDir , CVOManifestDir )
21
- oManifestsDir = filepath .Join (outputDir , "manifests" )
22
- bootstrapDir = "/bootstrap"
23
- oBootstrapDir = filepath .Join (outputDir , "bootstrap" )
22
+ manifestsDir = filepath .Join (DefaultPayloadDir , CVOManifestDir )
23
+ releaseManifestsDir = filepath .Join (DefaultPayloadDir , ReleaseManifestDir )
24
+ oManifestsDir = filepath .Join (outputDir , "manifests" )
25
+ bootstrapDir = "/bootstrap"
26
+ oBootstrapDir = filepath .Join (outputDir , "bootstrap" )
24
27
25
28
renderConfig = manifestRenderConfig {
26
29
ReleaseImage : releaseImage ,
@@ -29,26 +32,36 @@ func Render(outputDir, releaseImage, clusterProfile string) error {
29
32
)
30
33
31
34
tasks := []struct {
32
- idir string
33
- odir string
34
- skipFiles sets.Set [string ]
35
+ idir string
36
+ odir string
37
+ processTemplate bool
38
+ skipFiles sets.Set [string ]
39
+ filterGroupKind sets.Set [schema.GroupKind ]
35
40
}{{
36
- idir : manifestsDir ,
37
- odir : oManifestsDir ,
41
+ idir : manifestsDir ,
42
+ odir : oManifestsDir ,
43
+ processTemplate : true ,
38
44
skipFiles : sets .New [string ](
39
- "image-references" ,
40
45
"0000_90_cluster-version-operator_00_prometheusrole.yaml" ,
41
46
"0000_90_cluster-version-operator_01_prometheusrolebinding.yaml" ,
42
47
"0000_90_cluster-version-operator_02_servicemonitor.yaml" ,
43
48
),
44
49
}, {
45
- idir : bootstrapDir ,
46
- odir : oBootstrapDir ,
47
- skipFiles : sets.Set [string ]{},
50
+ idir : releaseManifestsDir ,
51
+ odir : oManifestsDir ,
52
+ filterGroupKind : sets .New [schema.GroupKind ](
53
+ schema.GroupKind {Group : config .GroupName , Kind : "ClusterImagePolicy" },
54
+ schema.GroupKind {Group : config .GroupName , Kind : "ImagePolicy" },
55
+ ),
56
+ }, {
57
+ idir : bootstrapDir ,
58
+ odir : oBootstrapDir ,
59
+ processTemplate : true ,
60
+ skipFiles : sets.Set [string ]{},
48
61
}}
49
62
var errs []error
50
63
for _ , task := range tasks {
51
- if err := renderDir (renderConfig , task .idir , task .odir , task .skipFiles ); err != nil {
64
+ if err := renderDir (renderConfig , task .idir , task .odir , task .processTemplate , task . skipFiles , task . filterGroupKind ); err != nil {
52
65
errs = append (errs , err )
53
66
}
54
67
}
@@ -60,7 +73,7 @@ func Render(outputDir, releaseImage, clusterProfile string) error {
60
73
return nil
61
74
}
62
75
63
- func renderDir (renderConfig manifestRenderConfig , idir , odir string , skipFiles sets.Set [string ]) error {
76
+ func renderDir (renderConfig manifestRenderConfig , idir , odir string , processTemplate bool , skipFiles sets.Set [string ], filterGroupKind sets. Set [schema. GroupKind ]) error {
64
77
if err := os .MkdirAll (odir , 0666 ); err != nil {
65
78
return err
66
79
}
@@ -73,6 +86,10 @@ func renderDir(renderConfig manifestRenderConfig, idir, odir string, skipFiles s
73
86
if file .IsDir () {
74
87
continue
75
88
}
89
+ if ! hasManifestExtension (file .Name ()) {
90
+ continue
91
+ }
92
+
76
93
if skipFiles .Has (file .Name ()) {
77
94
continue
78
95
}
@@ -90,10 +107,40 @@ func renderDir(renderConfig manifestRenderConfig, idir, odir string, skipFiles s
90
107
continue
91
108
}
92
109
93
- rraw , err := renderManifest (renderConfig , iraw )
94
- if err != nil {
95
- errs = append (errs , err )
96
- continue
110
+ var rraw []byte
111
+ if processTemplate {
112
+ rraw , err = renderManifest (renderConfig , iraw )
113
+ if err != nil {
114
+ errs = append (errs , fmt .Errorf ("render template %s from %s: %w" , file .Name (), idir , err ))
115
+ continue
116
+ }
117
+ } else {
118
+ rraw = iraw
119
+ }
120
+
121
+ if len (filterGroupKind ) > 0 {
122
+ manifests , err := manifest .ParseManifests (bytes .NewReader (rraw ))
123
+ if err != nil {
124
+ errs = append (errs , fmt .Errorf ("parse manifest %s from %s: %w" , file .Name (), idir , err ))
125
+ continue
126
+ }
127
+
128
+ filteredManifests := make ([]string , 0 , len (manifests ))
129
+ for _ , manifest := range manifests {
130
+ if filterGroupKind .Has (manifest .GVK .GroupKind ()) {
131
+ filteredManifests = append (filteredManifests , string (manifest .Raw ))
132
+ }
133
+ }
134
+
135
+ if len (filteredManifests ) == 0 {
136
+ continue
137
+ }
138
+
139
+ if len (filteredManifests ) == 1 {
140
+ rraw = []byte (filteredManifests [0 ])
141
+ } else {
142
+ rraw = []byte (strings .Join (filteredManifests , "\n ---\n " ))
143
+ }
97
144
}
98
145
99
146
opath := filepath .Join (odir , file .Name ())
0 commit comments