Skip to content

Commit 1d96f07

Browse files
authored
feat(serverless_jobs): enable sdk for secrets (scaleway#2239)
1 parent 951a53e commit 1d96f07

File tree

1 file changed

+302
-0
lines changed

1 file changed

+302
-0
lines changed

api/jobs/v1alpha1/jobs_sdk.go

Lines changed: 302 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,16 @@ func (enum *ListJobRunsRequestOrderBy) UnmarshalJSON(data []byte) error {
162162
return nil
163163
}
164164

165+
// SecretEnvVar: secret env var.
166+
type SecretEnvVar struct {
167+
Name string `json:"name"`
168+
}
169+
170+
// SecretFile: secret file.
171+
type SecretFile struct {
172+
Path string `json:"path"`
173+
}
174+
165175
// CronSchedule: cron schedule.
166176
type CronSchedule struct {
167177
// Schedule: uNIX cron schedule to run job (e.g., '* * * * *').
@@ -178,6 +188,34 @@ type CreateJobDefinitionRequestCronScheduleConfig struct {
178188
Timezone string `json:"timezone"`
179189
}
180190

191+
// CreateJobDefinitionSecretsRequestSecretConfig: create job definition secrets request secret config.
192+
type CreateJobDefinitionSecretsRequestSecretConfig struct {
193+
SecretManagerID string `json:"secret_manager_id"`
194+
195+
SecretManagerVersion string `json:"secret_manager_version"`
196+
197+
// Precisely one of Path, EnvVarName must be set.
198+
Path *string `json:"path,omitempty"`
199+
200+
// Precisely one of Path, EnvVarName must be set.
201+
EnvVarName *string `json:"env_var_name,omitempty"`
202+
}
203+
204+
// Secret: secret.
205+
type Secret struct {
206+
SecretID string `json:"secret_id"`
207+
208+
SecretManagerID string `json:"secret_manager_id"`
209+
210+
SecretManagerVersion string `json:"secret_manager_version"`
211+
212+
// Precisely one of File, EnvVar must be set.
213+
File *SecretFile `json:"file,omitempty"`
214+
215+
// Precisely one of File, EnvVar must be set.
216+
EnvVar *SecretEnvVar `json:"env_var,omitempty"`
217+
}
218+
181219
// JobDefinition: job definition.
182220
type JobDefinition struct {
183221
ID string `json:"id"`
@@ -302,6 +340,23 @@ type CreateJobDefinitionRequest struct {
302340
CronSchedule *CreateJobDefinitionRequestCronScheduleConfig `json:"cron_schedule,omitempty"`
303341
}
304342

343+
// CreateJobDefinitionSecretsRequest: create job definition secrets request.
344+
type CreateJobDefinitionSecretsRequest struct {
345+
// Region: region to target. If none is passed will use default region from the config.
346+
Region scw.Region `json:"-"`
347+
348+
// JobDefinitionID: UUID of the job definition to get.
349+
JobDefinitionID string `json:"-"`
350+
351+
// Secrets: secrets to inject into the job.
352+
Secrets []*CreateJobDefinitionSecretsRequestSecretConfig `json:"secrets"`
353+
}
354+
355+
// CreateJobDefinitionSecretsResponse: create job definition secrets response.
356+
type CreateJobDefinitionSecretsResponse struct {
357+
Secrets []*Secret `json:"secrets"`
358+
}
359+
305360
// DeleteJobDefinitionRequest: delete job definition request.
306361
type DeleteJobDefinitionRequest struct {
307362
// Region: region to target. If none is passed will use default region from the config.
@@ -311,6 +366,16 @@ type DeleteJobDefinitionRequest struct {
311366
JobDefinitionID string `json:"-"`
312367
}
313368

369+
// DeleteJobDefinitionSecretRequest: delete job definition secret request.
370+
type DeleteJobDefinitionSecretRequest struct {
371+
// Region: region to target. If none is passed will use default region from the config.
372+
Region scw.Region `json:"-"`
373+
374+
JobDefinitionID string `json:"-"`
375+
376+
SecretID string `json:"-"`
377+
}
378+
314379
// GetJobDefinitionRequest: get job definition request.
315380
type GetJobDefinitionRequest struct {
316381
// Region: region to target. If none is passed will use default region from the config.
@@ -320,6 +385,16 @@ type GetJobDefinitionRequest struct {
320385
JobDefinitionID string `json:"-"`
321386
}
322387

388+
// GetJobDefinitionSecretRequest: get job definition secret request.
389+
type GetJobDefinitionSecretRequest struct {
390+
// Region: region to target. If none is passed will use default region from the config.
391+
Region scw.Region `json:"-"`
392+
393+
JobDefinitionID string `json:"-"`
394+
395+
SecretID string `json:"-"`
396+
}
397+
323398
// GetJobRunRequest: get job run request.
324399
type GetJobRunRequest struct {
325400
// Region: region to target. If none is passed will use default region from the config.
@@ -329,6 +404,40 @@ type GetJobRunRequest struct {
329404
JobRunID string `json:"-"`
330405
}
331406

407+
// ListJobDefinitionSecretsRequest: list job definition secrets request.
408+
type ListJobDefinitionSecretsRequest struct {
409+
// Region: region to target. If none is passed will use default region from the config.
410+
Region scw.Region `json:"-"`
411+
412+
JobDefinitionID string `json:"-"`
413+
}
414+
415+
// ListJobDefinitionSecretsResponse: list job definition secrets response.
416+
type ListJobDefinitionSecretsResponse struct {
417+
Secrets []*Secret `json:"secrets"`
418+
419+
TotalCount uint64 `json:"total_count"`
420+
}
421+
422+
// UnsafeGetTotalCount should not be used
423+
// Internal usage only
424+
func (r *ListJobDefinitionSecretsResponse) UnsafeGetTotalCount() uint64 {
425+
return r.TotalCount
426+
}
427+
428+
// UnsafeAppend should not be used
429+
// Internal usage only
430+
func (r *ListJobDefinitionSecretsResponse) UnsafeAppend(res interface{}) (uint64, error) {
431+
results, ok := res.(*ListJobDefinitionSecretsResponse)
432+
if !ok {
433+
return 0, errors.New("%T type cannot be appended to type %T", res, r)
434+
}
435+
436+
r.Secrets = append(r.Secrets, results.Secrets...)
437+
r.TotalCount += uint64(len(results.Secrets))
438+
return uint64(len(results.Secrets)), nil
439+
}
440+
332441
// ListJobDefinitionsRequest: list job definitions request.
333442
type ListJobDefinitionsRequest struct {
334443
// Region: region to target. If none is passed will use default region from the config.
@@ -498,6 +607,24 @@ type UpdateJobDefinitionRequest struct {
498607
CronSchedule *UpdateJobDefinitionRequestCronScheduleConfig `json:"cron_schedule,omitempty"`
499608
}
500609

610+
// UpdateJobDefinitionSecretRequest: update job definition secret request.
611+
type UpdateJobDefinitionSecretRequest struct {
612+
// Region: region to target. If none is passed will use default region from the config.
613+
Region scw.Region `json:"-"`
614+
615+
JobDefinitionID string `json:"-"`
616+
617+
SecretID string `json:"-"`
618+
619+
SecretManagerVersion *string `json:"secret_manager_version,omitempty"`
620+
621+
// Precisely one of Path, EnvVarName must be set.
622+
Path *string `json:"path,omitempty"`
623+
624+
// Precisely one of Path, EnvVarName must be set.
625+
EnvVarName *string `json:"env_var_name,omitempty"`
626+
}
627+
501628
// This API allows you to manage your Serverless Jobs.
502629
type API struct {
503630
client *scw.Client
@@ -726,6 +853,181 @@ func (s *API) StartJobDefinition(req *StartJobDefinitionRequest, opts ...scw.Req
726853
return &resp, nil
727854
}
728855

856+
// CreateJobDefinitionSecrets:
857+
func (s *API) CreateJobDefinitionSecrets(req *CreateJobDefinitionSecretsRequest, opts ...scw.RequestOption) (*CreateJobDefinitionSecretsResponse, error) {
858+
var err error
859+
860+
if req.Region == "" {
861+
defaultRegion, _ := s.client.GetDefaultRegion()
862+
req.Region = defaultRegion
863+
}
864+
865+
if fmt.Sprint(req.Region) == "" {
866+
return nil, errors.New("field Region cannot be empty in request")
867+
}
868+
869+
if fmt.Sprint(req.JobDefinitionID) == "" {
870+
return nil, errors.New("field JobDefinitionID cannot be empty in request")
871+
}
872+
873+
scwReq := &scw.ScalewayRequest{
874+
Method: "POST",
875+
Path: "/serverless-jobs/v1alpha1/regions/" + fmt.Sprint(req.Region) + "/job-definitions/" + fmt.Sprint(req.JobDefinitionID) + "/secrets",
876+
}
877+
878+
err = scwReq.SetBody(req)
879+
if err != nil {
880+
return nil, err
881+
}
882+
883+
var resp CreateJobDefinitionSecretsResponse
884+
885+
err = s.client.Do(scwReq, &resp, opts...)
886+
if err != nil {
887+
return nil, err
888+
}
889+
return &resp, nil
890+
}
891+
892+
// GetJobDefinitionSecret:
893+
func (s *API) GetJobDefinitionSecret(req *GetJobDefinitionSecretRequest, opts ...scw.RequestOption) (*Secret, error) {
894+
var err error
895+
896+
if req.Region == "" {
897+
defaultRegion, _ := s.client.GetDefaultRegion()
898+
req.Region = defaultRegion
899+
}
900+
901+
if fmt.Sprint(req.Region) == "" {
902+
return nil, errors.New("field Region cannot be empty in request")
903+
}
904+
905+
if fmt.Sprint(req.JobDefinitionID) == "" {
906+
return nil, errors.New("field JobDefinitionID cannot be empty in request")
907+
}
908+
909+
if fmt.Sprint(req.SecretID) == "" {
910+
return nil, errors.New("field SecretID cannot be empty in request")
911+
}
912+
913+
scwReq := &scw.ScalewayRequest{
914+
Method: "GET",
915+
Path: "/serverless-jobs/v1alpha1/regions/" + fmt.Sprint(req.Region) + "/job-definitions/" + fmt.Sprint(req.JobDefinitionID) + "/secrets/" + fmt.Sprint(req.SecretID) + "",
916+
}
917+
918+
var resp Secret
919+
920+
err = s.client.Do(scwReq, &resp, opts...)
921+
if err != nil {
922+
return nil, err
923+
}
924+
return &resp, nil
925+
}
926+
927+
// ListJobDefinitionSecrets:
928+
func (s *API) ListJobDefinitionSecrets(req *ListJobDefinitionSecretsRequest, opts ...scw.RequestOption) (*ListJobDefinitionSecretsResponse, error) {
929+
var err error
930+
931+
if req.Region == "" {
932+
defaultRegion, _ := s.client.GetDefaultRegion()
933+
req.Region = defaultRegion
934+
}
935+
936+
if fmt.Sprint(req.Region) == "" {
937+
return nil, errors.New("field Region cannot be empty in request")
938+
}
939+
940+
if fmt.Sprint(req.JobDefinitionID) == "" {
941+
return nil, errors.New("field JobDefinitionID cannot be empty in request")
942+
}
943+
944+
scwReq := &scw.ScalewayRequest{
945+
Method: "GET",
946+
Path: "/serverless-jobs/v1alpha1/regions/" + fmt.Sprint(req.Region) + "/job-definitions/" + fmt.Sprint(req.JobDefinitionID) + "/secrets",
947+
}
948+
949+
var resp ListJobDefinitionSecretsResponse
950+
951+
err = s.client.Do(scwReq, &resp, opts...)
952+
if err != nil {
953+
return nil, err
954+
}
955+
return &resp, nil
956+
}
957+
958+
// UpdateJobDefinitionSecret:
959+
func (s *API) UpdateJobDefinitionSecret(req *UpdateJobDefinitionSecretRequest, opts ...scw.RequestOption) (*Secret, error) {
960+
var err error
961+
962+
if req.Region == "" {
963+
defaultRegion, _ := s.client.GetDefaultRegion()
964+
req.Region = defaultRegion
965+
}
966+
967+
if fmt.Sprint(req.Region) == "" {
968+
return nil, errors.New("field Region cannot be empty in request")
969+
}
970+
971+
if fmt.Sprint(req.JobDefinitionID) == "" {
972+
return nil, errors.New("field JobDefinitionID cannot be empty in request")
973+
}
974+
975+
if fmt.Sprint(req.SecretID) == "" {
976+
return nil, errors.New("field SecretID cannot be empty in request")
977+
}
978+
979+
scwReq := &scw.ScalewayRequest{
980+
Method: "PATCH",
981+
Path: "/serverless-jobs/v1alpha1/regions/" + fmt.Sprint(req.Region) + "/job-definitions/" + fmt.Sprint(req.JobDefinitionID) + "/secrets/" + fmt.Sprint(req.SecretID) + "",
982+
}
983+
984+
err = scwReq.SetBody(req)
985+
if err != nil {
986+
return nil, err
987+
}
988+
989+
var resp Secret
990+
991+
err = s.client.Do(scwReq, &resp, opts...)
992+
if err != nil {
993+
return nil, err
994+
}
995+
return &resp, nil
996+
}
997+
998+
// DeleteJobDefinitionSecret:
999+
func (s *API) DeleteJobDefinitionSecret(req *DeleteJobDefinitionSecretRequest, opts ...scw.RequestOption) error {
1000+
var err error
1001+
1002+
if req.Region == "" {
1003+
defaultRegion, _ := s.client.GetDefaultRegion()
1004+
req.Region = defaultRegion
1005+
}
1006+
1007+
if fmt.Sprint(req.Region) == "" {
1008+
return errors.New("field Region cannot be empty in request")
1009+
}
1010+
1011+
if fmt.Sprint(req.JobDefinitionID) == "" {
1012+
return errors.New("field JobDefinitionID cannot be empty in request")
1013+
}
1014+
1015+
if fmt.Sprint(req.SecretID) == "" {
1016+
return errors.New("field SecretID cannot be empty in request")
1017+
}
1018+
1019+
scwReq := &scw.ScalewayRequest{
1020+
Method: "DELETE",
1021+
Path: "/serverless-jobs/v1alpha1/regions/" + fmt.Sprint(req.Region) + "/job-definitions/" + fmt.Sprint(req.JobDefinitionID) + "/secrets/" + fmt.Sprint(req.SecretID) + "",
1022+
}
1023+
1024+
err = s.client.Do(scwReq, nil, opts...)
1025+
if err != nil {
1026+
return err
1027+
}
1028+
return nil
1029+
}
1030+
7291031
// GetJobRun: Get a job run by its unique identifier.
7301032
func (s *API) GetJobRun(req *GetJobRunRequest, opts ...scw.RequestOption) (*JobRun, error) {
7311033
var err error

0 commit comments

Comments
 (0)