Skip to content

Commit

Permalink
Add new agent data source to client
Browse files Browse the repository at this point in the history
  • Loading branch information
laurenolivia committed Jul 27, 2022
1 parent efab77c commit cd5c837
Show file tree
Hide file tree
Showing 110 changed files with 2,302 additions and 1,243 deletions.
6 changes: 5 additions & 1 deletion .circleci/config.yml
Expand Up @@ -15,6 +15,10 @@ jobs:
steps:
- checkout

- setup_remote_docker:
version: 20.10.14
docker_layer_caching: true

- run:
name: Make test results directory
command: mkdir -p $TEST_RESULTS_DIR
Expand All @@ -36,4 +40,4 @@ workflows:
my-workflow:
jobs:
- run-tests:
context: core-team-access
context: core-team-access
3 changes: 0 additions & 3 deletions .github/CODEOWNERS

This file was deleted.

28 changes: 26 additions & 2 deletions CHANGELOG.md
@@ -1,9 +1,33 @@
# v1.4.0 (Unreleased)
# v1.6.0

## Enhancements
* Remove beta messaging for Run Tasks by @glennsarti [#447](https://github.com/hashicorp/go-tfe/pull/447)
* Adds `Description` field to the `RunTask` object by @glennsarti [#447](https://github.com/hashicorp/go-tfe/pull/447)
* Add `Name` field to `OAuthClient` by @barrettclark [#466](https://github.com/hashicorp/go-tfe/pull/466)
* Add support for creating both public and private `RegistryModule` with no VCS connection by @Uk1288 [#460](https://github.com/hashicorp/go-tfe/pull/460)
* Add `ConfigurationSourceAdo` configuration source option by @mjyocca [#467](https://github.com/hashicorp/go-tfe/pull/467)
* [beta] state version outputs may now include a detailed-type attribute in a future API release by @brandonc [#479](https://github.com/hashicorp/go-tfe/pull/429)

# v1.5.0

## Enhancements
* [beta] Add support for triggering Workspace runs through matching Git tags [#434](https://github.com/hashicorp/go-tfe/pull/434)
* 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)
* Add organization scope and allowed workspaces field for scope agents by @Netra2104 [#453](https://github.com/hashicorp/go-tfe/pull/453)
* 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)

## Bug fixes
* Fixed JSON mapping for Configuration Versions failing to properly set the `speculative` property [#459](https://github.com/hashicorp/go-tfe/pull/459)

# v1.4.0

## Enhancements
* Adds `RetryServerErrors` field to the `Config` object by @sebasslash [#439](https://github.com/hashicorp/go-tfe/pull/439)
* Adds support for the GPG Keys API by @sebasslash [#429](https://github.com/hashicorp/go-tfe/pull/429)
* [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)
* Adds support for new `WorkspaceLimit` Admin setting for organizations [#425](https://github.com/hashicorp/go-tfe/pull/425)
* Adds support for new `ExcludeTags` workspace list filter field by @Uk1288 [#438](https://github.com/hashicorp/go-tfe/pull/438)
* [beta] Adds additional filter fields to `RunListOptions` by @mjyocca [#424](https://github.com/hashicorp/go-tfe/pull/424)
* [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)

# v1.3.0

Expand Down
3 changes: 1 addition & 2 deletions CODEOWNERS
Validating CODEOWNERS rules …
@@ -1,2 +1 @@
*.go @hashicorp/tf-cli
*.md @hashicorp/tf-cli
* @hashicorp/tf-cli
1 change: 1 addition & 0 deletions README.md
Expand Up @@ -63,6 +63,7 @@ For complete usage of the API client, see the [full package docs](https://pkg.go
This API client covers most of the existing Terraform Cloud API calls and is updated regularly to add new or missing endpoints.

- [x] Account
- [x] Agents
- [x] Agent Pools
- [x] Agent Tokens
- [x] Applies
Expand Down
26 changes: 14 additions & 12 deletions admin_organization.go
Expand Up @@ -50,6 +50,7 @@ type AdminOrganization struct {
TerraformBuildWorkerApplyTimeout string `jsonapi:"attr,terraform-build-worker-apply-timeout"`
TerraformBuildWorkerPlanTimeout string `jsonapi:"attr,terraform-build-worker-plan-timeout"`
TerraformWorkerSudoEnabled bool `jsonapi:"attr,terraform-worker-sudo-enabled"`
WorkspaceLimit *int `jsonapi:"attr,workspace-limit"`

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

// AdminOrganizationList represents a list of organizations via Admin API.
Expand Down Expand Up @@ -105,13 +107,13 @@ func (s *adminOrganizations) List(ctx context.Context, options *AdminOrganizatio
return nil, err
}
u := "admin/organizations"
req, err := s.client.newRequest("GET", u, options)
req, err := s.client.NewRequest("GET", u, options)
if err != nil {
return nil, err
}

orgl := &AdminOrganizationList{}
err = s.client.do(ctx, req, orgl)
err = req.Do(ctx, orgl)
if err != nil {
return nil, err
}
Expand All @@ -127,13 +129,13 @@ func (s *adminOrganizations) ListModuleConsumers(ctx context.Context, organizati

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

req, err := s.client.newRequest("GET", u, nil)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, err
}

orgl := &AdminOrganizationList{}
err = s.client.do(ctx, req, orgl)
err = req.Do(ctx, orgl)
if err != nil {
return nil, err
}
Expand All @@ -148,13 +150,13 @@ func (s *adminOrganizations) Read(ctx context.Context, organization string) (*Ad
}

u := fmt.Sprintf("admin/organizations/%s", url.QueryEscape(organization))
req, err := s.client.newRequest("GET", u, nil)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, err
}

org := &AdminOrganization{}
err = s.client.do(ctx, req, org)
err = req.Do(ctx, org)
if err != nil {
return nil, err
}
Expand All @@ -169,13 +171,13 @@ func (s *adminOrganizations) Update(ctx context.Context, organization string, op
}

u := fmt.Sprintf("admin/organizations/%s", url.QueryEscape(organization))
req, err := s.client.newRequest("PATCH", u, &options)
req, err := s.client.NewRequest("PATCH", u, &options)
if err != nil {
return nil, err
}

org := &AdminOrganization{}
err = s.client.do(ctx, req, org)
err = req.Do(ctx, org)
if err != nil {
return nil, err
}
Expand All @@ -199,12 +201,12 @@ func (s *adminOrganizations) UpdateModuleConsumers(ctx context.Context, organiza
organizations = append(organizations, &AdminOrganizationID{ID: id})
}

req, err := s.client.newRequest("PATCH", u, organizations)
req, err := s.client.NewRequest("PATCH", u, organizations)
if err != nil {
return err
}

err = s.client.do(ctx, req, nil)
err = req.Do(ctx, nil)
if err != nil {
return err
}
Expand All @@ -219,12 +221,12 @@ func (s *adminOrganizations) Delete(ctx context.Context, organization string) er
}

u := fmt.Sprintf("admin/organizations/%s", url.QueryEscape(organization))
req, err := s.client.newRequest("DELETE", u, nil)
req, err := s.client.NewRequest("DELETE", u, nil)
if err != nil {
return err
}

return s.client.do(ctx, req, nil)
return req.Do(ctx, nil)
}

func (o *AdminOrganizationListOptions) valid() error {
Expand Down
53 changes: 31 additions & 22 deletions admin_organization_integration_test.go
Expand Up @@ -39,7 +39,7 @@ func TestAdminOrganizations_List(t *testing.T) {
adminOrgList, err := client.Admin.Organizations.List(ctx, &AdminOrganizationListOptions{
Query: org.Name,
})
assert.NoError(t, err)
require.NoError(t, err)
assert.Equal(t, true, adminOrgItemsContainsName(adminOrgList.Items, org.Name))
assert.Equal(t, 1, adminOrgList.CurrentPage)
assert.Equal(t, 1, adminOrgList.TotalCount)
Expand All @@ -51,7 +51,7 @@ func TestAdminOrganizations_List(t *testing.T) {
adminOrgList, err := client.Admin.Organizations.List(ctx, &AdminOrganizationListOptions{
Query: randomName,
})
assert.NoError(t, err)
require.NoError(t, err)
assert.Equal(t, false, adminOrgItemsContainsName(adminOrgList.Items, org.Name))
assert.Equal(t, 1, adminOrgList.CurrentPage)
assert.Equal(t, 0, adminOrgList.TotalCount)
Expand All @@ -61,9 +61,9 @@ func TestAdminOrganizations_List(t *testing.T) {
adminOrgList, err := client.Admin.Organizations.List(ctx, &AdminOrganizationListOptions{
Include: []AdminOrgIncludeOpt{AdminOrgOwners},
})
assert.NoError(t, err)
require.NoError(t, err)

assert.NotEmpty(t, adminOrgList.Items)
require.NotEmpty(t, adminOrgList.Items)
assert.NotNil(t, adminOrgList.Items[0].Owners)
assert.NotEmpty(t, adminOrgList.Items[0].Owners[0].Email)
})
Expand Down Expand Up @@ -95,8 +95,8 @@ func TestAdminOrganizations_Read(t *testing.T) {
defer orgTestCleanup()

adminOrg, err := client.Admin.Organizations.Read(ctx, org.Name)
assert.NoError(t, err)
assert.NotNilf(t, adminOrg, "Organization is not nil")
require.NoError(t, err)
require.NotNilf(t, adminOrg, "Organization is not nil")
assert.Equal(t, adminOrg.Name, org.Name)

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

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

adminOrg, err := client.Admin.Organizations.Read(ctx, originalOrg.Name)
assert.NoError(t, err)
assert.NotNilf(t, adminOrg, "Organization is not nil")
require.NoError(t, err)
require.NotNil(t, adminOrg)
assert.Equal(t, adminOrg.Name, originalOrg.Name)

err = client.Admin.Organizations.Delete(ctx, adminOrg.Name)
assert.NoError(t, err)
require.NoError(t, err)

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

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

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

err = client.Admin.Organizations.UpdateModuleConsumers(ctx, org1.Name, []string{org3.Name})
assert.NoError(t, err)
require.NoError(t, err)

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

adminOrg, err := client.Admin.Organizations.Read(ctx, org.Name)
assert.NoError(t, err)
assert.NotNilf(t, adminOrg, "Org returned as nil")
require.NoError(t, err)
require.NotNilf(t, adminOrg, "Org returned as nil")

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

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

assert.Equal(t, accessBetaTools, adminOrg.AccessBetaTools)
assert.Equal(t, globalModuleSharing, adminOrg.GlobalModuleSharing)
assert.Equal(t, adminOrg.GlobalModuleSharing, &globalModuleSharing)
assert.Equal(t, isDisabled, adminOrg.IsDisabled)
assert.Equal(t, terraformBuildWorkerApplyTimeout, adminOrg.TerraformBuildWorkerApplyTimeout)
assert.Equal(t, terraformBuildWorkerPlanTimeout, adminOrg.TerraformBuildWorkerPlanTimeout)
assert.Equal(t, terraformWorkerSudoEnabled, adminOrg.TerraformWorkerSudoEnabled)
assert.Nil(t, adminOrg.WorkspaceLimit, "default workspace limit should be nil")

isDisabled = true
globalModuleSharing = true
workspaceLimit := 42
opts = AdminOrganizationUpdateOptions{
GlobalModuleSharing: &globalModuleSharing,
IsDisabled: &isDisabled,
WorkspaceLimit: &workspaceLimit,
}

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

assert.Equal(t, adminOrg.GlobalModuleSharing, globalModuleSharing)
assert.Equal(t, adminOrg.GlobalModuleSharing, &globalModuleSharing)
assert.Equal(t, adminOrg.IsDisabled, isDisabled)
assert.Equal(t, &workspaceLimit, adminOrg.WorkspaceLimit)

globalModuleSharing = false
isDisabled = false
workspaceLimit = 0
opts = AdminOrganizationUpdateOptions{
GlobalModuleSharing: &globalModuleSharing,
IsDisabled: &isDisabled,
WorkspaceLimit: &workspaceLimit,
}

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

assert.Equal(t, adminOrg.GlobalModuleSharing, globalModuleSharing)
assert.Equal(t, &globalModuleSharing, adminOrg.GlobalModuleSharing)
assert.Equal(t, adminOrg.IsDisabled, isDisabled)

assert.Equal(t, &workspaceLimit, adminOrg.WorkspaceLimit)
})
}

Expand Down
8 changes: 4 additions & 4 deletions admin_run.go
Expand Up @@ -78,13 +78,13 @@ func (s *adminRuns) List(ctx context.Context, options *AdminRunsListOptions) (*A
}

u := "admin/runs"
req, err := s.client.newRequest("GET", u, options)
req, err := s.client.NewRequest("GET", u, options)
if err != nil {
return nil, err
}

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

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

return s.client.do(ctx, req, nil)
return req.Do(ctx, nil)
}

func (o *AdminRunsListOptions) valid() error {
Expand Down

0 comments on commit cd5c837

Please sign in to comment.