Skip to content

Commit 4829fc3

Browse files
Merge pull request GoogleCloudPlatform#1254 from justinsb/vertexai_integration
mockgcp: vertexai support
2 parents 46a80be + 87393b0 commit 4829fc3

File tree

160 files changed

+155642
-56
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

160 files changed

+155642
-56
lines changed

config/tests/samples/create/harness.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,8 @@ func MaybeSkip(t *testing.T, name string, resources []*unstructured.Unstructured
453453

454454
case schema.GroupKind{Group: "tags.cnrm.cloud.google.com", Kind: "TagsTagKey"}:
455455

456+
case schema.GroupKind{Group: "vertexai.cnrm.cloud.google.com", Kind: "VertexAITensorboard"}:
457+
456458
default:
457459
t.Skipf("gk %v not suppported by mock gcp %v; skipping", gvk.GroupKind(), name)
458460
}

mockgcp/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ gen-proto:
3030
./third_party/googleapis/mockgcp/api/apikeys/v2/*.proto \
3131
./third_party/googleapis/mockgcp/storage/v1/*.proto \
3232
./third_party/googleapis/mockgcp/iam/admin/v1/*.proto \
33+
./third_party/googleapis/mockgcp/cloud/aiplatform/v1beta1/*.proto \
3334
./third_party/googleapis/mockgcp/cloud/billing/v1/*.proto \
3435
./third_party/googleapis/mockgcp/cloud/certificatemanager/v1/*.proto \
3536
./third_party/googleapis/mockgcp/cloud/compute/v1/*.proto \

mockgcp/common/operations/http.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,18 @@ import (
2727
"k8s.io/klog/v2"
2828
)
2929

30-
func (s *Operations) RegisterOperationsHandler(prefix string) func(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
30+
func (s *Operations) RegisterOperationsPath(path string) func(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
3131
return func(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
3232
forwardResponseOptions := mux.GetForwardResponseOptions()
3333

34-
// GET /{prefix}/operations/{name}
35-
if err := mux.HandlePath("GET", "/"+prefix+"/operations/{name}", func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {
34+
if err := mux.HandlePath("GET", path, func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {
3635
ctx := r.Context()
3736
name := pathParams["name"]
37+
prefix := pathParams["prefix"]
3838
req := &longrunningpb.GetOperationRequest{Name: "operations/" + name}
39+
if prefix != "" {
40+
req.Name = prefix + "/operations/" + name
41+
}
3942
op, err := s.GetOperation(ctx, req)
4043
if err != nil {
4144
if status.Code(err) == codes.NotFound {

mockgcp/common/operations/operations.go

Lines changed: 66 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,17 @@ func (s *Operations) NewLRO(ctx context.Context) (*pb.Operation, error) {
6262
return op, nil
6363
}
6464

65-
func (s *Operations) StartLRO(ctx context.Context, metadata proto.Message, callback func() (proto.Message, error)) (*pb.Operation, error) {
65+
func (s *Operations) StartLRO(ctx context.Context, prefix string, metadata proto.Message, callback func() (proto.Message, error)) (*pb.Operation, error) {
6666
now := time.Now()
6767
millis := now.UnixMilli()
6868
id := uuid.NewUUID()
6969

7070
op := &pb.Operation{}
7171

7272
op.Name = fmt.Sprintf("operations/operation-%d-%s", millis, id)
73+
if prefix != "" {
74+
op.Name = prefix + "/" + op.Name
75+
}
7376
op.Done = false
7477

7578
if metadata != nil {
@@ -95,26 +98,10 @@ func (s *Operations) StartLRO(ctx context.Context, metadata proto.Message, callb
9598
return
9699
}
97100

98-
finished.Done = true
99-
if err != nil {
100-
finished.Result = &pb.Operation_Error{
101-
Error: &rpcstatus.Status{
102-
Message: fmt.Sprintf("error processing operation: %v", err),
103-
},
104-
}
105-
} else {
106-
resultAny, err := anypb.New(result)
107-
if err != nil {
108-
klog.Warningf("error building anypb for result: %v", err)
109-
finished.Result = &pb.Operation_Response{}
110-
} else {
111-
rewriteTypes(resultAny)
112-
113-
finished.Result = &pb.Operation_Response{
114-
Response: resultAny,
115-
}
116-
}
101+
if err2 := markDone(finished, result, err); err2 != nil {
102+
klog.Warningf("error marking LRO as done: %v", err2)
117103
}
104+
118105
if err := s.storage.Update(ctx, fqn, finished); err != nil {
119106
klog.Warningf("error updating LRO: %v", err)
120107
return
@@ -124,6 +111,65 @@ func (s *Operations) StartLRO(ctx context.Context, metadata proto.Message, callb
124111
return op, nil
125112
}
126113

114+
func markDone(op *pb.Operation, result proto.Message, err error) error {
115+
op.Done = true
116+
if err != nil {
117+
op.Result = &pb.Operation_Error{
118+
Error: &rpcstatus.Status{
119+
Message: fmt.Sprintf("error processing operation: %v", err),
120+
},
121+
}
122+
} else {
123+
resultAny, err := anypb.New(result)
124+
if err != nil {
125+
klog.Warningf("error building anypb for result: %v", err)
126+
op.Result = &pb.Operation_Response{}
127+
} else {
128+
rewriteTypes(resultAny)
129+
130+
op.Result = &pb.Operation_Response{
131+
Response: resultAny,
132+
}
133+
}
134+
}
135+
return nil
136+
}
137+
138+
func (s *Operations) DoneLRO(ctx context.Context, prefix string, metadata proto.Message, result proto.Message) (*pb.Operation, error) {
139+
now := time.Now()
140+
millis := now.UnixMilli()
141+
id := uuid.NewUUID()
142+
143+
op := &pb.Operation{}
144+
145+
op.Name = fmt.Sprintf("operations/operation-%d-%s", millis, id)
146+
if prefix != "" {
147+
op.Name = prefix + "/" + op.Name
148+
}
149+
op.Done = false
150+
151+
if err := markDone(op, result, nil); err != nil {
152+
return nil, err
153+
}
154+
155+
if metadata != nil {
156+
metadataAny, err := anypb.New(metadata)
157+
if err != nil {
158+
return nil, fmt.Errorf("error building anypb for metadata: %w", err)
159+
}
160+
rewriteTypes(metadataAny)
161+
162+
op.Metadata = metadataAny
163+
}
164+
fqn := op.Name
165+
166+
if err := s.storage.Create(ctx, fqn, op); err != nil {
167+
return nil, status.Errorf(codes.Internal, "error creating LRO: %v", err)
168+
}
169+
170+
return op, nil
171+
}
172+
127173
func rewriteTypes(any *anypb.Any) {
128174
// Fix our mockgcp hack
129175
if strings.HasPrefix(any.TypeUrl, "type.googleapis.com/mockgcp.") {

mockgcp/common/projects/projects.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ func (n *ProjectName) String() string {
4646
return "projects/" + n.OriginalValue
4747
}
4848

49+
// ParseProjectName parses a string into a ProjectName.
50+
// The expected form is projects/<projectIDOrNumber>
4951
func ParseProjectName(name string) (*ProjectName, error) {
5052
tokens := strings.Split(name, "/")
5153
if len(tokens) == 2 && tokens[0] == "projects" {

mockgcp/generated/mockgcp/cloud/aiplatform/v1beta1/accelerator_type.pb.go

Lines changed: 227 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)