* Update the runtime for k8s name formatting and move Get to Read endpoint * strip regex validation
		
			
				
	
	
		
			150 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package handler
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 
 | |
| 	"github.com/micro/go-micro/errors"
 | |
| 	"github.com/micro/go-micro/runtime"
 | |
| 	pb "github.com/micro/go-micro/runtime/service/proto"
 | |
| )
 | |
| 
 | |
| type Runtime struct {
 | |
| 	Runtime runtime.Runtime
 | |
| }
 | |
| 
 | |
| func toProto(s *runtime.Service) *pb.Service {
 | |
| 	return &pb.Service{
 | |
| 		Name:     s.Name,
 | |
| 		Version:  s.Version,
 | |
| 		Source:   s.Source,
 | |
| 		Path:     s.Path,
 | |
| 		Exec:     s.Exec,
 | |
| 		Metadata: s.Metadata,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func toService(s *pb.Service) *runtime.Service {
 | |
| 	return &runtime.Service{
 | |
| 		Name:     s.Name,
 | |
| 		Version:  s.Version,
 | |
| 		Source:   s.Source,
 | |
| 		Path:     s.Path,
 | |
| 		Exec:     s.Exec,
 | |
| 		Metadata: s.Metadata,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func toCreateOptions(opts *pb.CreateOptions) []runtime.CreateOption {
 | |
| 	options := []runtime.CreateOption{}
 | |
| 	// command options
 | |
| 	l := len(opts.Command)
 | |
| 	if l == 1 {
 | |
| 		options = append(options, runtime.WithCommand(opts.Command[0]))
 | |
| 	}
 | |
| 	if l > 1 {
 | |
| 		options = append(options, runtime.WithCommand(opts.Command[0], opts.Command[1:]...))
 | |
| 	}
 | |
| 	// env options
 | |
| 	if len(opts.Env) > 0 {
 | |
| 		options = append(options, runtime.WithEnv(opts.Env))
 | |
| 	}
 | |
| 
 | |
| 	// TODO: output options
 | |
| 
 | |
| 	return options
 | |
| }
 | |
| 
 | |
| func toReadOptions(opts *pb.ReadOptions) []runtime.ReadOption {
 | |
| 	options := []runtime.ReadOption{}
 | |
| 	// version options
 | |
| 	if len(opts.Version) > 0 {
 | |
| 		options = append(options, runtime.WithVersion(opts.Version))
 | |
| 	}
 | |
| 
 | |
| 	return options
 | |
| }
 | |
| 
 | |
| func (r *Runtime) Create(ctx context.Context, req *pb.CreateRequest, rsp *pb.CreateResponse) error {
 | |
| 	if req.Service == nil {
 | |
| 		return errors.BadRequest("go.micro.runtime", "blank service")
 | |
| 	}
 | |
| 
 | |
| 	var options []runtime.CreateOption
 | |
| 	if req.Options != nil {
 | |
| 		options = toCreateOptions(req.Options)
 | |
| 	}
 | |
| 
 | |
| 	service := toService(req.Service)
 | |
| 	err := r.Runtime.Create(service, options...)
 | |
| 	if err != nil {
 | |
| 		return errors.InternalServerError("go.micro.runtime", err.Error())
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (r *Runtime) Read(ctx context.Context, req *pb.ReadRequest, rsp *pb.ReadResponse) error {
 | |
| 	if len(req.Name) == 0 {
 | |
| 		return errors.BadRequest("go.micro.runtime", "blank service")
 | |
| 	}
 | |
| 
 | |
| 	var options []runtime.ReadOption
 | |
| 	if req.Options != nil {
 | |
| 		options = toReadOptions(req.Options)
 | |
| 	}
 | |
| 
 | |
| 	services, err := r.Runtime.Read(req.Name, options...)
 | |
| 	if err != nil {
 | |
| 		return errors.InternalServerError("go.micro.runtime", err.Error())
 | |
| 	}
 | |
| 
 | |
| 	for _, service := range services {
 | |
| 		rsp.Services = append(rsp.Services, toProto(service))
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (r *Runtime) Update(ctx context.Context, req *pb.UpdateRequest, rsp *pb.UpdateResponse) error {
 | |
| 	if req.Service == nil {
 | |
| 		return errors.BadRequest("go.micro.runtime", "blank service")
 | |
| 	}
 | |
| 
 | |
| 	// TODO: add opts
 | |
| 	service := toService(req.Service)
 | |
| 	err := r.Runtime.Update(service)
 | |
| 	if err != nil {
 | |
| 		return errors.InternalServerError("go.micro.runtime", err.Error())
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (r *Runtime) Delete(ctx context.Context, req *pb.DeleteRequest, rsp *pb.DeleteResponse) error {
 | |
| 	if req.Service == nil {
 | |
| 		return errors.BadRequest("go.micro.runtime", "blank service")
 | |
| 	}
 | |
| 
 | |
| 	// TODO: add opts
 | |
| 	service := toService(req.Service)
 | |
| 	err := r.Runtime.Delete(service)
 | |
| 	if err != nil {
 | |
| 		return errors.InternalServerError("go.micro.runtime", err.Error())
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (r *Runtime) List(ctx context.Context, req *pb.ListRequest, rsp *pb.ListResponse) error {
 | |
| 	services, err := r.Runtime.List()
 | |
| 	if err != nil {
 | |
| 		return errors.InternalServerError("go.micro.runtime", err.Error())
 | |
| 	}
 | |
| 
 | |
| 	for _, service := range services {
 | |
| 		rsp.Services = append(rsp.Services, toProto(service))
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 |