diff --git a/runtime/kubernetes/kubernetes.go b/runtime/kubernetes/kubernetes.go index 520ab78b..e7bd4bd1 100644 --- a/runtime/kubernetes/kubernetes.go +++ b/runtime/kubernetes/kubernetes.go @@ -343,7 +343,8 @@ func (k *kubernetes) Delete(s *runtime.Service) error { // create new kubernetes micro service service := newService(s, runtime.CreateOptions{ - Type: k.options.Type, + Type: k.options.Type, + BaseImage: k.options.Source, }) return service.Stop(k.client) diff --git a/runtime/options.go b/runtime/options.go index 1034e7f2..cd1a6538 100644 --- a/runtime/options.go +++ b/runtime/options.go @@ -16,7 +16,7 @@ type Options struct { Source string } -// WithSource sets the host addresses to be used by the broker +// WithSource sets the base image / repository func WithSource(src string) Option { return func(o *Options) { o.Source = src @@ -51,6 +51,8 @@ type CreateOptions struct { Output io.Writer // Type of service to create Type string + // Base image for docker + BaseImage string } // ReadOptions queries runtime services @@ -92,6 +94,13 @@ func WithOutput(out io.Writer) CreateOption { } } +// WithBaseImage sets the docker img +func WithBaseImage(img string) CreateOption { + return func(o *CreateOptions) { + o.BaseImage = img + } +} + // ReadService returns services with the given name func ReadService(service string) ReadOption { return func(o *ReadOptions) { diff --git a/util/kubernetes/client/client.go b/util/kubernetes/client/client.go index 01bf48cc..f67a3970 100644 --- a/util/kubernetes/client/client.go +++ b/util/kubernetes/client/client.go @@ -226,9 +226,11 @@ func NewService(name, version, typ string) *Service { } // NewService returns default micro kubernetes deployment definition -func NewDeployment(name, version, typ string) *Deployment { +func NewDeployment(name, version, typ string, opts ...DeploymentOption) *Deployment { log.Tracef("kubernetes default deployment: name: %s, version: %s", name, version) + options := NewDeploymentOptions(opts) + Labels := map[string]string{ "name": name, "version": version, @@ -265,7 +267,7 @@ func NewDeployment(name, version, typ string) *Deployment { PodSpec: &PodSpec{ Containers: []Container{{ Name: name, - Image: DefaultImage, + Image: options.BaseImage, Env: []EnvVar{env}, Command: []string{"go", "run", "main.go"}, Ports: []ContainerPort{{ diff --git a/util/kubernetes/client/options.go b/util/kubernetes/client/options.go index 0e293522..4670ae80 100644 --- a/util/kubernetes/client/options.go +++ b/util/kubernetes/client/options.go @@ -1,5 +1,9 @@ package client +type DeploymentOptions struct { + BaseImage string +} + type LogOptions struct { Params map[string]string } @@ -10,6 +14,7 @@ type WatchOptions struct { type LogOption func(*LogOptions) type WatchOption func(*WatchOptions) +type DeploymentOption func(*DeploymentOptions) // LogParams provides additional params for logs func LogParams(p map[string]string) LogOption { @@ -24,3 +29,24 @@ func WatchParams(p map[string]string) WatchOption { w.Params = p } } + +// WithBaseImage sets the base image for the deployment +func WithBaseImage(img string) DeploymentOption { + return func(d *DeploymentOptions) { + d.BaseImage = img + } +} + +// NewDeploymentOptions returns an initialized DeploymentOptions +func NewDeploymentOptions(opts []DeploymentOption) DeploymentOptions { + var options DeploymentOptions + for _, o := range opts { + o(&options) + } + + if options.BaseImage == "" { + options.BaseImage = DefaultImage + } + + return options +}