Skip to content

Commit 2c1cb2b

Browse files
committed
adding new data source
1 parent efab77c commit 2c1cb2b

File tree

109 files changed

+2367
-1242
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+2367
-1242
lines changed

.circleci/config.yml

+5-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ jobs:
1515
steps:
1616
- checkout
1717

18+
- setup_remote_docker:
19+
version: 20.10.14
20+
docker_layer_caching: true
21+
1822
- run:
1923
name: Make test results directory
2024
command: mkdir -p $TEST_RESULTS_DIR
@@ -36,4 +40,4 @@ workflows:
3640
my-workflow:
3741
jobs:
3842
- run-tests:
39-
context: core-team-access
43+
context: core-team-access

.github/CODEOWNERS

-3
This file was deleted.

CHANGELOG.md

+26-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,33 @@
1-
# v1.4.0 (Unreleased)
1+
# Unreleased
2+
3+
# v1.6.0
4+
## Enhancements
5+
* Add `Name` field to `OAuthClient` by @barrettclark [#466](https://github.com/hashicorp/go-tfe/pull/466)
6+
* Add support for creating both public and private `RegistryModule` with no VCS connection by @Uk1288 [#460](https://github.com/hashicorp/go-tfe/pull/460)
7+
* Add `ConfigurationSourceAdo` configuration source option by @mjyocca [#467](https://github.com/hashicorp/go-tfe/pull/467)
8+
9+
# v1.5.0
10+
11+
## Enhancements
12+
* [beta] Add support for triggering Workspace runs through matching Git tags [#434](https://github.com/hashicorp/go-tfe/pull/434)
13+
* Add `Query` param field to `AgentPoolListOptions` to allow searching based on agent pool name, by @JarrettSpiker [#417](https://github.com/hashicorp/go-tfe/pull/417)
14+
* Add organization scope and allowed workspaces field for scope agents by @Netra2104 [#453](https://github.com/hashicorp/go-tfe/pull/453)
15+
* Adds `Namespace` and `RegistryName` fields to `RegistryModuleID` to allow reading of Public Registry Modules by @Uk1288 [#464](https://github.com/hashicorp/go-tfe/pull/464)
16+
17+
## Bug fixes
18+
* Fixed JSON mapping for Configuration Versions failing to properly set the `speculative` property [#459](https://github.com/hashicorp/go-tfe/pull/459)
19+
20+
# v1.4.0
221

322
## Enhancements
423
* Adds `RetryServerErrors` field to the `Config` object by @sebasslash [#439](https://github.com/hashicorp/go-tfe/pull/439)
524
* Adds support for the GPG Keys API by @sebasslash [#429](https://github.com/hashicorp/go-tfe/pull/429)
6-
* [beta] Renames the optional StateVersion field `ExtState` to `JSONState` and changes to string for base64 encoding by @annawinkler [#444](https://github.com/hashicorp/go-tfe/pull/444)
25+
* Adds support for new `WorkspaceLimit` Admin setting for organizations [#425](https://github.com/hashicorp/go-tfe/pull/425)
26+
* Adds support for new `ExcludeTags` workspace list filter field by @Uk1288 [#438](https://github.com/hashicorp/go-tfe/pull/438)
27+
* [beta] Adds additional filter fields to `RunListOptions` by @mjyocca [#424](https://github.com/hashicorp/go-tfe/pull/424)
28+
* [beta] Renames the optional StateVersion field `ExtState` to `JSONStateOutputs` and changes the purpose and type by @annawinkler [#444](https://github.com/hashicorp/go-tfe/pull/444) and @brandoncroft [#452](https://github.com/hashicorp/go-tfe/pull/452)
29+
* Remove beta messaging for Run Tasks by @glennsarti [#447](https://github.com/hashicorp/go-tfe/pull/447)
30+
* Adds `Description` field to the `RunTask` object by @glennsarti [#447](https://github.com/hashicorp/go-tfe/pull/447)
731

832
# v1.3.0
933

CODEOWNERS

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
*.go @hashicorp/tf-cli
2-
*.md @hashicorp/tf-cli
1+
* @hashicorp/tf-cli

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ For complete usage of the API client, see the [full package docs](https://pkg.go
6363
This API client covers most of the existing Terraform Cloud API calls and is updated regularly to add new or missing endpoints.
6464

6565
- [x] Account
66+
- [x] Agents
6667
- [x] Agent Pools
6768
- [x] Agent Tokens
6869
- [x] Applies

admin_organization.go

+14-12
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ type AdminOrganization struct {
5050
TerraformBuildWorkerApplyTimeout string `jsonapi:"attr,terraform-build-worker-apply-timeout"`
5151
TerraformBuildWorkerPlanTimeout string `jsonapi:"attr,terraform-build-worker-plan-timeout"`
5252
TerraformWorkerSudoEnabled bool `jsonapi:"attr,terraform-worker-sudo-enabled"`
53+
WorkspaceLimit *int `jsonapi:"attr,workspace-limit"`
5354

5455
// Relations
5556
Owners []*User `jsonapi:"relation,owners"`
@@ -64,6 +65,7 @@ type AdminOrganizationUpdateOptions struct {
6465
TerraformBuildWorkerApplyTimeout *string `jsonapi:"attr,terraform-build-worker-apply-timeout,omitempty"`
6566
TerraformBuildWorkerPlanTimeout *string `jsonapi:"attr,terraform-build-worker-plan-timeout,omitempty"`
6667
TerraformWorkerSudoEnabled bool `jsonapi:"attr,terraform-worker-sudo-enabled,omitempty"`
68+
WorkspaceLimit *int `jsonapi:"attr,workspace-limit,omitempty"`
6769
}
6870

6971
// AdminOrganizationList represents a list of organizations via Admin API.
@@ -105,13 +107,13 @@ func (s *adminOrganizations) List(ctx context.Context, options *AdminOrganizatio
105107
return nil, err
106108
}
107109
u := "admin/organizations"
108-
req, err := s.client.newRequest("GET", u, options)
110+
req, err := s.client.NewRequest("GET", u, options)
109111
if err != nil {
110112
return nil, err
111113
}
112114

113115
orgl := &AdminOrganizationList{}
114-
err = s.client.do(ctx, req, orgl)
116+
err = req.Do(ctx, orgl)
115117
if err != nil {
116118
return nil, err
117119
}
@@ -127,13 +129,13 @@ func (s *adminOrganizations) ListModuleConsumers(ctx context.Context, organizati
127129

128130
u := fmt.Sprintf("admin/organizations/%s/relationships/module-consumers", url.QueryEscape(organization))
129131

130-
req, err := s.client.newRequest("GET", u, nil)
132+
req, err := s.client.NewRequest("GET", u, nil)
131133
if err != nil {
132134
return nil, err
133135
}
134136

135137
orgl := &AdminOrganizationList{}
136-
err = s.client.do(ctx, req, orgl)
138+
err = req.Do(ctx, orgl)
137139
if err != nil {
138140
return nil, err
139141
}
@@ -148,13 +150,13 @@ func (s *adminOrganizations) Read(ctx context.Context, organization string) (*Ad
148150
}
149151

150152
u := fmt.Sprintf("admin/organizations/%s", url.QueryEscape(organization))
151-
req, err := s.client.newRequest("GET", u, nil)
153+
req, err := s.client.NewRequest("GET", u, nil)
152154
if err != nil {
153155
return nil, err
154156
}
155157

156158
org := &AdminOrganization{}
157-
err = s.client.do(ctx, req, org)
159+
err = req.Do(ctx, org)
158160
if err != nil {
159161
return nil, err
160162
}
@@ -169,13 +171,13 @@ func (s *adminOrganizations) Update(ctx context.Context, organization string, op
169171
}
170172

171173
u := fmt.Sprintf("admin/organizations/%s", url.QueryEscape(organization))
172-
req, err := s.client.newRequest("PATCH", u, &options)
174+
req, err := s.client.NewRequest("PATCH", u, &options)
173175
if err != nil {
174176
return nil, err
175177
}
176178

177179
org := &AdminOrganization{}
178-
err = s.client.do(ctx, req, org)
180+
err = req.Do(ctx, org)
179181
if err != nil {
180182
return nil, err
181183
}
@@ -199,12 +201,12 @@ func (s *adminOrganizations) UpdateModuleConsumers(ctx context.Context, organiza
199201
organizations = append(organizations, &AdminOrganizationID{ID: id})
200202
}
201203

202-
req, err := s.client.newRequest("PATCH", u, organizations)
204+
req, err := s.client.NewRequest("PATCH", u, organizations)
203205
if err != nil {
204206
return err
205207
}
206208

207-
err = s.client.do(ctx, req, nil)
209+
err = req.Do(ctx, nil)
208210
if err != nil {
209211
return err
210212
}
@@ -219,12 +221,12 @@ func (s *adminOrganizations) Delete(ctx context.Context, organization string) er
219221
}
220222

221223
u := fmt.Sprintf("admin/organizations/%s", url.QueryEscape(organization))
222-
req, err := s.client.newRequest("DELETE", u, nil)
224+
req, err := s.client.NewRequest("DELETE", u, nil)
223225
if err != nil {
224226
return err
225227
}
226228

227-
return s.client.do(ctx, req, nil)
229+
return req.Do(ctx, nil)
228230
}
229231

230232
func (o *AdminOrganizationListOptions) valid() error {

admin_organization_integration_test.go

+31-22
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func TestAdminOrganizations_List(t *testing.T) {
3939
adminOrgList, err := client.Admin.Organizations.List(ctx, &AdminOrganizationListOptions{
4040
Query: org.Name,
4141
})
42-
assert.NoError(t, err)
42+
require.NoError(t, err)
4343
assert.Equal(t, true, adminOrgItemsContainsName(adminOrgList.Items, org.Name))
4444
assert.Equal(t, 1, adminOrgList.CurrentPage)
4545
assert.Equal(t, 1, adminOrgList.TotalCount)
@@ -51,7 +51,7 @@ func TestAdminOrganizations_List(t *testing.T) {
5151
adminOrgList, err := client.Admin.Organizations.List(ctx, &AdminOrganizationListOptions{
5252
Query: randomName,
5353
})
54-
assert.NoError(t, err)
54+
require.NoError(t, err)
5555
assert.Equal(t, false, adminOrgItemsContainsName(adminOrgList.Items, org.Name))
5656
assert.Equal(t, 1, adminOrgList.CurrentPage)
5757
assert.Equal(t, 0, adminOrgList.TotalCount)
@@ -61,9 +61,9 @@ func TestAdminOrganizations_List(t *testing.T) {
6161
adminOrgList, err := client.Admin.Organizations.List(ctx, &AdminOrganizationListOptions{
6262
Include: []AdminOrgIncludeOpt{AdminOrgOwners},
6363
})
64-
assert.NoError(t, err)
64+
require.NoError(t, err)
6565

66-
assert.NotEmpty(t, adminOrgList.Items)
66+
require.NotEmpty(t, adminOrgList.Items)
6767
assert.NotNil(t, adminOrgList.Items[0].Owners)
6868
assert.NotEmpty(t, adminOrgList.Items[0].Owners[0].Email)
6969
})
@@ -95,8 +95,8 @@ func TestAdminOrganizations_Read(t *testing.T) {
9595
defer orgTestCleanup()
9696

9797
adminOrg, err := client.Admin.Organizations.Read(ctx, org.Name)
98-
assert.NoError(t, err)
99-
assert.NotNilf(t, adminOrg, "Organization is not nil")
98+
require.NoError(t, err)
99+
require.NotNilf(t, adminOrg, "Organization is not nil")
100100
assert.Equal(t, adminOrg.Name, org.Name)
101101

102102
// attributes part of an AdminOrganization response that are not null
@@ -106,6 +106,7 @@ func TestAdminOrganizations_Read(t *testing.T) {
106106
assert.NotNilf(t, adminOrg.NotificationEmail, "NotificationEmail is not nil")
107107
assert.NotNilf(t, adminOrg.SsoEnabled, "SsoEnabled is not nil")
108108
assert.NotNilf(t, adminOrg.TerraformWorkerSudoEnabled, "TerraformWorkerSudoEnabledis not nil")
109+
assert.Nilf(t, adminOrg.WorkspaceLimit, "WorkspaceLimit is nil")
109110
})
110111
}
111112

@@ -132,12 +133,12 @@ func TestAdminOrganizations_Delete(t *testing.T) {
132133
originalOrg, _ := createOrganization(t, client)
133134

134135
adminOrg, err := client.Admin.Organizations.Read(ctx, originalOrg.Name)
135-
assert.NoError(t, err)
136-
assert.NotNilf(t, adminOrg, "Organization is not nil")
136+
require.NoError(t, err)
137+
require.NotNil(t, adminOrg)
137138
assert.Equal(t, adminOrg.Name, originalOrg.Name)
138139

139140
err = client.Admin.Organizations.Delete(ctx, adminOrg.Name)
140-
assert.NoError(t, err)
141+
require.NoError(t, err)
141142

142143
// Cannot find deleted org
143144
_, err = client.Admin.Organizations.Read(ctx, originalOrg.Name)
@@ -168,7 +169,7 @@ func TestAdminOrganizations_ModuleConsumers(t *testing.T) {
168169
defer org2TestCleanup()
169170

170171
err := client.Admin.Organizations.UpdateModuleConsumers(ctx, org1.Name, []string{org2.Name})
171-
assert.NoError(t, err)
172+
require.NoError(t, err)
172173

173174
adminModuleConsumerList, err := client.Admin.Organizations.ListModuleConsumers(ctx, org1.Name, nil)
174175
require.NoError(t, err)
@@ -180,7 +181,7 @@ func TestAdminOrganizations_ModuleConsumers(t *testing.T) {
180181
defer org3TestCleanup()
181182

182183
err = client.Admin.Organizations.UpdateModuleConsumers(ctx, org1.Name, []string{org3.Name})
183-
assert.NoError(t, err)
184+
require.NoError(t, err)
184185

185186
adminModuleConsumerList, err = client.Admin.Organizations.ListModuleConsumers(ctx, org1.Name, nil)
186187
require.NoError(t, err)
@@ -214,8 +215,8 @@ func TestAdminOrganizations_Update(t *testing.T) {
214215
defer orgTestCleanup()
215216

216217
adminOrg, err := client.Admin.Organizations.Read(ctx, org.Name)
217-
assert.NoError(t, err)
218-
assert.NotNilf(t, adminOrg, "Org returned as nil")
218+
require.NoError(t, err)
219+
require.NotNilf(t, adminOrg, "Org returned as nil")
219220

220221
accessBetaTools := true
221222
globalModuleSharing := false
@@ -234,43 +235,51 @@ func TestAdminOrganizations_Update(t *testing.T) {
234235
}
235236

236237
adminOrg, err = client.Admin.Organizations.Update(ctx, org.Name, opts)
237-
assert.NotNilf(t, adminOrg, "Org returned as nil when it shouldn't be.")
238-
assert.NoError(t, err)
238+
require.NotNilf(t, adminOrg, "Org returned as nil when it shouldn't be.")
239+
require.NoError(t, err)
239240

240241
assert.Equal(t, accessBetaTools, adminOrg.AccessBetaTools)
241-
assert.Equal(t, globalModuleSharing, adminOrg.GlobalModuleSharing)
242+
assert.Equal(t, adminOrg.GlobalModuleSharing, &globalModuleSharing)
242243
assert.Equal(t, isDisabled, adminOrg.IsDisabled)
243244
assert.Equal(t, terraformBuildWorkerApplyTimeout, adminOrg.TerraformBuildWorkerApplyTimeout)
244245
assert.Equal(t, terraformBuildWorkerPlanTimeout, adminOrg.TerraformBuildWorkerPlanTimeout)
245246
assert.Equal(t, terraformWorkerSudoEnabled, adminOrg.TerraformWorkerSudoEnabled)
247+
assert.Nil(t, adminOrg.WorkspaceLimit, "default workspace limit should be nil")
246248

247249
isDisabled = true
248250
globalModuleSharing = true
251+
workspaceLimit := 42
249252
opts = AdminOrganizationUpdateOptions{
250253
GlobalModuleSharing: &globalModuleSharing,
251254
IsDisabled: &isDisabled,
255+
WorkspaceLimit: &workspaceLimit,
252256
}
253257

254258
adminOrg, err = client.Admin.Organizations.Update(ctx, org.Name, opts)
255-
assert.NoError(t, err)
256-
assert.NotNilf(t, adminOrg, "Org returned as nil when it shouldn't be.")
259+
require.NoError(t, err)
260+
require.NotNilf(t, adminOrg, "Org returned as nil when it shouldn't be.")
257261

258-
assert.Equal(t, adminOrg.GlobalModuleSharing, globalModuleSharing)
262+
assert.Equal(t, adminOrg.GlobalModuleSharing, &globalModuleSharing)
259263
assert.Equal(t, adminOrg.IsDisabled, isDisabled)
264+
assert.Equal(t, &workspaceLimit, adminOrg.WorkspaceLimit)
260265

261266
globalModuleSharing = false
262267
isDisabled = false
268+
workspaceLimit = 0
263269
opts = AdminOrganizationUpdateOptions{
264270
GlobalModuleSharing: &globalModuleSharing,
265271
IsDisabled: &isDisabled,
272+
WorkspaceLimit: &workspaceLimit,
266273
}
267274

268275
adminOrg, err = client.Admin.Organizations.Update(ctx, org.Name, opts)
269-
assert.NoError(t, err)
270-
assert.NotNilf(t, adminOrg, "Org returned as nil when it shouldn't be.")
276+
require.NoError(t, err)
277+
require.NotNilf(t, adminOrg, "Org returned as nil when it shouldn't be.")
271278

272-
assert.Equal(t, adminOrg.GlobalModuleSharing, globalModuleSharing)
279+
assert.Equal(t, &globalModuleSharing, adminOrg.GlobalModuleSharing)
273280
assert.Equal(t, adminOrg.IsDisabled, isDisabled)
281+
282+
assert.Equal(t, &workspaceLimit, adminOrg.WorkspaceLimit)
274283
})
275284
}
276285

admin_run.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,13 @@ func (s *adminRuns) List(ctx context.Context, options *AdminRunsListOptions) (*A
7878
}
7979

8080
u := "admin/runs"
81-
req, err := s.client.newRequest("GET", u, options)
81+
req, err := s.client.NewRequest("GET", u, options)
8282
if err != nil {
8383
return nil, err
8484
}
8585

8686
rl := &AdminRunsList{}
87-
err = s.client.do(ctx, req, rl)
87+
err = req.Do(ctx, rl)
8888
if err != nil {
8989
return nil, err
9090
}
@@ -107,12 +107,12 @@ func (s *adminRuns) ForceCancel(ctx context.Context, runID string, options Admin
107107
}
108108

109109
u := fmt.Sprintf("admin/runs/%s/actions/force-cancel", url.QueryEscape(runID))
110-
req, err := s.client.newRequest("POST", u, &options)
110+
req, err := s.client.NewRequest("POST", u, &options)
111111
if err != nil {
112112
return err
113113
}
114114

115-
return s.client.do(ctx, req, nil)
115+
return req.Do(ctx, nil)
116116
}
117117

118118
func (o *AdminRunsListOptions) valid() error {

0 commit comments

Comments
 (0)