Skip to content

Commit

Permalink
Merge pull request #544 from nak3/add-boiler-yaml
Browse files Browse the repository at this point in the history
✨ Add header and year options for yaml generator
  • Loading branch information
k8s-ci-robot committed Jan 5, 2023
2 parents 0b49313 + 67819da commit 54a2e9f
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 6 deletions.
20 changes: 19 additions & 1 deletion pkg/crd/gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"go/ast"
"go/types"
"sort"
"strings"

apiext "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
Expand Down Expand Up @@ -78,6 +79,12 @@ type Generator struct {

// GenerateEmbeddedObjectMeta specifies if any embedded ObjectMeta in the CRD should be generated
GenerateEmbeddedObjectMeta *bool `marker:",optional"`

// HeaderFile specifies the header text (e.g. license) to prepend to generated files.
HeaderFile string `marker:",optional"`

// Year specifies the year to substitute for " YEAR" in the header file.
Year string `marker:",optional"`
}

func (Generator) CheckFilter() loader.NodeFilter {
Expand Down Expand Up @@ -128,6 +135,17 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error {
crdVersions = []string{defaultVersion}
}

var headerText string

if g.HeaderFile != "" {
headerBytes, err := ctx.ReadFile(g.HeaderFile)
if err != nil {
return err
}
headerText = string(headerBytes)
}
headerText = strings.ReplaceAll(headerText, " YEAR", " "+g.Year)

for _, groupKind := range kubeKinds {
parser.NeedCRDFor(groupKind, g.MaxDescLen)
crdRaw := parser.CustomResourceDefinitions[groupKind]
Expand All @@ -153,7 +171,7 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error {
} else {
fileName = fmt.Sprintf("%s_%s.%s.yaml", crdRaw.Spec.Group, crdRaw.Spec.Names.Plural, crdVersions[i])
}
if err := ctx.WriteYAML(fileName, []interface{}{crd}, genall.WithTransform(transformRemoveCRDStatus)); err != nil {
if err := ctx.WriteYAML(fileName, headerText, []interface{}{crd}, genall.WithTransform(transformRemoveCRDStatus)); err != nil {
return err
}
}
Expand Down
7 changes: 6 additions & 1 deletion pkg/genall/genall.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,13 +136,18 @@ func WithTransform(transform func(obj map[string]interface{}) error) *WriteYAMLO
// WriteYAML writes the given objects out, serialized as YAML, using the
// context's OutputRule. Objects are written as separate documents, separated
// from each other by `---` (as per the YAML spec).
func (g GenerationContext) WriteYAML(itemPath string, objs []interface{}, options ...*WriteYAMLOptions) error {
func (g GenerationContext) WriteYAML(itemPath, headerText string, objs []interface{}, options ...*WriteYAMLOptions) error {
out, err := g.Open(nil, itemPath)
if err != nil {
return err
}
defer out.Close()

_, err = out.Write([]byte(headerText))
if err != nil {
return err
}

for _, obj := range objs {
yamlContent, err := yamlMarshal(obj, options...)
if err != nil {
Expand Down
18 changes: 17 additions & 1 deletion pkg/rbac/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,12 @@ func (r *Rule) ToRule() rbacv1.PolicyRule {
type Generator struct {
// RoleName sets the name of the generated ClusterRole.
RoleName string

// HeaderFile specifies the header text (e.g. license) to prepend to generated files.
HeaderFile string `marker:",optional"`

// Year specifies the year to substitute for " YEAR" in the header file.
Year string `marker:",optional"`
}

func (Generator) RegisterMarkers(into *markers.Registry) error {
Expand Down Expand Up @@ -263,5 +269,15 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error {
return nil
}

return ctx.WriteYAML("role.yaml", objs)
var headerText string
if g.HeaderFile != "" {
headerBytes, err := ctx.ReadFile(g.HeaderFile)
if err != nil {
return err
}
headerText = string(headerBytes)
}
headerText = strings.ReplaceAll(headerText, " YEAR", " "+g.Year)

return ctx.WriteYAML("role.yaml", headerText, objs)
}
22 changes: 19 additions & 3 deletions pkg/webhook/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,13 @@ func (c Config) webhookVersions() ([]string, error) {
// +controllertools:marker:generateHelp

// Generator generates (partial) {Mutating,Validating}WebhookConfiguration objects.
type Generator struct{}
type Generator struct {
// HeaderFile specifies the header text (e.g. license) to prepend to generated files.
HeaderFile string `marker:",optional"`

// Year specifies the year to substitute for " YEAR" in the header file.
Year string `marker:",optional"`
}

func (Generator) RegisterMarkers(into *markers.Registry) error {
if err := into.Register(ConfigDefinition); err != nil {
Expand All @@ -314,7 +320,7 @@ func (Generator) RegisterMarkers(into *markers.Registry) error {
return nil
}

func (Generator) Generate(ctx *genall.GenerationContext) error {
func (g Generator) Generate(ctx *genall.GenerationContext) error {
supportedWebhookVersions := supportedWebhookVersions()
mutatingCfgs := make(map[string][]admissionregv1.MutatingWebhook, len(supportedWebhookVersions))
validatingCfgs := make(map[string][]admissionregv1.ValidatingWebhook, len(supportedWebhookVersions))
Expand Down Expand Up @@ -405,14 +411,24 @@ func (Generator) Generate(ctx *genall.GenerationContext) error {
}
}

var headerText string
if g.HeaderFile != "" {
headerBytes, err := ctx.ReadFile(g.HeaderFile)
if err != nil {
return err
}
headerText = string(headerBytes)
}
headerText = strings.ReplaceAll(headerText, " YEAR", " "+g.Year)

for k, v := range versionedWebhooks {
var fileName string
if k == defaultWebhookVersion {
fileName = fmt.Sprintf("manifests.yaml")
} else {
fileName = fmt.Sprintf("manifests.%s.yaml", k)
}
if err := ctx.WriteYAML(fileName, v); err != nil {
if err := ctx.WriteYAML(fileName, headerText, v); err != nil {
return err
}
}
Expand Down

0 comments on commit 54a2e9f

Please sign in to comment.