-
Notifications
You must be signed in to change notification settings - Fork 77
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[IAM]: new
data/opentelekomcloud_identity_projects_v3
(#1814)
[IAM]: new ``data/opentelekomcloud_identity_projects_v3`` Summary of the Pull Request Adds new data source to list all available projects PR Checklist Resolves: #1798 Tests added/passed. Documentation updated. Schema updated. Release notes added. Acceptance Steps Performed === RUN TestAccOpenStackIdentityV3ProjectsDataSource_basic --- PASS: TestAccOpenStackIdentityV3ProjectsDataSource_basic (34.75s) PASS Process finished with the exit code 0 Reviewed-by: Anton Sidelnikov <None>
- Loading branch information
1 parent
4f4bec9
commit 6e452de
Showing
5 changed files
with
191 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
--- | ||
subcategory: "Identity and Access Management (IAM)" | ||
--- | ||
|
||
# opentelekomcloud_identity_projects_v3 | ||
|
||
Use this data source to get the list of all OpenTelekomCloud projects. | ||
|
||
## Example Usage | ||
|
||
```hcl | ||
data "opentelekomcloud_identity_projects_v3" "project_1" {} | ||
``` | ||
|
||
|
||
## Argument Reference | ||
|
||
Data resource lists all available project therefore no arguments are provided. | ||
|
||
## Attributes Reference | ||
|
||
* `region` - Indicates the region where the project is present. | ||
|
||
* `name` - Indicated the name of the project. | ||
|
||
* `description` - The description of the project. | ||
|
||
* `domain_id` - The domain this project belongs to. | ||
|
||
* `parent_id` - The parent of this project. | ||
|
||
* `enabled` - Describes whether the project is available | ||
|
||
* `is_domain` - Indicates whether the user calling the API is a tenant. |
50 changes: 50 additions & 0 deletions
50
opentelekomcloud/acceptance/iam/data_source_opentelekomcloud_identity_projects_v3_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
package acceptance | ||
|
||
import ( | ||
"fmt" | ||
"testing" | ||
|
||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform" | ||
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/acceptance/common" | ||
) | ||
|
||
func TestAccOpenStackIdentityV3ProjectsDataSource_basic(t *testing.T) { | ||
userRegion := "eu-de" | ||
|
||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { | ||
common.TestAccPreCheck(t) | ||
common.TestAccPreCheckAdminOnly(t) | ||
}, | ||
ProviderFactories: common.TestAccProviderFactories, | ||
Steps: []resource.TestStep{ | ||
{ | ||
Config: testIdentityProjectsV3DataSource_basic(), | ||
Check: resource.ComposeTestCheckFunc( | ||
testAccCheckIdentityV3ProjectsDataSourceID("data.opentelekomcloud_identity_projects_v3.projects_data"), | ||
resource.TestCheckResourceAttr("data.opentelekomcloud_identity_projects_v3.projects_data", "region", userRegion), | ||
), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func testAccCheckIdentityV3ProjectsDataSourceID(n string) resource.TestCheckFunc { | ||
return func(s *terraform.State) error { | ||
rs, ok := s.RootModule().Resources[n] | ||
if !ok { | ||
return fmt.Errorf("can't find project data source: %s", n) | ||
} | ||
|
||
if rs.Primary.ID == "" { | ||
return fmt.Errorf("project data source ID not set") | ||
} | ||
|
||
return nil | ||
} | ||
} | ||
|
||
func testIdentityProjectsV3DataSource_basic() string { | ||
return `data "opentelekomcloud_identity_projects_v3" "projects_data" {}` | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
101 changes: 101 additions & 0 deletions
101
opentelekomcloud/services/iam/data_source_opentelekomcloud_identity_projects_v3.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
package iam | ||
|
||
import ( | ||
"context" | ||
|
||
"github.com/hashicorp/go-multierror" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||
"github.com/opentelekomcloud/gophertelekomcloud/openstack/identity/v3/projects" | ||
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/cfg" | ||
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/fmterr" | ||
) | ||
|
||
func DataSourceIdentityProjectsV3() *schema.Resource { | ||
return &schema.Resource{ | ||
ReadContext: dataSourceIdentityProjectsV3Read, | ||
|
||
Schema: map[string]*schema.Schema{ | ||
"region": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"projects": { | ||
Type: schema.TypeList, | ||
Computed: true, | ||
Elem: &schema.Resource{ | ||
Schema: map[string]*schema.Schema{ | ||
"description": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"domain_id": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"name": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"parent_id": { | ||
Type: schema.TypeString, | ||
Optional: true, | ||
}, | ||
"enabled": { | ||
Type: schema.TypeBool, | ||
Computed: true, | ||
}, | ||
"is_domain": { | ||
Type: schema.TypeBool, | ||
Computed: true, | ||
}, | ||
}, | ||
}, | ||
}, | ||
}, | ||
} | ||
} | ||
|
||
func dataSourceIdentityProjectsV3Read(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { | ||
config := meta.(*cfg.Config) | ||
client, err := config.IdentityV3Client(config.GetRegion(d)) | ||
if err != nil { | ||
return fmterr.Errorf(clientCreationFail, err) | ||
} | ||
|
||
allPages, err := projects.List(client, projects.ListOpts{}).AllPages() | ||
if err != nil { | ||
return fmterr.Errorf("unable to query projects: %s", err) | ||
} | ||
|
||
allProjects, err := projects.ExtractProjects(allPages) | ||
if err != nil { | ||
return fmterr.Errorf("unable to retrieve projects: %s", err) | ||
} | ||
|
||
var flattenProjects []map[string]interface{} | ||
|
||
for _, item := range allProjects { | ||
project := map[string]interface{}{ | ||
"name": item.Name, | ||
"description": item.Description, | ||
"domain_id": item.DomainID, | ||
"parent_id": item.ParentID, | ||
"enabled": item.Enabled, | ||
"is_domain": item.IsDomain, | ||
} | ||
flattenProjects = append(flattenProjects, project) | ||
} | ||
|
||
d.SetId(client.DomainID) | ||
mErr := multierror.Append( | ||
d.Set("region", config.GetRegion(d)), | ||
d.Set("projects", flattenProjects), | ||
) | ||
|
||
if err := mErr.ErrorOrNil(); err != nil { | ||
return diag.FromErr(err) | ||
} | ||
|
||
return nil | ||
} |
5 changes: 5 additions & 0 deletions
5
releasenotes/notes/iam_projects_data_source-192be891744c72e8.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
features: | ||
- | | ||
**[IAM]** New ``data/opentelekomcloud_identity_projects_v3`` data source | ||
(`#1798 <https://github.com/opentelekomcloud/terraform-provider-opentelekomcloud/issues/1798>`_) |