Support service types in runtime
This commit is contained in:
@@ -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
|
||||
|
@@ -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)
|
||||
|
@@ -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 {
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user