generated from hashicorp/terraform-provider-scaffolding-framework
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add user role data source and resource
- Loading branch information
Shawn Castrianni
authored and
Shawn Castrianni
committed
Jun 5, 2023
1 parent
94b9795
commit be0ef9a
Showing
19 changed files
with
401 additions
and
1 deletion.
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 |
---|---|---|
@@ -1,3 +1,6 @@ | ||
--- | ||
subcategory: "Identity Management" | ||
--- | ||
# Data Source: konnect_role | ||
Represents a role | ||
## Example usage | ||
|
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
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 |
---|---|---|
@@ -1,3 +1,6 @@ | ||
--- | ||
subcategory: "Identity Management" | ||
--- | ||
# Data Source: konnect_team | ||
Represents a team | ||
## Example usage | ||
|
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
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 |
---|---|---|
@@ -1,3 +1,6 @@ | ||
--- | ||
subcategory: "Identity Management" | ||
--- | ||
# Data Source: konnect_user | ||
Represents a user | ||
## Example usage | ||
|
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,25 @@ | ||
--- | ||
subcategory: "Identity Management" | ||
--- | ||
# Data Source: konnect_user_role | ||
Represents a role assigned to a user | ||
## Example usage | ||
```hcl | ||
data "konnect_user" "User" { | ||
search_full_name = "Joe" | ||
} | ||
data "konnect_user_role" "example" { | ||
user_id = data.konnect_user.User.id | ||
entity_type_display_name = "Runtime Groups" | ||
} | ||
``` | ||
## Argument Reference | ||
* `user_id` - **(Required, String)** The id of the user assigned the role | ||
* `search_role_display_name` - **(Optional, String)** The search string to apply to the display name of the role. Uses contains. | ||
* `role_display_name` - **(Optional, String)** The filter string to apply to the display name of the role. Uses equality. | ||
* `search_entity_type_display_name` - **(Optional, String)** The search string to apply to the display name of the entity type, like `Runtime Groups` or `Services`. Uses contains. | ||
* `entity_type_display_name` - **(Optional, String)** The filter string to apply to the display name of the entity type, like `Runtime Groups` or `Services`. Uses equality. | ||
## Attribute Reference | ||
* `id` - **(String)** Same as `user_id`:`Guid of role assignment` | ||
* `entity_id` - **(String)** The id of the entity for which the role applies. | ||
* `entity_region` - **(String)** The region of the entity for which the role applies. |
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
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
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
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 |
---|---|---|
@@ -1,3 +1,6 @@ | ||
--- | ||
subcategory: "Identity Management" | ||
--- | ||
# Resource: konnect_team | ||
Represents a team | ||
## Example usage | ||
|
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
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
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 |
---|---|---|
@@ -1,3 +1,6 @@ | ||
--- | ||
subcategory: "Identity Management" | ||
--- | ||
# Resource: konnect_user | ||
Represents a user | ||
## Example usage | ||
|
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,38 @@ | ||
--- | ||
subcategory: "Identity Management" | ||
--- | ||
# Resource: konnect_user_role | ||
Represents a role assigned to a user to access a given entity | ||
## Example usage | ||
```hcl | ||
resource "konnect_user" "User" { | ||
email = "Joe.Burrow@example.com" | ||
full_name = "Joe Burrow" | ||
preferred_name = "Joe" | ||
} | ||
data "konnect_role" "Role" { | ||
group_display_name = "Runtime Groups" | ||
display_name = "Admin" | ||
} | ||
resource "konnect_runtime_group" "RuntimeGroup" { | ||
name = "TestRG" | ||
description = "testing" | ||
} | ||
resource "konnect_user_role" "example" { | ||
user_id = konnect_user.User.id | ||
entity_id = konnect_runtime_group.RuntimeGroup.id | ||
entity_type_display_name = "Runtime Groups" | ||
entity_region = "us" | ||
role_display_name = data.konnect_role.Role.display_name | ||
} | ||
``` | ||
## Argument Reference | ||
* `user_id` - **(Required, ForceNew, String)** The id of the user assigned the role | ||
* `role_display_name` - **(Required, ForceNew, String)** The display name of the role. | ||
* `entity_type_display_name` - **(Required, ForceNew, String)** The display name of the entity type, like `Runtime Groups` or `Services`. | ||
* `entity_id` - **(Required, ForceNew, String)** The id of the entity for which the role applies. | ||
* `entity_region` - **(Required, ForceNew, String)** The region of the entity for which the role applies. | ||
## Attribute Reference | ||
* `id` - **(String)** Same as `user_id`:`Guid of role assignment` | ||
## Import | ||
User roles can be imported using a proper value of `id` as described above |
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,30 @@ | ||
package client | ||
|
||
import "strings" | ||
|
||
const ( | ||
UserRolePath = "users/%s/assigned-roles" | ||
UserRolePathCreate = UserRolePath | ||
UserRolePathDelete = UserRolePath + "/%s" | ||
) | ||
|
||
type UserRole struct { | ||
Id string `json:"id,omitempty"` | ||
UserId string `json:"-"` | ||
RoleDisplayName string `json:"role_name,omitempty"` | ||
EntityId string `json:"entity_id,omitempty"` | ||
EntityTypeDisplayName string `json:"entity_type_name,omitempty"` | ||
EntityRegion string `json:"entity_region,omitempty"` | ||
} | ||
type UserRoleCollection struct { | ||
UserRoles []UserRole `json:"data"` | ||
} | ||
|
||
func (ur *UserRole) UserRoleEncodeId() string { | ||
return ur.UserId + IdSeparator + ur.Id | ||
} | ||
|
||
func UserRoleDecodeId(s string) (string, string) { | ||
tokens := strings.Split(s, IdSeparator) | ||
return tokens[0], tokens[1] | ||
} |
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,100 @@ | ||
package konnect | ||
|
||
import ( | ||
"bytes" | ||
"context" | ||
"encoding/json" | ||
"fmt" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||
"github.com/scastria/terraform-provider-konnect/konnect/client" | ||
"net/http" | ||
"net/url" | ||
) | ||
|
||
func dataSourceUserRole() *schema.Resource { | ||
return &schema.Resource{ | ||
ReadContext: dataSourceUserRoleRead, | ||
Schema: map[string]*schema.Schema{ | ||
"user_id": { | ||
Type: schema.TypeString, | ||
Required: true, | ||
}, | ||
"search_role_display_name": { | ||
Type: schema.TypeString, | ||
Optional: true, | ||
}, | ||
"role_display_name": { | ||
Type: schema.TypeString, | ||
Optional: true, | ||
}, | ||
"search_entity_type_display_name": { | ||
Type: schema.TypeString, | ||
Optional: true, | ||
}, | ||
"entity_type_display_name": { | ||
Type: schema.TypeString, | ||
Optional: true, | ||
}, | ||
"entity_id": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"entity_region": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
}, | ||
} | ||
} | ||
|
||
func dataSourceUserRoleRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { | ||
var diags diag.Diagnostics | ||
c := m.(*client.Client) | ||
userId := d.Get("user_id").(string) | ||
requestQuery := url.Values{} | ||
searchRoleDisplayName, ok := d.GetOk("search_role_display_name") | ||
if ok { | ||
requestQuery[client.FilterRoleNameContains] = []string{searchRoleDisplayName.(string)} | ||
} | ||
roleDisplayName, ok := d.GetOk("role_display_name") | ||
if ok { | ||
requestQuery[client.FilterRoleName] = []string{roleDisplayName.(string)} | ||
} | ||
searchEntityTypeDisplayName, ok := d.GetOk("search_entity_type_display_name") | ||
if ok { | ||
requestQuery[client.FilterEntityTypeNameContains] = []string{searchEntityTypeDisplayName.(string)} | ||
} | ||
entityTypeDisplayName, ok := d.GetOk("entity_type_display_name") | ||
if ok { | ||
requestQuery[client.FilterEntityTypeName] = []string{entityTypeDisplayName.(string)} | ||
} | ||
requestPath := fmt.Sprintf(client.UserRolePath, userId) | ||
body, err := c.HttpRequest(ctx, false, http.MethodGet, requestPath, requestQuery, nil, &bytes.Buffer{}) | ||
if err != nil { | ||
d.SetId("") | ||
return diag.FromErr(err) | ||
} | ||
retVals := &client.UserRoleCollection{} | ||
err = json.NewDecoder(body).Decode(retVals) | ||
if err != nil { | ||
d.SetId("") | ||
return diag.FromErr(err) | ||
} | ||
numUserRoles := len(retVals.UserRoles) | ||
if numUserRoles > 1 { | ||
d.SetId("") | ||
return diag.FromErr(fmt.Errorf("Filter criteria does not result in a single user role")) | ||
} else if numUserRoles != 1 { | ||
d.SetId("") | ||
return diag.FromErr(fmt.Errorf("No user role exists with that filter criteria")) | ||
} | ||
retVal := retVals.UserRoles[0] | ||
retVal.UserId = userId | ||
d.Set("role_display_name", retVal.RoleDisplayName) | ||
d.Set("entity_type_display_name", retVal.EntityTypeDisplayName) | ||
d.Set("entity_id", retVal.EntityId) | ||
d.Set("entity_region", retVal.EntityRegion) | ||
d.SetId(retVal.UserRoleEncodeId()) | ||
return diags | ||
} |
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
Oops, something went wrong.