Skip to content

Commit 7f83084

Browse files
authored
fix(worker): be able to get external service configuration (#5166)
1 parent 72da5f9 commit 7f83084

File tree

8 files changed

+70
-40
lines changed

8 files changed

+70
-40
lines changed

engine/api/authentication/consumer.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ func NewConsumerWorker(ctx context.Context, db gorp.SqlExecutor, name string, ha
2323
sdk.AuthConsumerScopeProject,
2424
sdk.AuthConsumerScopeRun,
2525
sdk.AuthConsumerScopeRunExecution,
26+
sdk.AuthConsumerScopeService,
2627
),
2728
IssuedAt: time.Now(),
2829
}

engine/api/services.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,17 @@ func (api *API) getExternalServiceHandler() service.Handler {
2323

2424
for _, s := range api.Config.Services {
2525
if s.Type == typeService {
26-
return service.WriteJSON(w, s, http.StatusOK)
26+
extService := sdk.ExternalService{
27+
HealthPath: s.HealthPath,
28+
HealthPort: s.HealthPort,
29+
Path: s.Path,
30+
HealthURL: s.HealthURL,
31+
Port: s.Port,
32+
URL: s.URL,
33+
}
34+
return service.WriteJSON(w, extService, http.StatusOK)
2735
}
2836
}
29-
3037
return sdk.WrapError(sdk.ErrNotFound, "service %s not found", typeService)
3138
}
3239
}
@@ -60,9 +67,9 @@ func (api *API) postServiceRegisterHandler() service.Handler {
6067
}
6168
if srv != nil && !(srv.Type == data.Type) {
6269
return sdk.WrapError(sdk.ErrForbidden, "cannot register service %s of type %s for consumer %s while existing service type is different", data.Name, data.Type, consumer.ID)
63-
}
64-
65-
// Update or create the service
70+
}
71+
72+
// Update or create the service
6673
if srv != nil {
6774
srv.Update(data)
6875
if err := services.Update(ctx, tx, srv); err != nil {

engine/worker/internal/handler_cache_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func Test_cachePushPullHandler(t *testing.T) {
8787

8888
// Prepare mock client for cds workers
8989
ctrl := gomock.NewController(t)
90-
m := mock_cdsclient.NewMockInterface(ctrl)
90+
m := mock_cdsclient.NewMockWorkerInterface(ctrl)
9191
wkPush.client = m
9292
wkPull.client = m
9393

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package internal
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"github.com/gorilla/mux"
7+
"net/http"
8+
9+
"github.com/ovh/cds/sdk/log"
10+
)
11+
12+
func serviceHandler(ctx context.Context, wk *CurrentWorker) http.HandlerFunc {
13+
return func(w http.ResponseWriter, r *http.Request) {
14+
vars := mux.Vars(r)
15+
serviceType := vars["type"]
16+
17+
log.Debug("Getting service configuration...")
18+
serviceConfig, err := wk.Client().ServiceConfigurationGet(ctx, serviceType)
19+
if err != nil {
20+
log.Warning(ctx, "unable to get data: %v", err)
21+
writeError(w, r, fmt.Errorf("unable to get service configuration"))
22+
}
23+
writeJSON(w, serviceConfig, http.StatusOK)
24+
return
25+
}
26+
}

engine/worker/internal/http_server.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ func (w *CurrentWorker) Serve(c context.Context) error {
5252
r.HandleFunc("/download", LogMiddleware(downloadHandler(c, w)))
5353
r.HandleFunc("/exit", LogMiddleware(exitHandler(c, w)))
5454
r.HandleFunc("/key/{key}/install", LogMiddleware(keyInstallHandler(c, w)))
55+
r.HandleFunc("/services/{type}", LogMiddleware(serviceHandler(c, w)))
5556
r.HandleFunc("/tag", LogMiddleware(tagHandler(c, w)))
5657
r.HandleFunc("/tmpl", LogMiddleware(tmplHandler(c, w)))
5758
r.HandleFunc("/upload", LogMiddleware(uploadHandler(c, w)))

sdk/cdsclient/client_services.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,12 @@ func (c *client) ServiceRegister(ctx context.Context, s sdk.Service) (*sdk.Servi
3232
}
3333
return &s, nil
3434
}
35+
36+
func (c *client) ServiceConfigurationGet(ctx context.Context, t string) (*sdk.ExternalService, error) {
37+
var serviceConf sdk.ExternalService
38+
_, err := c.GetJSON(ctx, fmt.Sprintf("/services/%s", t), &serviceConf)
39+
if err != nil {
40+
return nil, err
41+
}
42+
return &serviceConf, nil
43+
}

sdk/cdsclient/interface.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,7 @@ type WorkerInterface interface {
383383
ProjectIntegrationGet(projectKey string, integrationName string, clearPassword bool) (sdk.ProjectIntegration, error)
384384
QueueClient
385385
Requirements() ([]sdk.Requirement, error)
386+
ServiceConfigurationGet(context.Context, string) (*sdk.ExternalService, error)
386387
WorkerClient
387388
WorkflowRunArtifacts(projectKey string, name string, number int64) ([]sdk.WorkflowNodeRunArtifact, error)
388389
WorkflowCachePush(projectKey, integrationName, ref string, tarContent io.Reader, size int) error

sdk/cdsclient/mock_cdsclient/interface_mock.go

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

0 commit comments

Comments
 (0)