Support service types in runtime

This commit is contained in:
Asim Aslam
2019-11-29 11:35:00 +00:00
parent 114bc1e18b
commit c3ed83dfba
12 changed files with 171 additions and 164 deletions

View File

@@ -27,13 +27,13 @@ type Kubernetes interface {
}
// NewService returns default micro kubernetes service definition
func NewService(name, version string) *Service {
func NewService(name, version, typ string) *Service {
log.Tracef("kubernetes default service: name: %s, version: %s", name, version)
Labels := map[string]string{
"name": name,
"version": version,
"micro": "service",
"micro": typ,
}
svcName := name
@@ -64,13 +64,13 @@ func NewService(name, version string) *Service {
}
// NewService returns default micro kubernetes deployment definition
func NewDeployment(name, version string) *Deployment {
func NewDeployment(name, version, typ string) *Deployment {
log.Tracef("kubernetes default deployment: name: %s, version: %s", name, version)
Labels := map[string]string{
"name": name,
"version": version,
"micro": "service",
"micro": typ,
}
depName := name

View File

@@ -8,16 +8,17 @@ import (
func TestTemplates(t *testing.T) {
name := "foo"
version := "123"
typ := "service"
// Render default service
s := NewService(name, version)
s := NewService(name, version, typ)
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 := NewDeployment(name, version)
d := NewDeployment(name, version, typ)
bd := new(bytes.Buffer)
if err := renderTemplate(templates["deployment"], bd, d); err != nil {
t.Errorf("Failed to render kubernetes deployment: %v", err)

View File

@@ -2,7 +2,6 @@
package kubernetes
import (
"errors"
"fmt"
"sync"
"time"
@@ -204,7 +203,7 @@ func (k *kubernetes) run(events <-chan runtime.Event) {
// set the default labels
labels := map[string]string{
"micro": "service",
"micro": k.options.Type,
"name": name,
}
@@ -281,7 +280,9 @@ func (k *kubernetes) Create(s *runtime.Service, opts ...runtime.CreateOption) er
k.Lock()
defer k.Unlock()
var options runtime.CreateOptions
options := runtime.CreateOptions{
Type: k.options.Type,
}
for _, o := range opts {
o(&options)
}
@@ -310,22 +311,13 @@ func (k *kubernetes) Create(s *runtime.Service, opts ...runtime.CreateOption) er
}
// Read returns all instances of given service
func (k *kubernetes) Read(name string, opts ...runtime.ReadOption) ([]*runtime.Service, error) {
func (k *kubernetes) Read(opts ...runtime.ReadOption) ([]*runtime.Service, error) {
k.Lock()
defer k.Unlock()
// if no name has been passed in, return error
if len(name) == 0 {
return nil, errors.New("missing service name")
}
// format the name
name = client.Format(name)
// set the default labels
labels := map[string]string{
"micro": "service",
"name": name,
"micro": k.options.Type,
}
var options runtime.ReadOptions
@@ -333,12 +325,18 @@ func (k *kubernetes) Read(name string, opts ...runtime.ReadOption) ([]*runtime.S
o(&options)
}
if len(options.Service) > 0 {
labels["name"] = client.Format(options.Service)
}
// add version to labels if a version has been supplied
if len(options.Version) > 0 {
labels["version"] = options.Version
}
log.Debugf("Runtime querying service %s", name)
if len(options.Type) > 0 {
labels["type"] = options.Type
}
return k.getService(labels)
}
@@ -349,7 +347,7 @@ func (k *kubernetes) List() ([]*runtime.Service, error) {
defer k.Unlock()
labels := map[string]string{
"micro": "service",
"micro": k.options.Type,
}
log.Debugf("Runtime listing all micro services")
@@ -360,7 +358,9 @@ func (k *kubernetes) List() ([]*runtime.Service, error) {
// Update the service in place
func (k *kubernetes) Update(s *runtime.Service) error {
// create new kubernetes micro service
service := newService(s, runtime.CreateOptions{})
service := newService(s, runtime.CreateOptions{
Type: k.options.Type,
})
// update build time annotation
service.kdeploy.Spec.Template.Metadata.Annotations["build"] = time.Now().Format(time.RFC3339)
@@ -382,7 +382,9 @@ func (k *kubernetes) Delete(s *runtime.Service) error {
defer k.Unlock()
// create new kubernetes micro service
service := newService(s, runtime.CreateOptions{})
service := newService(s, runtime.CreateOptions{
Type: k.options.Type,
})
log.Debugf("Runtime queueing service %s for delete action", service.Name)
@@ -457,7 +459,10 @@ func (k *kubernetes) String() string {
// NewRuntime creates new kubernetes runtime
func NewRuntime(opts ...runtime.Option) runtime.Runtime {
// get default options
options := runtime.Options{}
options := runtime.Options{
// Create labels with type "micro": "service"
Type: "service",
}
// apply requested options
for _, o := range opts {

View File

@@ -23,8 +23,8 @@ func newService(s *runtime.Service, c runtime.CreateOptions) *service {
name := client.Format(s.Name)
version := client.Format(s.Version)
kservice := client.NewService(name, version)
kdeploy := client.NewDeployment(name, version)
kservice := client.NewService(name, version, c.Type)
kdeploy := client.NewDeployment(name, version, c.Type)
// attach our values to the deployment; name, version, source
kdeploy.Metadata.Annotations["name"] = s.Name
@@ -53,10 +53,8 @@ func newService(s *runtime.Service, c runtime.CreateOptions) *service {
kdeploy.Spec.Template.PodSpec.Containers[0].Env = append(kdeploy.Spec.Template.PodSpec.Containers[0].Env, env...)
}
// if Exec/Command has been supplied override the default command
if len(s.Exec) > 0 {
kdeploy.Spec.Template.PodSpec.Containers[0].Command = s.Exec
} else if len(c.Command) > 0 {
// specify the command to exec
if len(c.Command) > 0 {
kdeploy.Spec.Template.PodSpec.Containers[0].Command = c.Command
} else if len(s.Source) > 0 {
// default command for our k8s service should be source