Runtime hacks (#1344)

* Add Args/Image to runtime

* remove the hacks
This commit is contained in:
Asim Aslam 2020-03-13 18:39:59 +00:00 committed by GitHub
parent 3543b275e0
commit e803fb0855
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 166 additions and 102 deletions

View File

@ -184,7 +184,8 @@ func (r *runtime) Create(s *Service, opts ...CreateOption) error {
} }
if len(options.Command) == 0 { if len(options.Command) == 0 {
options.Command = []string{"go", "run", "."} options.Command = []string{"go", "run"}
options.Args = []string{"."}
} }
// create new service // create new service

View File

@ -2,8 +2,6 @@
package kubernetes package kubernetes
import ( import (
"fmt"
"strings"
"sync" "sync"
"time" "time"
@ -250,11 +248,6 @@ func (k *kubernetes) Init(opts ...runtime.Option) error {
o(&k.options) o(&k.options)
} }
// trim the source prefix if its a git url
if strings.HasPrefix(k.options.Source, "github.com") {
k.options.Source = strings.TrimPrefix(k.options.Source, "github.com/")
}
return nil return nil
} }
@ -270,14 +263,20 @@ func (k *kubernetes) Create(s *runtime.Service, opts ...runtime.CreateOption) er
o(&options) o(&options)
} }
// hackish // default type if it doesn't exist
if len(options.Type) == 0 { if len(options.Type) == 0 {
options.Type = k.options.Type options.Type = k.options.Type
} }
// determine the full source for this service // default the source if it doesn't exist
options.Source = k.sourceForService(s.Name) if len(s.Source) == 0 {
s.Source = k.options.Source
}
// determine the image from the source and options
options.Image = k.getImage(s, options)
// create new service
service := newService(s, options) service := newService(s, options)
// start the service // start the service
@ -334,10 +333,15 @@ func (k *kubernetes) List() ([]*runtime.Service, error) {
// Update the service in place // Update the service in place
func (k *kubernetes) Update(s *runtime.Service) error { func (k *kubernetes) Update(s *runtime.Service) error {
// create new kubernetes micro service // create new kubernetes micro service
service := newService(s, runtime.CreateOptions{ opts := runtime.CreateOptions{
Type: k.options.Type, Type: k.options.Type,
Source: k.sourceForService(s.Name), }
})
// set image
opts.Image = k.getImage(s, opts)
// new pseudo service
service := newService(s, opts)
// update build time annotation // update build time annotation
service.kdeploy.Spec.Template.Metadata.Annotations["build"] = time.Now().Format(time.RFC3339) service.kdeploy.Spec.Template.Metadata.Annotations["build"] = time.Now().Format(time.RFC3339)
@ -442,14 +446,15 @@ func NewRuntime(opts ...runtime.Option) runtime.Runtime {
} }
} }
// sourceForService determines the nested package name for github func (k *kubernetes) getImage(s *runtime.Service, options runtime.CreateOptions) string {
// e.g src: docker.pkg.github.com/micro/services an srv: users/api // use the image when its specified
// would become docker.pkg.github.com/micro/services/users-api if len(options.Image) > 0 {
func (k *kubernetes) sourceForService(name string) string { return options.Image
if !strings.HasPrefix(k.options.Source, "docker.pkg.github.com") {
return k.options.Source
} }
formattedName := strings.ReplaceAll(name, "/", "-") if len(k.options.Image) > 0 {
return fmt.Sprintf("%v/%v", k.options.Source, formattedName) return k.options.Image
}
return ""
} }

View File

@ -54,14 +54,12 @@ func newService(s *runtime.Service, c runtime.CreateOptions) *service {
kdeploy.Metadata.Annotations["group"] = "micro" kdeploy.Metadata.Annotations["group"] = "micro"
// update the deployment is a custom source is provided // update the deployment is a custom source is provided
if len(c.Source) > 0 { if len(c.Image) > 0 {
for i := range kdeploy.Spec.Template.PodSpec.Containers { for i := range kdeploy.Spec.Template.PodSpec.Containers {
kdeploy.Spec.Template.PodSpec.Containers[i].Image = c.Source kdeploy.Spec.Template.PodSpec.Containers[i].Image = c.Image
kdeploy.Spec.Template.PodSpec.Containers[i].Command = []string{} kdeploy.Spec.Template.PodSpec.Containers[i].Command = []string{}
kdeploy.Spec.Template.PodSpec.Containers[i].Args = []string{name} kdeploy.Spec.Template.PodSpec.Containers[i].Args = []string{}
} }
kdeploy.Metadata.Annotations["source"] = c.Source
} }
// define the environment values used by the container // define the environment values used by the container
@ -76,11 +74,15 @@ 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...) kdeploy.Spec.Template.PodSpec.Containers[0].Env = append(kdeploy.Spec.Template.PodSpec.Containers[0].Env, env...)
} }
// specify the command to exec // set the command if specified
if strings.HasPrefix(c.Source, "github.com") && len(c.Command) > 0 { if len(c.Command) > 0 {
kdeploy.Spec.Template.PodSpec.Containers[0].Command = c.Command kdeploy.Spec.Template.PodSpec.Containers[0].Command = c.Command
} }
if len(c.Args) > 0 {
kdeploy.Spec.Template.PodSpec.Containers[0].Args = c.Args
}
return &service{ return &service{
Service: s, Service: s,
kservice: kservice, kservice: kservice,

View File

@ -14,6 +14,8 @@ type Options struct {
Type string Type string
// Source of the services repository // Source of the services repository
Source string Source string
// Base image to use
Image string
} }
// WithSource sets the base image / repository // WithSource sets the base image / repository
@ -37,14 +39,23 @@ func WithType(t string) Option {
} }
} }
// WithImage sets the image to use
func WithImage(t string) Option {
return func(o *Options) {
o.Image = t
}
}
type CreateOption func(o *CreateOptions) type CreateOption func(o *CreateOptions)
type ReadOption func(o *ReadOptions) type ReadOption func(o *ReadOptions)
// CreateOptions configure runtime services // CreateOptions configure runtime services
type CreateOptions struct { type CreateOptions struct {
// command to execute including args // Command to execut
Command []string Command []string
// Args to pass into command
Args []string
// Environment to configure // Environment to configure
Env []string Env []string
// Log output // Log output
@ -53,8 +64,8 @@ type CreateOptions struct {
Type string Type string
// Retries before failing deploy // Retries before failing deploy
Retries int Retries int
// Source of the service // Specify the image to use
Source string Image string
} }
// ReadOptions queries runtime services // ReadOptions queries runtime services
@ -74,18 +85,26 @@ func CreateType(t string) CreateOption {
} }
} }
// CreateSource sets the source of service to create // CreateImage sets the image to use
func CreateSource(t string) CreateOption { func CreateImage(img string) CreateOption {
return func(o *CreateOptions) { return func(o *CreateOptions) {
o.Source = t o.Image = img
} }
} }
// WithCommand specifies the command to execute // WithCommand specifies the command to execute
func WithCommand(args ...string) CreateOption { func WithCommand(cmd ...string) CreateOption {
return func(o *CreateOptions) { return func(o *CreateOptions) {
// set command // set command
o.Command = args o.Command = cmd
}
}
// WithArgs specifies the command to execute
func WithArgs(args ...string) CreateOption {
return func(o *CreateOptions) {
// set command
o.Args = args
} }
} }

View File

@ -3,6 +3,7 @@ package runtime
import ( import (
"io" "io"
"strconv" "strconv"
"strings"
"sync" "sync"
"time" "time"
@ -41,11 +42,8 @@ func newService(s *Service, c CreateOptions) *service {
var args []string var args []string
// set command // set command
exec = c.Command[0] exec = strings.Join(c.Command, " ")
// set args args = c.Args
if len(c.Command) > 1 {
args = c.Command[1:]
}
return &service{ return &service{
Service: s, Service: s,

View File

@ -1,5 +1,5 @@
// Code generated by protoc-gen-go. DO NOT EDIT. // Code generated by protoc-gen-go. DO NOT EDIT.
// source: runtime/service/proto/runtime.proto // source: github.com/micro/go-micro/runtime/service/proto/runtime.proto
package go_micro_runtime package go_micro_runtime
@ -38,7 +38,7 @@ func (m *Service) Reset() { *m = Service{} }
func (m *Service) String() string { return proto.CompactTextString(m) } func (m *Service) String() string { return proto.CompactTextString(m) }
func (*Service) ProtoMessage() {} func (*Service) ProtoMessage() {}
func (*Service) Descriptor() ([]byte, []int) { func (*Service) Descriptor() ([]byte, []int) {
return fileDescriptor_2434d8152598889b, []int{0} return fileDescriptor_976fccef828ab1f0, []int{0}
} }
func (m *Service) XXX_Unmarshal(b []byte) error { func (m *Service) XXX_Unmarshal(b []byte) error {
@ -101,7 +101,7 @@ func (m *Event) Reset() { *m = Event{} }
func (m *Event) String() string { return proto.CompactTextString(m) } func (m *Event) String() string { return proto.CompactTextString(m) }
func (*Event) ProtoMessage() {} func (*Event) ProtoMessage() {}
func (*Event) Descriptor() ([]byte, []int) { func (*Event) Descriptor() ([]byte, []int) {
return fileDescriptor_2434d8152598889b, []int{1} return fileDescriptor_976fccef828ab1f0, []int{1}
} }
func (m *Event) XXX_Unmarshal(b []byte) error { func (m *Event) XXX_Unmarshal(b []byte) error {
@ -153,10 +153,16 @@ func (m *Event) GetVersion() string {
type CreateOptions struct { type CreateOptions struct {
// command to pass in // command to pass in
Command []string `protobuf:"bytes,1,rep,name=command,proto3" json:"command,omitempty"` Command []string `protobuf:"bytes,1,rep,name=command,proto3" json:"command,omitempty"`
// args to pass into command
Args []string `protobuf:"bytes,2,rep,name=args,proto3" json:"args,omitempty"`
// environment to pass in // environment to pass in
Env []string `protobuf:"bytes,2,rep,name=env,proto3" json:"env,omitempty"` Env []string `protobuf:"bytes,3,rep,name=env,proto3" json:"env,omitempty"`
// output to send to // output to send to
Output string `protobuf:"bytes,3,opt,name=output,proto3" json:"output,omitempty"` Output string `protobuf:"bytes,4,opt,name=output,proto3" json:"output,omitempty"`
// create type of service
Type string `protobuf:"bytes,5,opt,name=type,proto3" json:"type,omitempty"`
// image to use
Image string `protobuf:"bytes,6,opt,name=image,proto3" json:"image,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -166,7 +172,7 @@ func (m *CreateOptions) Reset() { *m = CreateOptions{} }
func (m *CreateOptions) String() string { return proto.CompactTextString(m) } func (m *CreateOptions) String() string { return proto.CompactTextString(m) }
func (*CreateOptions) ProtoMessage() {} func (*CreateOptions) ProtoMessage() {}
func (*CreateOptions) Descriptor() ([]byte, []int) { func (*CreateOptions) Descriptor() ([]byte, []int) {
return fileDescriptor_2434d8152598889b, []int{2} return fileDescriptor_976fccef828ab1f0, []int{2}
} }
func (m *CreateOptions) XXX_Unmarshal(b []byte) error { func (m *CreateOptions) XXX_Unmarshal(b []byte) error {
@ -194,6 +200,13 @@ func (m *CreateOptions) GetCommand() []string {
return nil return nil
} }
func (m *CreateOptions) GetArgs() []string {
if m != nil {
return m.Args
}
return nil
}
func (m *CreateOptions) GetEnv() []string { func (m *CreateOptions) GetEnv() []string {
if m != nil { if m != nil {
return m.Env return m.Env
@ -208,6 +221,20 @@ func (m *CreateOptions) GetOutput() string {
return "" return ""
} }
func (m *CreateOptions) GetType() string {
if m != nil {
return m.Type
}
return ""
}
func (m *CreateOptions) GetImage() string {
if m != nil {
return m.Image
}
return ""
}
type CreateRequest struct { type CreateRequest struct {
Service *Service `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` Service *Service `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"`
Options *CreateOptions `protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"` Options *CreateOptions `protobuf:"bytes,2,opt,name=options,proto3" json:"options,omitempty"`
@ -220,7 +247,7 @@ func (m *CreateRequest) Reset() { *m = CreateRequest{} }
func (m *CreateRequest) String() string { return proto.CompactTextString(m) } func (m *CreateRequest) String() string { return proto.CompactTextString(m) }
func (*CreateRequest) ProtoMessage() {} func (*CreateRequest) ProtoMessage() {}
func (*CreateRequest) Descriptor() ([]byte, []int) { func (*CreateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_2434d8152598889b, []int{3} return fileDescriptor_976fccef828ab1f0, []int{3}
} }
func (m *CreateRequest) XXX_Unmarshal(b []byte) error { func (m *CreateRequest) XXX_Unmarshal(b []byte) error {
@ -265,7 +292,7 @@ func (m *CreateResponse) Reset() { *m = CreateResponse{} }
func (m *CreateResponse) String() string { return proto.CompactTextString(m) } func (m *CreateResponse) String() string { return proto.CompactTextString(m) }
func (*CreateResponse) ProtoMessage() {} func (*CreateResponse) ProtoMessage() {}
func (*CreateResponse) Descriptor() ([]byte, []int) { func (*CreateResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_2434d8152598889b, []int{4} return fileDescriptor_976fccef828ab1f0, []int{4}
} }
func (m *CreateResponse) XXX_Unmarshal(b []byte) error { func (m *CreateResponse) XXX_Unmarshal(b []byte) error {
@ -302,7 +329,7 @@ func (m *ReadOptions) Reset() { *m = ReadOptions{} }
func (m *ReadOptions) String() string { return proto.CompactTextString(m) } func (m *ReadOptions) String() string { return proto.CompactTextString(m) }
func (*ReadOptions) ProtoMessage() {} func (*ReadOptions) ProtoMessage() {}
func (*ReadOptions) Descriptor() ([]byte, []int) { func (*ReadOptions) Descriptor() ([]byte, []int) {
return fileDescriptor_2434d8152598889b, []int{5} return fileDescriptor_976fccef828ab1f0, []int{5}
} }
func (m *ReadOptions) XXX_Unmarshal(b []byte) error { func (m *ReadOptions) XXX_Unmarshal(b []byte) error {
@ -355,7 +382,7 @@ func (m *ReadRequest) Reset() { *m = ReadRequest{} }
func (m *ReadRequest) String() string { return proto.CompactTextString(m) } func (m *ReadRequest) String() string { return proto.CompactTextString(m) }
func (*ReadRequest) ProtoMessage() {} func (*ReadRequest) ProtoMessage() {}
func (*ReadRequest) Descriptor() ([]byte, []int) { func (*ReadRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_2434d8152598889b, []int{6} return fileDescriptor_976fccef828ab1f0, []int{6}
} }
func (m *ReadRequest) XXX_Unmarshal(b []byte) error { func (m *ReadRequest) XXX_Unmarshal(b []byte) error {
@ -394,7 +421,7 @@ func (m *ReadResponse) Reset() { *m = ReadResponse{} }
func (m *ReadResponse) String() string { return proto.CompactTextString(m) } func (m *ReadResponse) String() string { return proto.CompactTextString(m) }
func (*ReadResponse) ProtoMessage() {} func (*ReadResponse) ProtoMessage() {}
func (*ReadResponse) Descriptor() ([]byte, []int) { func (*ReadResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_2434d8152598889b, []int{7} return fileDescriptor_976fccef828ab1f0, []int{7}
} }
func (m *ReadResponse) XXX_Unmarshal(b []byte) error { func (m *ReadResponse) XXX_Unmarshal(b []byte) error {
@ -433,7 +460,7 @@ func (m *DeleteRequest) Reset() { *m = DeleteRequest{} }
func (m *DeleteRequest) String() string { return proto.CompactTextString(m) } func (m *DeleteRequest) String() string { return proto.CompactTextString(m) }
func (*DeleteRequest) ProtoMessage() {} func (*DeleteRequest) ProtoMessage() {}
func (*DeleteRequest) Descriptor() ([]byte, []int) { func (*DeleteRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_2434d8152598889b, []int{8} return fileDescriptor_976fccef828ab1f0, []int{8}
} }
func (m *DeleteRequest) XXX_Unmarshal(b []byte) error { func (m *DeleteRequest) XXX_Unmarshal(b []byte) error {
@ -471,7 +498,7 @@ func (m *DeleteResponse) Reset() { *m = DeleteResponse{} }
func (m *DeleteResponse) String() string { return proto.CompactTextString(m) } func (m *DeleteResponse) String() string { return proto.CompactTextString(m) }
func (*DeleteResponse) ProtoMessage() {} func (*DeleteResponse) ProtoMessage() {}
func (*DeleteResponse) Descriptor() ([]byte, []int) { func (*DeleteResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_2434d8152598889b, []int{9} return fileDescriptor_976fccef828ab1f0, []int{9}
} }
func (m *DeleteResponse) XXX_Unmarshal(b []byte) error { func (m *DeleteResponse) XXX_Unmarshal(b []byte) error {
@ -503,7 +530,7 @@ func (m *UpdateRequest) Reset() { *m = UpdateRequest{} }
func (m *UpdateRequest) String() string { return proto.CompactTextString(m) } func (m *UpdateRequest) String() string { return proto.CompactTextString(m) }
func (*UpdateRequest) ProtoMessage() {} func (*UpdateRequest) ProtoMessage() {}
func (*UpdateRequest) Descriptor() ([]byte, []int) { func (*UpdateRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_2434d8152598889b, []int{10} return fileDescriptor_976fccef828ab1f0, []int{10}
} }
func (m *UpdateRequest) XXX_Unmarshal(b []byte) error { func (m *UpdateRequest) XXX_Unmarshal(b []byte) error {
@ -541,7 +568,7 @@ func (m *UpdateResponse) Reset() { *m = UpdateResponse{} }
func (m *UpdateResponse) String() string { return proto.CompactTextString(m) } func (m *UpdateResponse) String() string { return proto.CompactTextString(m) }
func (*UpdateResponse) ProtoMessage() {} func (*UpdateResponse) ProtoMessage() {}
func (*UpdateResponse) Descriptor() ([]byte, []int) { func (*UpdateResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_2434d8152598889b, []int{11} return fileDescriptor_976fccef828ab1f0, []int{11}
} }
func (m *UpdateResponse) XXX_Unmarshal(b []byte) error { func (m *UpdateResponse) XXX_Unmarshal(b []byte) error {
@ -572,7 +599,7 @@ func (m *ListRequest) Reset() { *m = ListRequest{} }
func (m *ListRequest) String() string { return proto.CompactTextString(m) } func (m *ListRequest) String() string { return proto.CompactTextString(m) }
func (*ListRequest) ProtoMessage() {} func (*ListRequest) ProtoMessage() {}
func (*ListRequest) Descriptor() ([]byte, []int) { func (*ListRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_2434d8152598889b, []int{12} return fileDescriptor_976fccef828ab1f0, []int{12}
} }
func (m *ListRequest) XXX_Unmarshal(b []byte) error { func (m *ListRequest) XXX_Unmarshal(b []byte) error {
@ -604,7 +631,7 @@ func (m *ListResponse) Reset() { *m = ListResponse{} }
func (m *ListResponse) String() string { return proto.CompactTextString(m) } func (m *ListResponse) String() string { return proto.CompactTextString(m) }
func (*ListResponse) ProtoMessage() {} func (*ListResponse) ProtoMessage() {}
func (*ListResponse) Descriptor() ([]byte, []int) { func (*ListResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_2434d8152598889b, []int{13} return fileDescriptor_976fccef828ab1f0, []int{13}
} }
func (m *ListResponse) XXX_Unmarshal(b []byte) error { func (m *ListResponse) XXX_Unmarshal(b []byte) error {
@ -651,42 +678,45 @@ func init() {
} }
func init() { func init() {
proto.RegisterFile("runtime/service/proto/runtime.proto", fileDescriptor_2434d8152598889b) proto.RegisterFile("github.com/micro/go-micro/runtime/service/proto/runtime.proto", fileDescriptor_976fccef828ab1f0)
} }
var fileDescriptor_2434d8152598889b = []byte{ var fileDescriptor_976fccef828ab1f0 = []byte{
// 521 bytes of a gzipped FileDescriptorProto // 563 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4b, 0x6f, 0xd3, 0x40, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4b, 0x6f, 0xd3, 0x40,
0x10, 0xae, 0xeb, 0x34, 0x69, 0xc7, 0x18, 0x45, 0x2b, 0x84, 0x4c, 0xc5, 0x23, 0x32, 0x07, 0x7a, 0x10, 0xae, 0xe3, 0x3c, 0xda, 0x09, 0x41, 0xd1, 0xaa, 0x42, 0xa6, 0xe2, 0x11, 0xf9, 0x42, 0x2f,
0x72, 0xa4, 0x54, 0x88, 0xd7, 0xb1, 0x09, 0x5c, 0x88, 0x90, 0x5c, 0xf5, 0x07, 0x2c, 0xc9, 0x08, 0x38, 0x52, 0x2a, 0xc4, 0x4b, 0x9c, 0x9a, 0xc0, 0x85, 0x08, 0xc9, 0xa8, 0x3f, 0x60, 0x9b, 0x8c,
0x59, 0xd4, 0xbb, 0xc6, 0xbb, 0xb6, 0x94, 0x13, 0x57, 0xfe, 0x1e, 0xff, 0x08, 0xed, 0x2b, 0xb6, 0x82, 0x45, 0xd7, 0x6b, 0xbc, 0xeb, 0x48, 0x39, 0x71, 0xe5, 0xca, 0x4f, 0xe3, 0x1f, 0xa1, 0x7d,
0x53, 0x9b, 0x4b, 0x6e, 0x3b, 0xb3, 0x33, 0x9f, 0xbf, 0xc7, 0xca, 0xf0, 0xba, 0xac, 0x98, 0xcc, 0xd9, 0x4e, 0x6a, 0xf7, 0x92, 0xdb, 0xcc, 0xec, 0xec, 0xb7, 0xdf, 0xc3, 0x32, 0x7c, 0xda, 0x24,
0x72, 0x9c, 0x0b, 0x2c, 0xeb, 0x6c, 0x83, 0xf3, 0xa2, 0xe4, 0x92, 0xcf, 0x6d, 0x37, 0xd1, 0x15, 0xf2, 0x47, 0x71, 0x1b, 0xad, 0x38, 0x9b, 0xb2, 0x64, 0x95, 0xf3, 0xe9, 0x86, 0xbf, 0x36, 0x45,
0x99, 0xfe, 0xe0, 0x49, 0x9e, 0x6d, 0x4a, 0x9e, 0xd8, 0x7e, 0xfc, 0xd7, 0x83, 0xc9, 0xad, 0xd9, 0x5e, 0xa4, 0x32, 0x61, 0x38, 0x15, 0x98, 0x6f, 0x93, 0x15, 0x4e, 0xb3, 0x9c, 0xcb, 0x72, 0x1a,
0x20, 0x04, 0x46, 0x8c, 0xe6, 0x18, 0x79, 0x33, 0xef, 0xea, 0x22, 0xd5, 0x67, 0x12, 0xc1, 0xa4, 0xe9, 0x8e, 0x8c, 0x37, 0x3c, 0xd2, 0xdb, 0x91, 0x9d, 0x87, 0xff, 0x3c, 0x18, 0x7c, 0x37, 0x37,
0xc6, 0x52, 0x64, 0x9c, 0x45, 0xa7, 0xba, 0xed, 0x4a, 0xf2, 0x14, 0xc6, 0x82, 0x57, 0xe5, 0x06, 0x08, 0x81, 0x6e, 0x4a, 0x19, 0x06, 0xde, 0xc4, 0xbb, 0x3c, 0x8b, 0x75, 0x4d, 0x02, 0x18, 0x6c,
0x23, 0x5f, 0x5f, 0xd8, 0x8a, 0xdc, 0xc0, 0x79, 0x8e, 0x92, 0x6e, 0xa9, 0xa4, 0xd1, 0x68, 0xe6, 0x31, 0x17, 0x09, 0x4f, 0x83, 0x8e, 0x1e, 0xbb, 0x96, 0x3c, 0x81, 0xbe, 0xe0, 0x45, 0xbe, 0xc2,
0x5f, 0x05, 0x8b, 0x37, 0xc9, 0xe1, 0x67, 0x13, 0xfb, 0xc9, 0x64, 0x6d, 0x27, 0x57, 0x4c, 0x96, 0xc0, 0xd7, 0x07, 0xb6, 0x23, 0xd7, 0x70, 0xca, 0x50, 0xd2, 0x35, 0x95, 0x34, 0xe8, 0x4e, 0xfc,
0xbb, 0x74, 0xbf, 0x78, 0xf9, 0x09, 0xc2, 0xce, 0x15, 0x99, 0x82, 0xff, 0x13, 0x77, 0x96, 0x9a, 0xcb, 0xe1, 0xec, 0x55, 0x74, 0xf8, 0x6c, 0x64, 0x9f, 0x8c, 0x96, 0x76, 0x73, 0x91, 0xca, 0x7c,
0x3a, 0x92, 0x27, 0x70, 0x56, 0xd3, 0xfb, 0x0a, 0x2d, 0x2f, 0x53, 0x7c, 0x3c, 0x7d, 0xef, 0xc5, 0x17, 0x97, 0x17, 0x2f, 0x3e, 0xc2, 0x68, 0xef, 0x88, 0x8c, 0xc1, 0xff, 0x89, 0x3b, 0x4b, 0x4d,
0x39, 0x9c, 0xad, 0x6a, 0x64, 0x52, 0x09, 0x92, 0xbb, 0x62, 0x2f, 0x48, 0x9d, 0xc9, 0x73, 0xb8, 0x95, 0xe4, 0x1c, 0x7a, 0x5b, 0x7a, 0x57, 0xa0, 0xe5, 0x65, 0x9a, 0x0f, 0x9d, 0x77, 0x5e, 0xc8,
0x50, 0x0c, 0x84, 0xa4, 0x79, 0xa1, 0x57, 0xfd, 0xb4, 0x69, 0x28, 0xb9, 0xd6, 0x3f, 0xab, 0xca, 0xa0, 0xb7, 0xd8, 0x62, 0x2a, 0x95, 0x20, 0xb9, 0xcb, 0x4a, 0x41, 0xaa, 0x26, 0xcf, 0xe0, 0x4c,
0x95, 0x6d, 0x23, 0x46, 0x1d, 0x23, 0xe2, 0x5b, 0x08, 0x6f, 0x4a, 0xa4, 0x12, 0xbf, 0x15, 0x32, 0x31, 0x10, 0x92, 0xb2, 0x4c, 0x5f, 0xf5, 0xe3, 0x6a, 0xa0, 0xe4, 0x5a, 0xff, 0xac, 0x2a, 0xd7,
0xe3, 0x4c, 0xa8, 0xd1, 0x0d, 0xcf, 0x73, 0xca, 0xb6, 0x91, 0x37, 0xf3, 0xd5, 0xa8, 0x2d, 0x95, 0xd6, 0x8d, 0xe8, 0xee, 0x19, 0x11, 0xfe, 0xf5, 0x60, 0x74, 0x9d, 0x23, 0x95, 0xf8, 0x2d, 0x93,
0x0a, 0x64, 0x75, 0x74, 0xaa, 0xbb, 0xea, 0xa8, 0x5c, 0xe4, 0x95, 0x2c, 0x2a, 0xe9, 0x5c, 0x34, 0x09, 0x4f, 0x85, 0xda, 0x5d, 0x71, 0xc6, 0x68, 0xba, 0x0e, 0xbc, 0x89, 0xaf, 0x76, 0x6d, 0xab,
0x55, 0xfc, 0xdb, 0x81, 0xa6, 0xf8, 0xab, 0x42, 0x21, 0xc9, 0x75, 0xc3, 0x4c, 0xc9, 0x09, 0x16, 0x18, 0xd1, 0x7c, 0x23, 0x82, 0x8e, 0x1e, 0xeb, 0x5a, 0x49, 0xc3, 0x74, 0x1b, 0xf8, 0x7a, 0xa4,
0xcf, 0x06, 0x5d, 0x6d, 0x48, 0x7f, 0x80, 0x09, 0x37, 0xa4, 0xb4, 0xd4, 0x60, 0xf1, 0xea, 0xe1, 0x4a, 0x65, 0x2d, 0x2f, 0x64, 0x56, 0x48, 0xfb, 0x94, 0xed, 0x4a, 0x3d, 0xbd, 0x9a, 0x9e, 0x73,
0x52, 0x87, 0x7b, 0xea, 0xe6, 0xe3, 0x29, 0x3c, 0x76, 0x04, 0x44, 0xc1, 0x99, 0xc0, 0xf8, 0x0e, 0xe8, 0x25, 0x8c, 0x6e, 0x30, 0xe8, 0x1b, 0x1b, 0x74, 0x13, 0xfe, 0x76, 0x94, 0x62, 0xfc, 0x55,
0x82, 0x14, 0xe9, 0xb6, 0xa5, 0xb2, 0x4d, 0xa8, 0xdf, 0xaa, 0x83, 0x37, 0xe3, 0x02, 0xf1, 0x9b, 0xa0, 0x90, 0xe4, 0xaa, 0x12, 0xa6, 0xdc, 0x18, 0xce, 0x9e, 0xb6, 0x86, 0x52, 0x69, 0x7e, 0x0f,
0x40, 0xe2, 0xcf, 0x06, 0xd6, 0xe9, 0x7c, 0xd7, 0x50, 0x36, 0x3a, 0x5f, 0x3c, 0xa4, 0xdc, 0xa2, 0x03, 0x6e, 0x24, 0x69, 0xa7, 0x86, 0xb3, 0x97, 0xf7, 0x2f, 0xed, 0x29, 0x8f, 0xdd, 0x7e, 0x38,
0xd1, 0x10, 0x5e, 0xc1, 0x23, 0x83, 0x63, 0xe8, 0x92, 0xb7, 0x70, 0x6e, 0x09, 0x09, 0x1d, 0xc3, 0x86, 0xc7, 0x8e, 0x80, 0xc8, 0x78, 0x2a, 0x30, 0xbc, 0x81, 0x61, 0x8c, 0x74, 0x5d, 0xf3, 0xa8,
0x7f, 0x1d, 0xdb, 0x8f, 0xc6, 0x4b, 0x08, 0x97, 0x78, 0x8f, 0xc7, 0x19, 0xaf, 0xdc, 0x73, 0x28, 0x4e, 0xa8, 0xd9, 0xe9, 0x83, 0x4f, 0xce, 0xe9, 0xf7, 0x2b, 0xfd, 0xe1, 0x67, 0x03, 0xeb, 0x74,
0xd6, 0xbd, 0x25, 0x84, 0x77, 0xc5, 0x96, 0x1e, 0x8f, 0xeb, 0x50, 0x2c, 0x6e, 0x08, 0xc1, 0xd7, 0xbe, 0xad, 0x28, 0x1b, 0x9d, 0xcf, 0xef, 0x53, 0xae, 0xd1, 0xa8, 0x08, 0x2f, 0xe0, 0x91, 0xc1,
0x4c, 0x48, 0x8b, 0xaa, 0x5c, 0x30, 0xe5, 0x51, 0x2e, 0x2c, 0xfe, 0xf8, 0x30, 0x49, 0xcd, 0x2d, 0x31, 0x74, 0xc9, 0x1b, 0x38, 0xb5, 0x84, 0x84, 0x0e, 0xf1, 0x41, 0xc7, 0xca, 0xd5, 0x70, 0x0e,
0x59, 0xc3, 0xd8, 0xbc, 0x04, 0x32, 0xf8, 0x7a, 0xec, 0xd7, 0x2f, 0x67, 0xc3, 0x03, 0x96, 0xee, 0xa3, 0x39, 0xde, 0xe1, 0x71, 0xc6, 0x2b, 0xf7, 0x1c, 0x8a, 0x75, 0x6f, 0x0e, 0xa3, 0x9b, 0x6c,
0x09, 0xf9, 0x02, 0x23, 0x95, 0x13, 0x19, 0xc8, 0xd5, 0x41, 0xbd, 0x1c, 0xba, 0xde, 0x03, 0xad, 0x4d, 0x8f, 0xc7, 0x75, 0x28, 0x16, 0x77, 0x04, 0xc3, 0xaf, 0x89, 0x90, 0x16, 0x55, 0xb9, 0x60,
0x61, 0x6c, 0x3c, 0xee, 0xe3, 0xd5, 0xc9, 0xb0, 0x8f, 0xd7, 0x41, 0x3c, 0x1a, 0xce, 0x58, 0xdb, 0xda, 0xa3, 0x5c, 0x98, 0xfd, 0xf1, 0x61, 0x10, 0x9b, 0x53, 0xb2, 0x84, 0xbe, 0xf9, 0x12, 0x48,
0x07, 0xd7, 0x89, 0xae, 0x0f, 0xee, 0x20, 0x15, 0x2d, 0x53, 0x05, 0xd1, 0x27, 0xb3, 0x95, 0x57, 0xeb, 0xd7, 0x63, 0x5f, 0xbf, 0x98, 0xb4, 0x2f, 0x58, 0xba, 0x27, 0xe4, 0x0b, 0x74, 0x55, 0x4e,
0x9f, 0xcc, 0x76, 0x7e, 0xf1, 0xc9, 0xf7, 0xb1, 0xfe, 0x75, 0x5f, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xa4, 0x25, 0x57, 0x07, 0xf5, 0xa2, 0xed, 0xb8, 0x04, 0x5a, 0x42, 0xdf, 0x78, 0xdc, 0xc4, 0x6b,
0xff, 0x43, 0x9c, 0x97, 0x62, 0xe1, 0x05, 0x00, 0x00, 0x2f, 0xc3, 0x26, 0x5e, 0x07, 0xf1, 0x68, 0x38, 0x63, 0x6d, 0x13, 0xdc, 0x5e, 0x74, 0x4d, 0x70,
0x07, 0xa9, 0x68, 0x99, 0x2a, 0x88, 0x26, 0x99, 0xb5, 0xbc, 0x9a, 0x64, 0xd6, 0xf3, 0x0b, 0x4f,
0x6e, 0xfb, 0xfa, 0xcf, 0x7f, 0xf5, 0x3f, 0x00, 0x00, 0xff, 0xff, 0x14, 0xdd, 0xee, 0x9f, 0x3a,
0x06, 0x00, 0x00,
} }

View File

@ -1,5 +1,5 @@
// Code generated by protoc-gen-micro. DO NOT EDIT. // Code generated by protoc-gen-micro. DO NOT EDIT.
// source: runtime/service/proto/runtime.proto // source: github.com/micro/go-micro/runtime/service/proto/runtime.proto
package go_micro_runtime package go_micro_runtime

View File

@ -31,10 +31,16 @@ message Event {
message CreateOptions { message CreateOptions {
// command to pass in // command to pass in
repeated string command = 1; repeated string command = 1;
// args to pass into command
repeated string args = 2;
// environment to pass in // environment to pass in
repeated string env = 2; repeated string env = 3;
// output to send to // output to send to
string output = 3; string output = 4;
// create type of service
string type = 5;
// image to use
string image = 6;
} }
message CreateRequest { message CreateRequest {

View File

@ -50,7 +50,10 @@ func (s *svc) Create(svc *runtime.Service, opts ...runtime.CreateOption) error {
}, },
Options: &pb.CreateOptions{ Options: &pb.CreateOptions{
Command: options.Command, Command: options.Command,
Args: options.Args,
Env: options.Env, Env: options.Env,
Type: options.Type,
Image: options.Image,
}, },
} }

View File

@ -5,8 +5,8 @@ import (
cryptotls "crypto/tls" cryptotls "crypto/tls"
"time" "time"
"github.com/micro/go-micro/v2/store"
"github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/clientv3"
"github.com/micro/go-micro/v2/store"
"google.golang.org/grpc" "google.golang.org/grpc"
) )

View File

@ -9,10 +9,10 @@ import (
"strings" "strings"
"time" "time"
"github.com/micro/go-micro/v2/store"
"github.com/pkg/errors"
"github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/clientv3"
"github.com/coreos/etcd/clientv3/namespace" "github.com/coreos/etcd/clientv3/namespace"
"github.com/micro/go-micro/v2/store"
"github.com/pkg/errors"
) )
type etcdStore struct { type etcdStore struct {

View File

@ -271,7 +271,7 @@ func NewDeployment(name, version, typ string) *Deployment {
Name: name, Name: name,
Image: DefaultImage, Image: DefaultImage,
Env: []EnvVar{env}, Env: []EnvVar{env},
Command: []string{"go", "run", "main.go"}, Command: []string{"go", "run", "."},
Ports: []ContainerPort{{ Ports: []ContainerPort{{
Name: "service-port", Name: "service-port",
ContainerPort: 8080, ContainerPort: 8080,