Skip to content

Commit 25dda4d

Browse files
authored
feat(hatchery): allow to set specific api url for workers (#5773)
Signed-off-by: richardlt <[email protected]>
1 parent aaeea69 commit 25dda4d

File tree

8 files changed

+50
-84
lines changed

8 files changed

+50
-84
lines changed

engine/hatchery/kubernetes/kubernetes.go

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -191,19 +191,8 @@ func (h *HatcheryKubernetes) SpawnWorker(ctx context.Context, spawnArgs hatchery
191191
}
192192
}
193193

194-
udataParam := sdk.WorkerArgs{
195-
API: h.Configuration().API.HTTP.URL,
196-
Token: spawnArgs.WorkerToken,
197-
HTTPInsecure: h.Config.API.HTTP.Insecure,
198-
Name: spawnArgs.WorkerName,
199-
Model: spawnArgs.Model.Group.Name + "/" + spawnArgs.Model.Name,
200-
HatcheryName: h.Name(),
201-
TTL: h.Config.WorkerTTL,
202-
GraylogHost: h.Configuration().Provision.WorkerLogsOptions.Graylog.Host,
203-
GraylogPort: h.Configuration().Provision.WorkerLogsOptions.Graylog.Port,
204-
GraylogExtraKey: h.Configuration().Provision.WorkerLogsOptions.Graylog.ExtraKey,
205-
GraylogExtraValue: h.Configuration().Provision.WorkerLogsOptions.Graylog.ExtraValue,
206-
}
194+
udataParam := h.GenerateWorkerArgs(h, spawnArgs)
195+
udataParam.TTL = h.Config.WorkerTTL
207196

208197
udataParam.WorkflowJobID = spawnArgs.JobID
209198

engine/hatchery/local/worker_spawn.go

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -71,21 +71,10 @@ func (h *HatcheryLocal) SpawnWorker(ctx context.Context, spawnArgs hatchery.Spaw
7171

7272
log.Info(ctx, "HatcheryLocal.SpawnWorker> basedir: %s", basedir)
7373

74-
udataParam := sdk.WorkerArgs{
75-
API: h.Configuration().API.HTTP.URL,
76-
Token: spawnArgs.WorkerToken,
77-
BaseDir: basedir,
78-
HTTPInsecure: h.Config.API.HTTP.Insecure,
79-
Name: spawnArgs.WorkerName,
80-
Model: spawnArgs.ModelName(),
81-
HatcheryName: h.Name(),
82-
GraylogHost: h.Configuration().Provision.WorkerLogsOptions.Graylog.Host,
83-
GraylogPort: h.Configuration().Provision.WorkerLogsOptions.Graylog.Port,
84-
GraylogExtraKey: h.Configuration().Provision.WorkerLogsOptions.Graylog.ExtraKey,
85-
GraylogExtraValue: h.Configuration().Provision.WorkerLogsOptions.Graylog.ExtraValue,
86-
WorkerBinary: path.Join(h.BasedirDedicated, h.getWorkerBinaryName()),
87-
WorkflowJobID: spawnArgs.JobID,
88-
}
74+
udataParam := h.GenerateWorkerArgs(h, spawnArgs)
75+
udataParam.BaseDir = basedir
76+
udataParam.WorkerBinary = path.Join(h.BasedirDedicated, h.getWorkerBinaryName())
77+
udataParam.WorkflowJobID = spawnArgs.JobID
8978

9079
tmpl, errt := template.New("cmd").Parse(workerCmdTmpl)
9180
if errt != nil {

engine/hatchery/marathon/marathon.go

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -237,20 +237,9 @@ func (h *HatcheryMarathon) SpawnWorker(ctx context.Context, spawnArgs hatchery.S
237237
instance := 1
238238
forcePull := strings.HasSuffix(spawnArgs.Model.ModelDocker.Image, ":latest")
239239

240-
udataParam := sdk.WorkerArgs{
241-
API: h.Configuration().API.HTTP.URL,
242-
Token: spawnArgs.WorkerToken,
243-
HTTPInsecure: h.Config.API.HTTP.Insecure,
244-
Name: spawnArgs.WorkerName,
245-
TTL: h.Config.WorkerTTL,
246-
Model: spawnArgs.Model.Path(),
247-
HatcheryName: h.Name(),
248-
GraylogHost: h.Configuration().Provision.WorkerLogsOptions.Graylog.Host,
249-
GraylogPort: h.Configuration().Provision.WorkerLogsOptions.Graylog.Port,
250-
GraylogExtraKey: h.Configuration().Provision.WorkerLogsOptions.Graylog.ExtraKey,
251-
GraylogExtraValue: h.Configuration().Provision.WorkerLogsOptions.Graylog.ExtraValue,
252-
WorkflowJobID: spawnArgs.JobID,
253-
}
240+
udataParam := h.GenerateWorkerArgs(h, spawnArgs)
241+
udataParam.TTL = h.Config.WorkerTTL
242+
udataParam.WorkflowJobID = spawnArgs.JobID
254243

255244
tmpl, errt := template.New("cmd").Parse(spawnArgs.Model.ModelDocker.Cmd)
256245
if errt != nil {

engine/hatchery/openstack/spawn.go

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -76,20 +76,10 @@ func (h *HatcheryOpenstack) SpawnWorker(ctx context.Context, spawnArgs hatchery.
7676
if err != nil {
7777
return err
7878
}
79-
udataParam := sdk.WorkerArgs{
80-
API: h.Configuration().API.HTTP.URL,
81-
Name: spawnArgs.WorkerName,
82-
Token: spawnArgs.WorkerToken,
83-
Model: spawnArgs.Model.Group.Name + "/" + spawnArgs.Model.Name,
84-
HatcheryName: h.Name(),
85-
TTL: h.Config.WorkerTTL,
86-
FromWorkerImage: withExistingImage,
87-
GraylogHost: h.Configuration().Provision.WorkerLogsOptions.Graylog.Host,
88-
GraylogPort: h.Configuration().Provision.WorkerLogsOptions.Graylog.Port,
89-
GraylogExtraKey: h.Configuration().Provision.WorkerLogsOptions.Graylog.ExtraKey,
90-
GraylogExtraValue: h.Configuration().Provision.WorkerLogsOptions.Graylog.ExtraValue,
91-
}
9279

80+
udataParam := h.GenerateWorkerArgs(h, spawnArgs)
81+
udataParam.TTL = h.Config.WorkerTTL
82+
udataParam.FromWorkerImage = withExistingImage
9383
udataParam.WorkflowJobID = spawnArgs.JobID
9484

9585
var buffer bytes.Buffer

engine/hatchery/serve.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,3 +231,25 @@ func getStatusHandler(h hatchery.Interface) service.HandlerFunc {
231231
}
232232
}
233233
}
234+
235+
func (c *Common) GenerateWorkerArgs(h hatchery.Interface, spawnArgs hatchery.SpawnArguments) sdk.WorkerArgs {
236+
apiURL := h.Configuration().Provision.WorkerAPIHTTP.URL
237+
httpInsecure := h.Configuration().Provision.WorkerAPIHTTP.Insecure
238+
if apiURL == "" {
239+
apiURL = h.Configuration().API.HTTP.URL
240+
httpInsecure = h.Configuration().API.HTTP.Insecure
241+
}
242+
243+
return sdk.WorkerArgs{
244+
API: apiURL,
245+
HTTPInsecure: httpInsecure,
246+
Token: spawnArgs.WorkerToken,
247+
Name: spawnArgs.WorkerName,
248+
Model: spawnArgs.ModelName(),
249+
HatcheryName: h.Name(),
250+
GraylogHost: h.Configuration().Provision.WorkerLogsOptions.Graylog.Host,
251+
GraylogPort: h.Configuration().Provision.WorkerLogsOptions.Graylog.Port,
252+
GraylogExtraKey: h.Configuration().Provision.WorkerLogsOptions.Graylog.ExtraKey,
253+
GraylogExtraValue: h.Configuration().Provision.WorkerLogsOptions.Graylog.ExtraValue,
254+
}
255+
}

engine/hatchery/swarm/swarm.go

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -379,20 +379,8 @@ func (h *HatcherySwarm) SpawnWorker(ctx context.Context, spawnArgs hatchery.Spaw
379379
return errDockerOpts
380380
}
381381

382-
udataParam := sdk.WorkerArgs{
383-
API: h.Config.API.HTTP.URL,
384-
Token: spawnArgs.WorkerToken,
385-
HTTPInsecure: h.Config.API.HTTP.Insecure,
386-
Name: spawnArgs.WorkerName,
387-
Model: spawnArgs.Model.Group.Name + "/" + spawnArgs.Model.Name,
388-
TTL: h.Config.WorkerTTL,
389-
HatcheryName: h.Name(),
390-
GraylogHost: h.Config.Provision.WorkerLogsOptions.Graylog.Host,
391-
GraylogPort: h.Config.Provision.WorkerLogsOptions.Graylog.Port,
392-
GraylogExtraKey: h.Config.Provision.WorkerLogsOptions.Graylog.ExtraKey,
393-
GraylogExtraValue: h.Config.Provision.WorkerLogsOptions.Graylog.ExtraValue,
394-
}
395-
382+
udataParam := h.GenerateWorkerArgs(h, spawnArgs)
383+
udataParam.TTL = h.Config.WorkerTTL
396384
udataParam.WorkflowJobID = spawnArgs.JobID
397385

398386
tmpl, errt := template.New("cmd").Parse(spawnArgs.Model.ModelDocker.Cmd)

engine/hatchery/vsphere/spawn.go

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -322,20 +322,15 @@ func (h *HatcheryVSphere) launchScriptWorker(ctx context.Context, name string, j
322322
if errt != nil {
323323
return errt
324324
}
325-
udataParam := sdk.WorkerArgs{
326-
API: h.Config.API.HTTP.URL,
327-
Name: name,
328-
Token: token,
329-
Model: model.Group.Name + "/" + model.Name,
330-
HatcheryName: h.Name(),
331-
TTL: h.Config.WorkerTTL,
332-
FromWorkerImage: true,
333-
GraylogHost: h.Config.Provision.WorkerLogsOptions.Graylog.Host,
334-
GraylogPort: h.Config.Provision.WorkerLogsOptions.Graylog.Port,
335-
GraylogExtraKey: h.Config.Provision.WorkerLogsOptions.Graylog.ExtraKey,
336-
GraylogExtraValue: h.Config.Provision.WorkerLogsOptions.Graylog.ExtraValue,
337-
WorkflowJobID: jobID,
338-
}
325+
326+
udataParam := h.GenerateWorkerArgs(h, hatchery.SpawnArguments{
327+
WorkerToken: token,
328+
WorkerName: name,
329+
Model: &model,
330+
})
331+
udataParam.TTL = h.Config.WorkerTTL
332+
udataParam.FromWorkerImage = true
333+
udataParam.WorkflowJobID = jobID
339334

340335
var buffer bytes.Buffer
341336
if err := tmpl.Execute(&buffer, udataParam); err != nil {

engine/service/types.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,11 @@ type HatcheryCommonConfiguration struct {
5050
RegisterFrequency int `toml:"registerFrequency" default:"60" comment:"Check if some worker model have to be registered each n Seconds" json:"registerFrequency"`
5151
Region string `toml:"region" default:"" comment:"region of this hatchery - optional. With a free text as 'myregion', user can set a prerequisite 'region' with value 'myregion' on CDS Job" json:"region"`
5252
IgnoreJobWithNoRegion bool `toml:"ignoreJobWithNoRegion" default:"false" comment:"Ignore job without a region prerequisite if ignoreJobWithNoRegion=true"`
53-
WorkerLogsOptions struct {
53+
WorkerAPIHTTP struct {
54+
URL string `toml:"url" default:"http://localhost:8081" commented:"true" comment:"CDS API URL for worker, let empty or commented to use the same URL that is used by the Hatchery" json:"url"`
55+
Insecure bool `toml:"insecure" default:"false" commented:"true" comment:"sslInsecureSkipVerify, set to true if you use a self-signed SSL on CDS API" json:"insecure"`
56+
} `toml:"http" json:"http"`
57+
WorkerLogsOptions struct {
5458
Graylog struct {
5559
Host string `toml:"host" comment:"Example: thot.ovh.com" json:"host"`
5660
Port int `toml:"port" comment:"Example: 12202" json:"port"`

0 commit comments

Comments
 (0)