Generate package within 63 character limit when creating function (#2482)
This commit is contained in:
@@ -221,7 +221,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "error generating uuid")
|
return errors.Wrap(err, "error generating uuid")
|
||||||
}
|
}
|
||||||
pkgName := fmt.Sprintf("%v-%v", fnName, id.String())
|
pkgName := generatePackageName(fnName, id.String())
|
||||||
|
|
||||||
// create new package in the same namespace as the function.
|
// create new package in the same namespace as the function.
|
||||||
pkgMetadata, err = _package.CreatePackage(input, opts.Client(), pkgName, fnNamespace, envName, envNamespace,
|
pkgMetadata, err = _package.CreatePackage(input, opts.Client(), pkgName, fnNamespace, envName, envNamespace,
|
||||||
@@ -324,6 +324,23 @@ func (opts *CreateSubCommand) complete(input cli.Input) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// generatePackgeName => will return package name by appending id in function name and will make sure that package name will never be more than length of 63 characters.
|
||||||
|
func generatePackageName(fnName string, id string) string {
|
||||||
|
var (
|
||||||
|
lenFnName int = len(fnName)
|
||||||
|
lenId int = len(id)
|
||||||
|
lastIndexOfChar int
|
||||||
|
)
|
||||||
|
if lenFnName+lenId <= 62 {
|
||||||
|
return fmt.Sprintf("%v-%v", fnName, id)
|
||||||
|
}
|
||||||
|
|
||||||
|
lastIndexOfChar = lenFnName - (lenFnName + lenId - 62)
|
||||||
|
pkgName := fmt.Sprintf("%v-%v", fnName[:lastIndexOfChar], id)
|
||||||
|
console.Info(fmt.Sprintf("Generated package %v from function to acceptable character limit", pkgName))
|
||||||
|
return pkgName
|
||||||
|
}
|
||||||
|
|
||||||
// run write the resource to a spec file or create a fission CRD with remote fission server.
|
// run write the resource to a spec file or create a fission CRD with remote fission server.
|
||||||
// It also prints warning/error if necessary.
|
// It also prints warning/error if necessary.
|
||||||
func (opts *CreateSubCommand) run(input cli.Input) error {
|
func (opts *CreateSubCommand) run(input cli.Input) error {
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package function
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
uuid "github.com/satori/go.uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGeneratePackageName(t *testing.T) {
|
||||||
|
for _, test := range []struct {
|
||||||
|
name string
|
||||||
|
fnName string
|
||||||
|
expected int
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "name of package should be less than or equal to 63 characters, if function name is equal to 26 characters",
|
||||||
|
fnName: "test-function-with-26-char",
|
||||||
|
expected: 63,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "name of package should be less than or equal to 63 characters, if function name is more than 26 characters",
|
||||||
|
fnName: "testfunctionwithmorethan26character",
|
||||||
|
expected: 63,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "name of package should be less than or equal to 63 characters, if function name is less than 26 characters",
|
||||||
|
fnName: "fission-function",
|
||||||
|
expected: 63,
|
||||||
|
},
|
||||||
|
} {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
id, err := uuid.NewV4()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
pkgName := generatePackageName(test.fnName, id.String())
|
||||||
|
if len(pkgName) > test.expected {
|
||||||
|
t.Errorf("expected len of package to be %v, got %v", test.expected, len(pkgName))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -62,6 +62,7 @@ func (opts *CreateSubCommand) run(input cli.Input) error {
|
|||||||
console.Warn(fmt.Sprintf("--%v will be soon marked as required flag, see 'help' for details", flagkey.HtName))
|
console.Warn(fmt.Sprintf("--%v will be soon marked as required flag, see 'help' for details", flagkey.HtName))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pkgNamespace := input.String(flagkey.NamespacePackage)
|
pkgNamespace := input.String(flagkey.NamespacePackage)
|
||||||
envName := input.String(flagkey.PkgEnvironment)
|
envName := input.String(flagkey.PkgEnvironment)
|
||||||
envNamespace := input.String(flagkey.NamespaceEnvironment)
|
envNamespace := input.String(flagkey.NamespaceEnvironment)
|
||||||
@@ -85,6 +86,11 @@ func (opts *CreateSubCommand) run(input cli.Input) error {
|
|||||||
var specDir, specFile string
|
var specDir, specFile string
|
||||||
|
|
||||||
if input.Bool(flagkey.SpecSave) {
|
if input.Bool(flagkey.SpecSave) {
|
||||||
|
// since package CRD created using --spec, not validate by k8s. So we need to validate it and make sure package name is not more than 63 characters.
|
||||||
|
if len(pkgName) > 63 {
|
||||||
|
return errors.Errorf("error creating package: package name %v, must be no more than 63 characters", pkgName)
|
||||||
|
}
|
||||||
|
|
||||||
specDir = util.GetSpecDir(input)
|
specDir = util.GetSpecDir(input)
|
||||||
specIgnore := util.GetSpecIgnore(input)
|
specIgnore := util.GetSpecIgnore(input)
|
||||||
fr, err := spec.ReadSpecs(specDir, specIgnore, false)
|
fr, err := spec.ReadSpecs(specDir, specIgnore, false)
|
||||||
|
|||||||
Reference in New Issue
Block a user