forked from Colstuwjx/awx-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
job_template.go
122 lines (103 loc) · 3.16 KB
/
job_template.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package awx
import (
"bytes"
"encoding/json"
"errors"
"fmt"
)
// JobTemplateService implements awx job template apis.
type JobTemplateService struct {
client *Client
}
// ListJobTemplatesResponse represents `ListJobTemplates` endpoint response.
type ListJobTemplatesResponse struct {
Pagination
Results []*JobTemplate `json:"results"`
}
// ListJobTemplates shows a list of job templates.
func (jt *JobTemplateService) ListJobTemplates(params map[string]string) ([]*JobTemplate, *ListJobTemplatesResponse, error) {
result := new(ListJobTemplatesResponse)
endpoint := "/api/v2/job_templates/"
resp, err := jt.client.Requester.GetJSON(endpoint, result, params)
if err != nil {
return nil, result, err
}
if err := CheckResponse(resp); err != nil {
return nil, result, err
}
return result.Results, result, nil
}
// Launch lauchs a job with the job template.
func (jt *JobTemplateService) Launch(id int, data map[string]interface{}, params map[string]string) (*JobLaunch, error) {
result := new(JobLaunch)
endpoint := fmt.Sprintf("/api/v2/job_templates/%d/launch/", id)
payload, err := json.Marshal(data)
if err != nil {
return nil, err
}
resp, err := jt.client.Requester.PostJSON(endpoint, bytes.NewReader(payload), result, params)
if err != nil {
return nil, err
}
if err := CheckResponse(resp); err != nil {
return nil, err
}
// in case invalid job id return
if result.Job == 0 {
return nil, errors.New("invalid job id 0")
}
return result, nil
}
// CreateJobTemplate creates a job template
func (jt *JobTemplateService) CreateJobTemplate(data map[string]interface{}, params map[string]string) (*JobTemplate, error) {
result := new(JobTemplate)
mandatoryFields = []string{"name", "job_type", "inventory", "project"}
validate, status := ValidateParams(data, mandatoryFields)
if !status {
err := fmt.Errorf("Mandatory input arguments are absent: %s", validate)
return nil, err
}
endpoint := "/api/v2/job_templates/"
payload, err := json.Marshal(data)
if err != nil {
return nil, err
}
resp, err := jt.client.Requester.PostJSON(endpoint, bytes.NewReader(payload), result, params)
if err != nil {
return nil, err
}
if err := CheckResponse(resp); err != nil {
return nil, err
}
return result, nil
}
// UpdateJobTemplate updates a job template
func (jt *JobTemplateService) UpdateJobTemplate(id int, data map[string]interface{}, params map[string]string) (*JobTemplate, error) {
result := new(JobTemplate)
endpoint := fmt.Sprintf("/api/v2/job_templates/%d", id)
payload, err := json.Marshal(data)
if err != nil {
return nil, err
}
resp, err := jt.client.Requester.PatchJSON(endpoint, bytes.NewReader(payload), result, params)
if err != nil {
return nil, err
}
if err := CheckResponse(resp); err != nil {
return nil, err
}
return result, nil
}
// DeleteJobTemplate deletes a job template
func (jt *JobTemplateService) DeleteJobTemplate(id int) (*JobTemplate, error) {
result := new(JobTemplate)
endpoint := fmt.Sprintf("/api/v2/job_templates/%d", id)
resp, err := jt.client.Requester.Delete(endpoint, result, nil)
if err != nil {
return nil, err
}
if err := CheckResponse(resp); err != nil {
return nil, err
}
return result, nil
}