support version selection

This commit is contained in:
rushtehrani
2019-12-13 13:19:05 -08:00
parent 2179af0d76
commit a59b9504bd
9 changed files with 77 additions and 39 deletions

View File

@@ -171,6 +171,10 @@ func local_request_WorkflowService_CreateWorkflowTemplate_0(ctx context.Context,
}
var (
filter_WorkflowService_GetWorkflowTemplate_0 = &utilities.DoubleArray{Encoding: map[string]int{"namespace": 0, "uid": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}}
)
func request_WorkflowService_GetWorkflowTemplate_0(ctx context.Context, marshaler runtime.Marshaler, client WorkflowServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetWorkflowTemplateRequest
var metadata runtime.ServerMetadata
@@ -204,6 +208,13 @@ func request_WorkflowService_GetWorkflowTemplate_0(ctx context.Context, marshale
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_WorkflowService_GetWorkflowTemplate_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.GetWorkflowTemplate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
@@ -242,6 +253,10 @@ func local_request_WorkflowService_GetWorkflowTemplate_0(ctx context.Context, ma
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_WorkflowService_GetWorkflowTemplate_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.GetWorkflowTemplate(ctx, &protoReq)
return msg, metadata, err

View File

@@ -66,6 +66,13 @@
"in": "path",
"required": true,
"type": "string"
},
{
"name": "version",
"in": "query",
"required": false,
"type": "integer",
"format": "int32"
}
],
"tags": [
@@ -194,7 +201,8 @@
"type": "string"
},
"version": {
"type": "string"
"type": "integer",
"format": "int32"
},
"manifest": {
"type": "string"

View File

@@ -70,6 +70,7 @@ func (m *CreateWorkflowTemplateRequest) GetWorkflowTemplate() *WorkflowTemplate
type GetWorkflowTemplateRequest struct {
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"`
Version int32 `protobuf:"varint,3,opt,name=version,proto3" json:"version,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -114,6 +115,13 @@ func (m *GetWorkflowTemplateRequest) GetUid() string {
return ""
}
func (m *GetWorkflowTemplateRequest) GetVersion() int32 {
if m != nil {
return m.Version
}
return 0
}
type ListWorkflowTemplateVersionsRequest struct {
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"`
@@ -211,7 +219,7 @@ func (m *ListWorkflowTemplateVersionsResponse) GetCount() int32 {
type WorkflowTemplate struct {
Uid string `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"`
Version int32 `protobuf:"varint,3,opt,name=version,proto3" json:"version,omitempty"`
Manifest string `protobuf:"bytes,4,opt,name=manifest,proto3" json:"manifest,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
@@ -257,11 +265,11 @@ func (m *WorkflowTemplate) GetName() string {
return ""
}
func (m *WorkflowTemplate) GetVersion() string {
func (m *WorkflowTemplate) GetVersion() int32 {
if m != nil {
return m.Version
}
return ""
return 0
}
func (m *WorkflowTemplate) GetManifest() string {
@@ -282,22 +290,22 @@ func init() {
func init() { proto.RegisterFile("workflow_template.proto", fileDescriptor_b9a07547748a96e8) }
var fileDescriptor_b9a07547748a96e8 = []byte{
// 263 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x92, 0x3f, 0x4f, 0xc3, 0x30,
0x10, 0xc5, 0x65, 0xd2, 0x02, 0x39, 0x96, 0x70, 0x02, 0x61, 0x55, 0x20, 0x45, 0x81, 0xa1, 0x53,
0x06, 0xf8, 0x04, 0xa8, 0x03, 0x4b, 0xa7, 0x88, 0x3f, 0x23, 0x32, 0xe5, 0x2a, 0x59, 0x34, 0xb6,
0xc9, 0x39, 0x64, 0x85, 0x6f, 0x8e, 0xea, 0xa6, 0x45, 0x4a, 0x44, 0x87, 0x6c, 0xf7, 0x2e, 0xef,
0xde, 0xfd, 0x2e, 0x32, 0x5c, 0x34, 0xb6, 0xfa, 0x58, 0xae, 0x6c, 0xf3, 0xea, 0xa9, 0x74, 0x2b,
0xe5, 0x29, 0x77, 0x95, 0xf5, 0x16, 0x23, 0xe5, 0x74, 0xf6, 0x2d, 0xe0, 0x6a, 0x56, 0x91, 0xf2,
0xf4, 0xd2, 0xda, 0x1e, 0x5b, 0x57, 0x41, 0x9f, 0x35, 0xb1, 0xc7, 0x4b, 0x88, 0x8d, 0x2a, 0x89,
0x9d, 0x5a, 0x90, 0x14, 0xa9, 0x98, 0xc6, 0xc5, 0x5f, 0x03, 0xef, 0x21, 0x69, 0x3a, 0x83, 0xf2,
0x20, 0x15, 0xd3, 0x93, 0xdb, 0xf3, 0x5c, 0x39, 0x9d, 0xf7, 0x52, 0x7b, 0xf6, 0x6c, 0x0e, 0x93,
0x07, 0xf2, 0xc3, 0xd6, 0x27, 0x10, 0xd5, 0xfa, 0x3d, 0x6c, 0x8c, 0x8b, 0x75, 0x99, 0x3d, 0xc1,
0xf5, 0x5c, 0x73, 0x2f, 0xee, 0x99, 0x2a, 0xd6, 0xd6, 0xf0, 0xd0, 0xd8, 0x1f, 0x01, 0x37, 0xfb,
0x73, 0xd9, 0x59, 0xc3, 0x84, 0x33, 0x38, 0xed, 0x5e, 0xc8, 0x52, 0xa4, 0xd1, 0xff, 0x7f, 0xa4,
0xef, 0xc7, 0x33, 0x18, 0x2f, 0x6c, 0x6d, 0x7c, 0x20, 0x18, 0x17, 0x1b, 0x91, 0x19, 0x48, 0xba,
0xc3, 0x5b, 0x52, 0xb1, 0x23, 0x45, 0x84, 0xd1, 0xfa, 0x90, 0x16, 0x3e, 0xd4, 0x28, 0xe1, 0xe8,
0x6b, 0x03, 0x2a, 0xa3, 0xd0, 0xde, 0x4a, 0x9c, 0xc0, 0x71, 0xa9, 0x8c, 0x5e, 0x12, 0x7b, 0x39,
0x0a, 0x9f, 0x76, 0xfa, 0xed, 0x30, 0xbc, 0x93, 0xbb, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe8,
0x92, 0xc7, 0xce, 0x42, 0x02, 0x00, 0x00,
// 266 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x52, 0x3d, 0x4f, 0xc3, 0x30,
0x10, 0x95, 0x49, 0x03, 0xe4, 0x58, 0x82, 0x05, 0xc2, 0xaa, 0x40, 0x8a, 0x02, 0x43, 0xa6, 0x0c,
0xf0, 0x0b, 0x50, 0x07, 0x16, 0x26, 0x8b, 0x8f, 0x11, 0x99, 0x72, 0x91, 0x2c, 0x1a, 0xdb, 0xe4,
0x1c, 0xb2, 0xc2, 0x3f, 0x47, 0x75, 0x53, 0x2a, 0x25, 0x6a, 0x87, 0x6e, 0xf7, 0x92, 0xf7, 0xee,
0xbd, 0x7b, 0x32, 0x5c, 0x74, 0xb6, 0xf9, 0xac, 0x16, 0xb6, 0x7b, 0xf3, 0x58, 0xbb, 0x85, 0xf2,
0x58, 0xba, 0xc6, 0x7a, 0xcb, 0x23, 0xe5, 0x74, 0xfe, 0xc3, 0xe0, 0x6a, 0xd6, 0xa0, 0xf2, 0xf8,
0xda, 0xd3, 0x9e, 0x7a, 0x96, 0xc4, 0xaf, 0x16, 0xc9, 0xf3, 0x4b, 0x48, 0x8c, 0xaa, 0x91, 0x9c,
0x9a, 0xa3, 0x60, 0x19, 0x2b, 0x12, 0xb9, 0xf9, 0xc0, 0xef, 0x21, 0xed, 0x06, 0x42, 0x71, 0x90,
0xb1, 0xe2, 0xe4, 0xf6, 0xbc, 0x54, 0x4e, 0x97, 0xa3, 0xad, 0x23, 0x7a, 0x5e, 0xc1, 0xf4, 0x01,
0xfd, 0x7e, 0xf6, 0x29, 0x44, 0xad, 0xfe, 0x08, 0x8e, 0x89, 0x5c, 0x8e, 0x5c, 0xc0, 0xd1, 0x37,
0x36, 0xa4, 0xad, 0x11, 0x51, 0xc6, 0x8a, 0x58, 0xae, 0x61, 0xfe, 0x0c, 0xd7, 0x8f, 0x9a, 0x46,
0x46, 0x2f, 0xab, 0xdf, 0xb4, 0xa7, 0x61, 0xfe, 0xcb, 0xe0, 0x66, 0xf7, 0x5e, 0x72, 0xd6, 0x10,
0xf2, 0x19, 0x9c, 0x0e, 0x6f, 0x27, 0xc1, 0xb2, 0x68, 0x7b, 0x57, 0x63, 0x3e, 0x3f, 0x83, 0x78,
0x6e, 0x5b, 0xe3, 0x43, 0x82, 0x58, 0xae, 0x40, 0x6e, 0x20, 0x1d, 0x8a, 0xd7, 0x49, 0xd9, 0xa6,
0x1a, 0x0e, 0x93, 0xe5, 0x21, 0x7d, 0xf8, 0x30, 0x6f, 0xaf, 0x8b, 0x4f, 0xe1, 0xb8, 0x56, 0x46,
0x57, 0x48, 0x5e, 0x4c, 0x82, 0xe2, 0x1f, 0xbf, 0x1f, 0x86, 0x17, 0x74, 0xf7, 0x17, 0x00, 0x00,
0xff, 0xff, 0xf9, 0x1d, 0xa0, 0xf0, 0x5c, 0x02, 0x00, 0x00,
}

View File

@@ -10,6 +10,7 @@ message CreateWorkflowTemplateRequest {
message GetWorkflowTemplateRequest {
string namespace = 1;
string uid = 2;
int32 version = 3;
}
message ListWorkflowTemplateVersionsRequest {
@@ -25,6 +26,6 @@ message ListWorkflowTemplateVersionsResponse {
message WorkflowTemplate {
string uid = 1;
string name = 2;
string version = 3;
int32 version = 3;
string manifest = 4;
}

View File

@@ -3,7 +3,7 @@ CREATE TABLE workflow_template_versions
(
id serial PRIMARY KEY,
workflow_template_id integer NOT NULL REFERENCES workflow_templates ON DELETE CASCADE,
version timestamp NOT NULL DEFAULT (NOW() at time zone 'utc'),
version integer NOT NULL,
manifest text NOT NULL,
-- auditing info

View File

@@ -8,7 +8,7 @@ import (
)
func (r *ResourceManager) CreateWorkflow(namespace string, workflow *model.Workflow) (createdWorkflow *model.Workflow, err error) {
workflowTemplate, err := r.workflowRepository.GetWorkflowTemplate(workflow.WorkflowTemplate.UID)
workflowTemplate, err := r.workflowRepository.GetWorkflowTemplate(workflow.WorkflowTemplate.UID, workflow.WorkflowTemplate.Version)
if err != nil {
return nil, util.NewUserError(codes.NotFound, "Workflow template not found.")
}
@@ -43,8 +43,8 @@ func (r *ResourceManager) CreateWorkflowTemplate(namespace string, workflowTempl
return
}
func (r *ResourceManager) GetWorkflowTemplate(namespace, uid string) (workflowTemplate *model.WorkflowTemplate, err error) {
workflowTemplate, err = r.workflowRepository.GetWorkflowTemplate(uid)
func (r *ResourceManager) GetWorkflowTemplate(namespace, uid string, version int32) (workflowTemplate *model.WorkflowTemplate, err error) {
workflowTemplate, err = r.workflowRepository.GetWorkflowTemplate(uid, version)
if err != nil {
return nil, util.NewUserError(codes.NotFound, "Workflow template not found.")
}

View File

@@ -1,8 +1,6 @@
package model
import (
"time"
"github.com/google/uuid"
)
@@ -11,7 +9,7 @@ type WorkflowTemplate struct {
UID string
Name string
Manifest string
Version *time.Time
Version int32
}
func (wt *WorkflowTemplate) GetManifestBytes() []byte {

View File

@@ -1,6 +1,8 @@
package repository
import (
"time"
sq "github.com/Masterminds/squirrel"
"github.com/onepanelio/core/model"
)
@@ -42,6 +44,7 @@ func (r *WorkflowRepository) CreateWorkflowTemplate(workflowTemplate *model.Work
SetMap(sq.Eq{
"workflow_template_id": workflowTemplate.ID,
"manifest": workflowTemplate.Manifest,
"version": int32(time.Now().Unix()),
}).
Suffix("RETURNING version").
RunWith(tx).
@@ -57,20 +60,24 @@ func (r *WorkflowRepository) CreateWorkflowTemplate(workflowTemplate *model.Work
return workflowTemplate, nil
}
func (r *WorkflowRepository) GetWorkflowTemplate(uid string) (workflowTemplate *model.WorkflowTemplate, err error) {
func (r *WorkflowRepository) GetWorkflowTemplate(uid string, version int32) (workflowTemplate *model.WorkflowTemplate, err error) {
workflowTemplate = &model.WorkflowTemplate{}
query, args, err := r.sb.Select("wt.uid", "wtv.version", "wtv.manifest").
query := r.sb.Select("wt.uid", "wtv.version", "wtv.manifest").
From("workflow_template_versions wtv").
Join("workflow_templates wt ON wt.id = wtv.workflow_template_id").
Where(sq.Eq{"wt.uid": uid}).
OrderBy("wtv.version desc").
Limit(1).ToSql()
Limit(1)
if version != 0 {
query = query.Where(sq.Eq{"wtv.version": version})
}
sql, args, err := query.ToSql()
if err != nil {
return
}
err = r.db.Get(workflowTemplate, query, args...)
err = r.db.Get(workflowTemplate, sql, args...)
return
}

View File

@@ -25,6 +25,7 @@ func (s *WorkflowServer) CreateWorkflow(ctx context.Context, req *api.CreateWork
workflow := &model.Workflow{
WorkflowTemplate: model.WorkflowTemplate{
UID: req.Workflow.WorkflowTemplate.Uid,
Version: req.Workflow.WorkflowTemplate.Version,
},
}
for _, param := range req.Workflow.Parameters {
@@ -56,20 +57,20 @@ func (s *WorkflowServer) CreateWorkflowTemplate(ctx context.Context, req *api.Cr
return nil, userError.GRPCError()
}
req.WorkflowTemplate.Uid = workflowTemplate.UID
req.WorkflowTemplate.Version = workflowTemplate.Version.String()
req.WorkflowTemplate.Version = workflowTemplate.Version
return req.WorkflowTemplate, nil
}
func (s *WorkflowServer) GetWorkflowTemplate(ctx context.Context, req *api.GetWorkflowTemplateRequest) (*api.WorkflowTemplate, error) {
workflowTemplate, err := s.resourceManager.GetWorkflowTemplate(req.Namespace, req.Uid)
workflowTemplate, err := s.resourceManager.GetWorkflowTemplate(req.Namespace, req.Uid, req.Version)
if errors.As(err, &userError) {
return nil, userError.GRPCError()
}
return &api.WorkflowTemplate{
Uid: workflowTemplate.UID,
Version: workflowTemplate.Version.String(),
Version: workflowTemplate.Version,
Manifest: workflowTemplate.Manifest,
}, nil
}
@@ -85,7 +86,7 @@ func (s *WorkflowServer) ListWorkflowTemplateVersions(ctx context.Context, req *
workflowTemplates = append(workflowTemplates, &api.WorkflowTemplate{
Uid: wtv.UID,
Name: wtv.Name,
Version: wtv.Version.String(),
Version: wtv.Version,
Manifest: wtv.Manifest,
})
}