Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/components/ws-manager-mk2/service/imagespec.go
2496 views
1
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
2
// Licensed under the GNU Affero General Public License (AGPL).
3
// See License-AGPL.txt in the project root for license information.
4
5
package service
6
7
import (
8
"context"
9
10
regapi "github.com/gitpod-io/gitpod/registry-facade/api"
11
workspacev1 "github.com/gitpod-io/gitpod/ws-manager/api/crd/v1"
12
"google.golang.org/grpc/codes"
13
"google.golang.org/grpc/status"
14
"k8s.io/apimachinery/pkg/api/errors"
15
"k8s.io/apimachinery/pkg/types"
16
"k8s.io/utils/pointer"
17
18
"sigs.k8s.io/controller-runtime/pkg/client"
19
)
20
21
type WorkspaceImageSpecProvider struct {
22
Client client.Client
23
Namespace string
24
25
regapi.UnimplementedSpecProviderServer
26
}
27
28
func (is *WorkspaceImageSpecProvider) GetImageSpec(ctx context.Context, req *regapi.GetImageSpecRequest) (*regapi.GetImageSpecResponse, error) {
29
var ws workspacev1.Workspace
30
err := is.Client.Get(ctx, types.NamespacedName{Namespace: is.Namespace, Name: req.Id}, &ws)
31
if errors.IsNotFound(err) {
32
return nil, status.Errorf(codes.NotFound, "not found")
33
}
34
if err != nil {
35
return nil, status.Errorf(codes.Internal, "%s", err.Error())
36
}
37
38
return &regapi.GetImageSpecResponse{
39
Spec: &regapi.ImageSpec{
40
BaseRef: pointer.StringDeref(ws.Spec.Image.Workspace.Ref, ""),
41
IdeRef: ws.Spec.Image.IDE.Web,
42
IdeLayerRef: ws.Spec.Image.IDE.Refs,
43
SupervisorRef: ws.Spec.Image.IDE.Supervisor,
44
},
45
}, nil
46
}
47
48