forked from hashicorp/go-tfe
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathworkspace_run_task.go
217 lines (177 loc) · 6.33 KB
/
workspace_run_task.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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package tfe
import (
"context"
"fmt"
"net/url"
)
// Compile-time proof of interface implementation
var _ WorkspaceRunTasks = (*workspaceRunTasks)(nil)
// WorkspaceRunTasks represent all the run task related methods in the context of a workspace that the HCP Terraform and Terraform Enterprise API supports.
type WorkspaceRunTasks interface {
// Add a run task to a workspace
Create(ctx context.Context, workspaceID string, options WorkspaceRunTaskCreateOptions) (*WorkspaceRunTask, error)
// List all run tasks for a workspace
List(ctx context.Context, workspaceID string, options *WorkspaceRunTaskListOptions) (*WorkspaceRunTaskList, error)
// Read a workspace run task by ID
Read(ctx context.Context, workspaceID string, workspaceTaskID string) (*WorkspaceRunTask, error)
// Update a workspace run task by ID
Update(ctx context.Context, workspaceID string, workspaceTaskID string, options WorkspaceRunTaskUpdateOptions) (*WorkspaceRunTask, error)
// Delete a workspace's run task by ID
Delete(ctx context.Context, workspaceID string, workspaceTaskID string) error
}
// workspaceRunTasks implements WorkspaceRunTasks
type workspaceRunTasks struct {
client *Client
}
// WorkspaceRunTask represents a HCP Terraform or Terraform Enterprise run task that belongs to a workspace
type WorkspaceRunTask struct {
ID string `jsonapi:"primary,workspace-tasks"`
EnforcementLevel TaskEnforcementLevel `jsonapi:"attr,enforcement-level"`
// Deprecated: Use Stages property instead.
Stage Stage `jsonapi:"attr,stage"`
Stages []Stage `jsonapi:"attr,stages"`
RunTask *RunTask `jsonapi:"relation,task"`
Workspace *Workspace `jsonapi:"relation,workspace"`
}
// WorkspaceRunTaskList represents a list of workspace run tasks
type WorkspaceRunTaskList struct {
*Pagination
Items []*WorkspaceRunTask
}
// WorkspaceRunTaskListOptions represents the set of options for listing workspace run tasks
type WorkspaceRunTaskListOptions struct {
ListOptions
}
// WorkspaceRunTaskCreateOptions represents the set of options for creating a workspace run task
type WorkspaceRunTaskCreateOptions struct {
Type string `jsonapi:"primary,workspace-tasks"`
// Required: The enforcement level for a run task
EnforcementLevel TaskEnforcementLevel `jsonapi:"attr,enforcement-level"`
// Required: The run task to attach to the workspace
RunTask *RunTask `jsonapi:"relation,task"`
// Deprecated: Use Stages property instead.
Stage *Stage `jsonapi:"attr,stage,omitempty"`
// Optional: The stage to run the task in
Stages *[]Stage `jsonapi:"attr,stages,omitempty"`
}
// WorkspaceRunTaskUpdateOptions represent the set of options for updating a workspace run task.
type WorkspaceRunTaskUpdateOptions struct {
Type string `jsonapi:"primary,workspace-tasks"`
EnforcementLevel TaskEnforcementLevel `jsonapi:"attr,enforcement-level,omitempty"`
// Deprecated: Use Stages property instead.
Stage *Stage `jsonapi:"attr,stage,omitempty"`
// Optional: The stage to run the task in
Stages *[]Stage `jsonapi:"attr,stages,omitempty"`
}
// List all run tasks attached to a workspace
func (s *workspaceRunTasks) List(ctx context.Context, workspaceID string, options *WorkspaceRunTaskListOptions) (*WorkspaceRunTaskList, error) {
if !validStringID(&workspaceID) {
return nil, ErrInvalidWorkspaceID
}
u := fmt.Sprintf("workspaces/%s/tasks", url.PathEscape(workspaceID))
req, err := s.client.NewRequest("GET", u, options)
if err != nil {
return nil, err
}
rl := &internalWorkspaceRunTaskList{}
err = req.Do(ctx, rl)
if err != nil {
return nil, err
}
return rl.ToWorkspaceRunTaskList(), nil
}
// Read a workspace run task by ID
func (s *workspaceRunTasks) Read(ctx context.Context, workspaceID, workspaceTaskID string) (*WorkspaceRunTask, error) {
if !validStringID(&workspaceID) {
return nil, ErrInvalidWorkspaceID
}
if !validStringID(&workspaceTaskID) {
return nil, ErrInvalidWorkspaceRunTaskID
}
u := fmt.Sprintf(
"workspaces/%s/tasks/%s",
url.PathEscape(workspaceID),
url.PathEscape(workspaceTaskID),
)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, err
}
wr := &internalWorkspaceRunTask{}
err = req.Do(ctx, wr)
if err != nil {
return nil, err
}
return wr.ToWorkspaceRunTask(), nil
}
// Create is used to attach a run task to a workspace, or in other words: create a workspace run task. The run task must exist in the workspace's organization.
func (s *workspaceRunTasks) Create(ctx context.Context, workspaceID string, options WorkspaceRunTaskCreateOptions) (*WorkspaceRunTask, error) {
if !validStringID(&workspaceID) {
return nil, ErrInvalidWorkspaceID
}
if err := options.valid(); err != nil {
return nil, err
}
u := fmt.Sprintf("workspaces/%s/tasks", workspaceID)
req, err := s.client.NewRequest("POST", u, &options)
if err != nil {
return nil, err
}
wr := &internalWorkspaceRunTask{}
err = req.Do(ctx, wr)
if err != nil {
return nil, err
}
return wr.ToWorkspaceRunTask(), nil
}
// Update an existing workspace run task by ID
func (s *workspaceRunTasks) Update(ctx context.Context, workspaceID, workspaceTaskID string, options WorkspaceRunTaskUpdateOptions) (*WorkspaceRunTask, error) {
if !validStringID(&workspaceID) {
return nil, ErrInvalidWorkspaceID
}
if !validStringID(&workspaceTaskID) {
return nil, ErrInvalidWorkspaceRunTaskID
}
u := fmt.Sprintf(
"workspaces/%s/tasks/%s",
url.PathEscape(workspaceID),
url.PathEscape(workspaceTaskID),
)
req, err := s.client.NewRequest("PATCH", u, &options)
if err != nil {
return nil, err
}
wr := &internalWorkspaceRunTask{}
err = req.Do(ctx, wr)
if err != nil {
return nil, err
}
return wr.ToWorkspaceRunTask(), nil
}
// Delete a workspace run task by ID
func (s *workspaceRunTasks) Delete(ctx context.Context, workspaceID, workspaceTaskID string) error {
if !validStringID(&workspaceID) {
return ErrInvalidWorkspaceID
}
if !validStringID(&workspaceTaskID) {
return ErrInvalidWorkspaceRunTaskType
}
u := fmt.Sprintf(
"workspaces/%s/tasks/%s",
url.PathEscape(workspaceID),
url.PathEscape(workspaceTaskID),
)
req, err := s.client.NewRequest("DELETE", u, nil)
if err != nil {
return err
}
return req.Do(ctx, nil)
}
func (o *WorkspaceRunTaskCreateOptions) valid() error {
if o.RunTask.ID == "" {
return ErrInvalidRunTaskID
}
return nil
}