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:
@@ -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,
|
||||
|
@@ -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
|
||||
}
|
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user