mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-11 17:12:51 +00:00
Fn framework template and process options
- Refactor framework code to be simpler - Add TemplatesFn feature - Add PreProcessFilters feature - Add PostProcessFilters features - Add TemplatesFromDir - Add PatchTemplatesFromDir - Add PatchContainerTemplatesFromDir
This commit is contained in:
154
kyaml/fn/framework/pkger.go
Normal file
154
kyaml/fn/framework/pkger.go
Normal file
@@ -0,0 +1,154 @@
|
||||
// Copyright 2019 The Kubernetes Authors.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package framework
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"github.com/markbates/pkger"
|
||||
)
|
||||
|
||||
type TemplatesFn func(*ResourceList) ([]*template.Template, error)
|
||||
|
||||
// TemplatesFromDir applies a directory of templates as generated resources.
|
||||
func TemplatesFromDir(dirs ...pkger.Dir) TemplatesFn {
|
||||
return func(_ *ResourceList) ([]*template.Template, error) {
|
||||
var pt []*template.Template
|
||||
for i := range dirs {
|
||||
d := dirs[i]
|
||||
err := pkger.Walk(string(d), func(p string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !strings.HasSuffix(info.Name(), ".template.yaml") {
|
||||
return nil
|
||||
}
|
||||
name := path.Join(string(d), info.Name())
|
||||
f, err := pkger.Open(name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
b, err := ioutil.ReadAll(f)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
t, err := template.New(info.Name()).Parse(string(b))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pt = append(pt, t)
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return pt, nil
|
||||
}
|
||||
}
|
||||
|
||||
// PatchTemplatesFn returns a slice of PatchTemplate
|
||||
type PatchTemplatesFn func(*ResourceList) ([]PatchTemplate, error)
|
||||
|
||||
// PT applies a directory of patches using the Selector
|
||||
type PT struct {
|
||||
Selector func() *Selector
|
||||
Dir pkger.Dir
|
||||
}
|
||||
|
||||
// PatchTemplatesFromDir applies a directory of templates as patches.
|
||||
func PatchTemplatesFromDir(templates ...PT) PatchTemplatesFn {
|
||||
return func(*ResourceList) ([]PatchTemplate, error) {
|
||||
var pt []PatchTemplate
|
||||
for i := range templates {
|
||||
v := templates[i]
|
||||
err := pkger.Walk(string(v.Dir), func(p string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
name := path.Join(string(v.Dir), info.Name())
|
||||
|
||||
if !strings.HasSuffix(info.Name(), ".template.yaml") {
|
||||
return nil
|
||||
}
|
||||
f, err := pkger.Open(name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
b, err := ioutil.ReadAll(f)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
t, err := template.New(info.Name()).Parse(string(b))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pt = append(pt, PatchTemplate{Template: t, Selector: v.Selector()})
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return pt, nil
|
||||
}
|
||||
}
|
||||
|
||||
// ContainerPatchTemplateFn returns a slice of ContainerPatchTemplate
|
||||
type ContainerPatchTemplateFn func(*ResourceList) ([]ContainerPatchTemplate, error)
|
||||
|
||||
// CPT applies a directory of container patches using the Selector
|
||||
type CPT struct {
|
||||
Selector func() *Selector
|
||||
Dir pkger.Dir
|
||||
Names []string
|
||||
}
|
||||
|
||||
// ContainerPatchTemplatesFromDir applies a directory of templates as container patches.
|
||||
func ContainerPatchTemplatesFromDir(templates ...CPT) ContainerPatchTemplateFn {
|
||||
return func(*ResourceList) ([]ContainerPatchTemplate, error) {
|
||||
var cpt []ContainerPatchTemplate
|
||||
for i := range templates {
|
||||
v := templates[i]
|
||||
err := pkger.Walk(string(v.Dir), func(p string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !strings.HasSuffix(info.Name(), ".template.yaml") {
|
||||
return nil
|
||||
}
|
||||
|
||||
name := path.Join(string(v.Dir), info.Name())
|
||||
f, err := pkger.Open(name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
b, err := ioutil.ReadAll(f)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
t, err := template.New(info.Name()).Parse(string(b))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
cpt = append(cpt, ContainerPatchTemplate{
|
||||
PatchTemplate: PatchTemplate{Template: t, Selector: v.Selector()},
|
||||
ContainerNames: v.Names,
|
||||
})
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return cpt, nil
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user