From 76ad6bb1386347734457ab7a14747572fb20399f Mon Sep 17 00:00:00 2001 From: David Eads Date: Fri, 20 Apr 2018 15:45:19 -0400 Subject: [PATCH] separate single use helpers and actual shared code --- hack/import-restrictions.json | 3 +- pkg/build/controller/jenkins/jenkins.go | 4 +- pkg/oc/cli/cmd/process.go | 6 +- pkg/oc/generate/app/templatelookup.go | 43 ++++++++- pkg/oc/generate/cmd/template.go | 4 +- pkg/template/doc.go | 3 - pkg/template/helper.go | 87 ------------------- pkg/template/registry/template/rest.go | 4 +- .../registry/templateinstance/strategy.go | 24 ++++- .../{ => templateprocessing}/template.go | 2 +- .../{ => templateprocessing}/template_test.go | 6 +- 11 files changed, 77 insertions(+), 109 deletions(-) delete mode 100644 pkg/template/doc.go delete mode 100644 pkg/template/helper.go rename pkg/template/{ => templateprocessing}/template.go (99%) rename pkg/template/{ => templateprocessing}/template_test.go (98%) diff --git a/hack/import-restrictions.json b/hack/import-restrictions.json index 22ea8dd5b545..c82760c7ddfc 100644 --- a/hack/import-restrictions.json +++ b/hack/import-restrictions.json @@ -441,6 +441,7 @@ "github.com/openshift/origin/pkg/api/apihelpers", "github.com/openshift/origin/pkg/api/install", "github.com/openshift/origin/pkg/api/latest", + "github.com/openshift/origin/pkg/api/legacygroupification", "github.com/openshift/origin/pkg/api/meta", "github.com/openshift/origin/pkg/apps/apis/apps", "github.com/openshift/origin/pkg/apps/apis/apps/install", @@ -508,11 +509,11 @@ "github.com/openshift/origin/pkg/serviceaccounts", "github.com/openshift/origin/pkg/serviceaccounts/util", "github.com/openshift/origin/pkg/service/admission", - "github.com/openshift/origin/pkg/template", "github.com/openshift/origin/pkg/template/apis/template", "github.com/openshift/origin/pkg/template/apis/template/validation", "github.com/openshift/origin/pkg/template/client/internalversion", "github.com/openshift/origin/pkg/template/generator", + "github.com/openshift/origin/pkg/template/templateprocessing", "github.com/openshift/origin/pkg/unidling/api", "github.com/openshift/origin/pkg/unidling/util", "github.com/openshift/origin/pkg/user/apis/user", diff --git a/pkg/build/controller/jenkins/jenkins.go b/pkg/build/controller/jenkins/jenkins.go index a34f0df61c35..4f365d752ab6 100644 --- a/pkg/build/controller/jenkins/jenkins.go +++ b/pkg/build/controller/jenkins/jenkins.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/golang/glog" + "github.com/openshift/origin/pkg/template/templateprocessing" "k8s.io/kubernetes/pkg/api/legacyscheme" kerrs "k8s.io/apimachinery/pkg/api/errors" @@ -13,7 +14,6 @@ import ( kapi "k8s.io/kubernetes/pkg/apis/core" serverapi "github.com/openshift/origin/pkg/cmd/server/apis/config" - "github.com/openshift/origin/pkg/template" templateapi "github.com/openshift/origin/pkg/template/apis/template" templateinternal "github.com/openshift/origin/pkg/template/client/internalversion" templateclient "github.com/openshift/origin/pkg/template/generated/internalclientset" @@ -104,7 +104,7 @@ func substituteTemplateParameters(params map[string]string, t *templateapi.Templ errors = append(errors, fmt.Errorf("template parameter name cannot be empty (%q)", value)) continue } - if v := template.GetParameterByName(t, name); v != nil { + if v := templateprocessing.GetParameterByName(t, name); v != nil { v.Value = value v.Generate = "" } else { diff --git a/pkg/oc/cli/cmd/process.go b/pkg/oc/cli/cmd/process.go index 8b3a030dc5b0..73b687963643 100644 --- a/pkg/oc/cli/cmd/process.go +++ b/pkg/oc/cli/cmd/process.go @@ -8,6 +8,7 @@ import ( "strings" "time" + "github.com/openshift/origin/pkg/template/templateprocessing" "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" @@ -28,7 +29,6 @@ import ( "github.com/openshift/origin/pkg/oc/cli/describe" "github.com/openshift/origin/pkg/oc/cli/util/clientcmd" "github.com/openshift/origin/pkg/oc/generate/app" - "github.com/openshift/origin/pkg/template" templateapi "github.com/openshift/origin/pkg/template/apis/template" templatevalidation "github.com/openshift/origin/pkg/template/apis/template/validation" templateinternalclient "github.com/openshift/origin/pkg/template/client/internalversion" @@ -363,7 +363,7 @@ func RunProcess(f *clientcmd.Factory, in io.Reader, out, errout io.Writer, cmd * func injectUserVars(values app.Environment, t *templateapi.Template, ignoreUnknownParameters bool) []error { var errors []error for param, val := range values { - v := template.GetParameterByName(t, param) + v := templateprocessing.GetParameterByName(t, param) if v != nil { v.Value = val v.Generate = "" @@ -380,7 +380,7 @@ func processTemplateLocally(tpl *templateapi.Template) error { if errs := templatevalidation.ValidateProcessedTemplate(tpl); len(errs) > 0 { return errors.NewInvalid(templateapi.Kind("Template"), tpl.Name, errs) } - processor := template.NewProcessor(map[string]generator.Generator{ + processor := templateprocessing.NewProcessor(map[string]generator.Generator{ "expression": generator.NewExpressionValueGenerator(rand.New(rand.NewSource(time.Now().UnixNano()))), }) if errs := processor.Process(tpl); len(errs) > 0 { diff --git a/pkg/oc/generate/app/templatelookup.go b/pkg/oc/generate/app/templatelookup.go index 6c68e6515778..7467b34e6845 100644 --- a/pkg/oc/generate/app/templatelookup.go +++ b/pkg/oc/generate/app/templatelookup.go @@ -13,7 +13,6 @@ import ( kapi "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/kubectl/resource" - "github.com/openshift/origin/pkg/template" templateapi "github.com/openshift/origin/pkg/template/apis/template" templateclient "github.com/openshift/origin/pkg/template/generated/internalclientset/typed/template/internalversion" ) @@ -34,7 +33,7 @@ func (r TemplateSearcher) Search(precise bool, terms ...string) (ComponentMatche matches := ComponentMatches{} var errs []error for _, term := range terms { - ref, err := template.ParseTemplateReference(term) + ref, err := parseTemplateReference(term) if err != nil { glog.V(2).Infof("template references must be of the form [/], term %q did not qualify", term) continue @@ -45,7 +44,7 @@ func (r TemplateSearcher) Search(precise bool, terms ...string) (ComponentMatche } namespaces := r.Namespaces - if ref.HasNamespace() { + if ref.hasNamespace() { namespaces = []string{ref.Namespace} } @@ -182,3 +181,41 @@ func (r *TemplateFileSearcher) Search(precise bool, terms ...string) (ComponentM return matches, errs } + +// TemplateReference points to a stored template +type templateReference struct { + Namespace string + Name string +} + +// ParseTemplateReference parses the reference to a template into a +// TemplateReference. +func parseTemplateReference(s string) (templateReference, error) { + var ref templateReference + parts := strings.Split(s, "/") + switch len(parts) { + case 2: + // namespace/name + ref.Namespace = parts[0] + ref.Name = parts[1] + break + case 1: + // name + ref.Name = parts[0] + break + default: + return ref, fmt.Errorf("the template reference must be either the template name or namespace and template name separated by slashes") + } + return ref, nil +} + +func (r templateReference) hasNamespace() bool { + return len(r.Namespace) > 0 +} + +func (r templateReference) String() string { + if r.hasNamespace() { + return fmt.Sprintf("%s/%s", r.Namespace, r.Name) + } + return r.Name +} diff --git a/pkg/oc/generate/cmd/template.go b/pkg/oc/generate/cmd/template.go index 60ef905edfa7..3e232a192398 100644 --- a/pkg/oc/generate/cmd/template.go +++ b/pkg/oc/generate/cmd/template.go @@ -5,13 +5,13 @@ import ( "io" "strings" + "github.com/openshift/origin/pkg/template/templateprocessing" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/errors" "k8s.io/kubernetes/pkg/api/legacyscheme" "github.com/openshift/origin/pkg/api/latest" "github.com/openshift/origin/pkg/oc/generate/app" - "github.com/openshift/origin/pkg/template" templateapi "github.com/openshift/origin/pkg/template/apis/template" templateinternalclient "github.com/openshift/origin/pkg/template/client/internalversion" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -21,7 +21,7 @@ import ( func TransformTemplate(tpl *templateapi.Template, templateProcessor templateinternalclient.TemplateProcessorInterface, namespace string, parameters map[string]string, ignoreUnknownParameters bool) (*templateapi.Template, error) { // only set values that match what's expected by the template. for k, value := range parameters { - v := template.GetParameterByName(tpl, k) + v := templateprocessing.GetParameterByName(tpl, k) if v != nil { v.Value = value v.Generate = "" diff --git a/pkg/template/doc.go b/pkg/template/doc.go deleted file mode 100644 index b5c8ae795802..000000000000 --- a/pkg/template/doc.go +++ /dev/null @@ -1,3 +0,0 @@ -// Package template provides TemplateProcessor, capable of -// transforming Template objects into Config objects. -package template diff --git a/pkg/template/helper.go b/pkg/template/helper.go deleted file mode 100644 index d44658e77d22..000000000000 --- a/pkg/template/helper.go +++ /dev/null @@ -1,87 +0,0 @@ -package template - -import ( - "fmt" - "strings" - - templateapi "github.com/openshift/origin/pkg/template/apis/template" - "k8s.io/apiserver/pkg/authentication/user" -) - -// TemplateReference points to a stored template -type TemplateReference struct { - Namespace string - Name string -} - -// ParseTemplateReference parses the reference to a template into a -// TemplateReference. -func ParseTemplateReference(s string) (TemplateReference, error) { - var ref TemplateReference - parts := strings.Split(s, "/") - switch len(parts) { - case 2: - // namespace/name - ref.Namespace = parts[0] - ref.Name = parts[1] - break - case 1: - // name - ref.Name = parts[0] - break - default: - return ref, fmt.Errorf("the template reference must be either the template name or namespace and template name separated by slashes") - } - return ref, nil -} - -func (r TemplateReference) HasNamespace() bool { - return len(r.Namespace) > 0 -} - -func (r TemplateReference) String() string { - if r.HasNamespace() { - return fmt.Sprintf("%s/%s", r.Namespace, r.Name) - } - return r.Name -} - -// ConvertUserToTemplateInstanceRequester copies analogous fields from user.Info to TemplateInstanceRequester -func ConvertUserToTemplateInstanceRequester(u user.Info) templateapi.TemplateInstanceRequester { - templatereq := templateapi.TemplateInstanceRequester{} - - if u != nil { - extra := map[string]templateapi.ExtraValue{} - if u.GetExtra() != nil { - for k, v := range u.GetExtra() { - extra[k] = templateapi.ExtraValue(v) - } - } - - templatereq.Username = u.GetName() - templatereq.UID = u.GetUID() - templatereq.Groups = u.GetGroups() - templatereq.Extra = extra - } - - return templatereq -} - -// ConvertTemplateInstanceRequesterToUser copies analogous fields from TemplateInstanceRequester to user.Info -func ConvertTemplateInstanceRequesterToUser(templateReq *templateapi.TemplateInstanceRequester) user.Info { - u := user.DefaultInfo{} - u.Extra = map[string][]string{} - - if templateReq != nil { - u.Name = templateReq.Username - u.UID = templateReq.UID - u.Groups = templateReq.Groups - if templateReq.Extra != nil { - for k, v := range templateReq.Extra { - u.Extra[k] = []string(v) - } - } - } - - return &u -} diff --git a/pkg/template/registry/template/rest.go b/pkg/template/registry/template/rest.go index fdc289bdbcd0..cdb6b4527c97 100644 --- a/pkg/template/registry/template/rest.go +++ b/pkg/template/registry/template/rest.go @@ -5,13 +5,13 @@ import ( "time" "github.com/golang/glog" + "github.com/openshift/origin/pkg/template/templateprocessing" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" apirequest "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/registry/rest" - "github.com/openshift/origin/pkg/template" templateapi "github.com/openshift/origin/pkg/template/apis/template" templatevalidation "github.com/openshift/origin/pkg/template/apis/template/validation" "github.com/openshift/origin/pkg/template/generator" @@ -50,7 +50,7 @@ func (s *REST) Create(ctx apirequest.Context, obj runtime.Object, _ rest.Validat generators := map[string]generator.Generator{ "expression": generator.NewExpressionValueGenerator(rand.New(rand.NewSource(time.Now().UnixNano()))), } - processor := template.NewProcessor(generators) + processor := templateprocessing.NewProcessor(generators) if errs := processor.Process(tpl); len(errs) > 0 { glog.V(1).Infof(errs.ToAggregate().Error()) return nil, errors.NewInvalid(templateapi.Kind("Template"), tpl.Name, errs) diff --git a/pkg/template/registry/templateinstance/strategy.go b/pkg/template/registry/templateinstance/strategy.go index def5dacc0345..23cd84a227d9 100644 --- a/pkg/template/registry/templateinstance/strategy.go +++ b/pkg/template/registry/templateinstance/strategy.go @@ -17,7 +17,6 @@ import ( rbacregistry "k8s.io/kubernetes/pkg/registry/rbac" "github.com/openshift/origin/pkg/authorization/util" - template "github.com/openshift/origin/pkg/template" templateapi "github.com/openshift/origin/pkg/template/apis/template" "github.com/openshift/origin/pkg/template/apis/template/validation" ) @@ -60,7 +59,7 @@ func (templateInstanceStrategy) PrepareForCreate(ctx apirequest.Context, obj run if templateInstance.Spec.Requester == nil { if user, ok := apirequest.UserFrom(ctx); ok { - templateReq := template.ConvertUserToTemplateInstanceRequester(user) + templateReq := convertUserToTemplateInstanceRequester(user) templateInstance.Spec.Requester = &templateReq } } @@ -192,3 +191,24 @@ func (statusStrategy) Canonicalize(obj runtime.Object) { func (statusStrategy) ValidateUpdate(ctx apirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateTemplateInstanceUpdate(obj.(*templateapi.TemplateInstance), old.(*templateapi.TemplateInstance)) } + +// ConvertUserToTemplateInstanceRequester copies analogous fields from user.Info to TemplateInstanceRequester +func convertUserToTemplateInstanceRequester(u user.Info) templateapi.TemplateInstanceRequester { + templatereq := templateapi.TemplateInstanceRequester{} + + if u != nil { + extra := map[string]templateapi.ExtraValue{} + if u.GetExtra() != nil { + for k, v := range u.GetExtra() { + extra[k] = templateapi.ExtraValue(v) + } + } + + templatereq.Username = u.GetName() + templatereq.UID = u.GetUID() + templatereq.Groups = u.GetGroups() + templatereq.Extra = extra + } + + return templatereq +} diff --git a/pkg/template/template.go b/pkg/template/templateprocessing/template.go similarity index 99% rename from pkg/template/template.go rename to pkg/template/templateprocessing/template.go index 3cae3a2f5ca2..5db68a8df273 100644 --- a/pkg/template/template.go +++ b/pkg/template/templateprocessing/template.go @@ -1,4 +1,4 @@ -package template +package templateprocessing import ( "fmt" diff --git a/pkg/template/template_test.go b/pkg/template/templateprocessing/template_test.go similarity index 98% rename from pkg/template/template_test.go rename to pkg/template/templateprocessing/template_test.go index edf4a5394963..a00b2d909720 100644 --- a/pkg/template/template_test.go +++ b/pkg/template/templateprocessing/template_test.go @@ -1,4 +1,4 @@ -package template +package templateprocessing import ( "encoding/json" @@ -420,12 +420,12 @@ func TestEvaluateLabels(t *testing.T) { func TestProcessTemplateParameters(t *testing.T) { var template, expectedTemplate templateapi.Template - jsonData, _ := ioutil.ReadFile("../../test/templates/testdata/guestbook.json") + jsonData, _ := ioutil.ReadFile("../../../test/templates/testdata/guestbook.json") if err := runtime.DecodeInto(legacyscheme.Codecs.UniversalDecoder(), jsonData, &template); err != nil { t.Fatalf("unexpected error: %v", err) } - expectedData, _ := ioutil.ReadFile("../../test/templates/testdata/guestbook_list.json") + expectedData, _ := ioutil.ReadFile("../../../test/templates/testdata/guestbook_list.json") if err := runtime.DecodeInto(legacyscheme.Codecs.UniversalDecoder(), expectedData, &expectedTemplate); err != nil { t.Fatalf("unexpected error: %v", err) }