Update the runtime for k8s name formatting and move Get to Read endpoint (#978)

* Update the runtime for k8s name formatting and move Get to Read endpoint

* strip regex validation
This commit is contained in:
Asim Aslam
2019-11-25 16:31:14 +00:00
committed by GitHub
parent 95045be83d
commit 252667398e
17 changed files with 268 additions and 589 deletions

View File

@@ -2,7 +2,6 @@
package client
import (
"regexp"
"strconv"
"strings"
"time"
@@ -18,8 +17,6 @@ const (
var (
// DefaultImage is default micro image
DefaultImage = "micro/go-micro"
// ServiceRegexp is used to validate service name
ServiceRegexp = regexp.MustCompile("^" + dns1123LabelFmt + "$")
)
// Kubernetes client
@@ -36,9 +33,9 @@ type Kubernetes interface {
List(*Resource) error
}
// DefaultService returns default micro kubernetes service definition
func DefaultService(name, version string) *Service {
log.Debugf("kubernetes default service: name: %s, version: %s", name, version)
// NewService returns default micro kubernetes service definition
func NewService(name, version string) *Service {
log.Tracef("kubernetes default service: name: %s, version: %s", name, version)
Labels := map[string]string{
"name": name,
@@ -73,9 +70,9 @@ func DefaultService(name, version string) *Service {
}
}
// DefaultService returns default micro kubernetes deployment definition
func DefaultDeployment(name, version, source string) *Deployment {
log.Debugf("kubernetes default deployment: name: %s, version: %s, source: %s", name, version, source)
// NewService returns default micro kubernetes deployment definition
func NewDeployment(name, version string) *Deployment {
log.Tracef("kubernetes default deployment: name: %s, version: %s", name, version)
Labels := map[string]string{
"name": name,
@@ -90,15 +87,11 @@ func DefaultDeployment(name, version, source string) *Deployment {
}
Metadata := &Metadata{
Name: depName,
Namespace: "default",
Version: version,
Labels: Labels,
Annotations: map[string]string{
"source": source,
"owner": "micro",
"group": "micro",
},
Name: depName,
Namespace: "default",
Version: version,
Labels: Labels,
Annotations: map[string]string{},
}
// TODO: we need to figure out this version stuff
@@ -108,7 +101,7 @@ func DefaultDeployment(name, version, source string) *Deployment {
buildUnixTimeUTC := time.Unix(buildTime, 0)
Metadata.Annotations["build"] = buildUnixTimeUTC.Format(time.RFC3339)
} else {
log.Debugf("could not parse build: %v", err)
log.Tracef("could not parse build: %v", err)
}
// enable go modules by default
@@ -129,7 +122,7 @@ func DefaultDeployment(name, version, source string) *Deployment {
Name: name,
Image: DefaultImage,
Env: []EnvVar{env},
Command: []string{"go", "run", source},
Command: []string{"go", "run", "main.go"},
Ports: []ContainerPort{{
Name: name + "-port",
ContainerPort: 8080,

View File

@@ -7,6 +7,7 @@ import (
"fmt"
"io"
"io/ioutil"
"strings"
"text/template"
)
@@ -85,3 +86,17 @@ func CertsFromPEM(pemCerts []byte) ([]*x509.Certificate, error) {
}
return certs, nil
}
// Format is used to format a string value into a k8s valid name
func Format(v string) string {
// to lower case
v = strings.ToLower(v)
// dots to dashes
v = strings.ReplaceAll(v, ".", "-")
// limit to 253 chars
if len(v) > 253 {
v = v[:253]
}
// return new name
return v
}

View File

@@ -8,19 +8,38 @@ import (
func TestTemplates(t *testing.T) {
name := "foo"
version := "123"
source := "github.com/foo/bar"
// Render default service
s := DefaultService(name, version)
s := NewService(name, version)
bs := new(bytes.Buffer)
if err := renderTemplate(templates["service"], bs, s); err != nil {
t.Errorf("Failed to render kubernetes service: %v", err)
}
// Render default deployment
d := DefaultDeployment(name, version, source)
d := NewDeployment(name, version)
bd := new(bytes.Buffer)
if err := renderTemplate(templates["deployment"], bd, d); err != nil {
t.Errorf("Failed to render kubernetes deployment: %v", err)
}
}
func TestFormatName(t *testing.T) {
testCases := []struct {
name string
expect string
}{
{"foobar", "foobar"},
{"foo-bar", "foo-bar"},
{"foo.bar", "foo-bar"},
{"Foo.Bar", "foo-bar"},
{"go.micro.foo.bar", "go-micro-foo-bar"},
}
for _, test := range testCases {
v := Format(test.name)
if v != test.expect {
t.Fatalf("Expected name %s for %s got: %s", test.expect, test.name, v)
}
}
}