-
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.
Merge pull request #16 from marcozj/branch_v0.1.11
Branch v0.1.11
- Loading branch information
Showing
28 changed files
with
354 additions
and
22 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
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 |
---|---|---|
@@ -0,0 +1,183 @@ | ||
package centrify | ||
|
||
import ( | ||
"fmt" | ||
|
||
"github.com/hashicorp/terraform-plugin-sdk/helper/schema" | ||
"github.com/hashicorp/terraform-plugin-sdk/helper/validation" | ||
logger "github.com/marcozj/golang-sdk/logging" | ||
vault "github.com/marcozj/golang-sdk/platform" | ||
"github.com/marcozj/golang-sdk/restapi" | ||
) | ||
|
||
func resourceRoleMembership() *schema.Resource { | ||
return &schema.Resource{ | ||
Create: resourceRoleMembershipCreate, | ||
Read: resourceRoleMembershipRead, | ||
Update: resourceRoleMembershipUpdate, | ||
Delete: resourceRoleMembershipDelete, | ||
Importer: &schema.ResourceImporter{ | ||
State: schema.ImportStatePassthrough, | ||
}, | ||
|
||
Schema: map[string]*schema.Schema{ | ||
"role_id": { | ||
Type: schema.TypeString, | ||
Required: true, | ||
ForceNew: true, | ||
Description: "ID of the role", | ||
}, | ||
"member": { | ||
Type: schema.TypeSet, | ||
Optional: true, | ||
Set: customRoleMemberHash, | ||
Elem: &schema.Resource{ | ||
Schema: map[string]*schema.Schema{ | ||
"id": { | ||
Type: schema.TypeString, | ||
Required: true, | ||
Description: "ID of the member", | ||
}, | ||
"name": { | ||
Type: schema.TypeString, | ||
Optional: true, | ||
Computed: true, | ||
Description: "Name of the member", | ||
}, | ||
"type": { | ||
Type: schema.TypeString, | ||
Required: true, | ||
Description: "Type of the member", | ||
ValidateFunc: validation.StringInSlice([]string{ | ||
"User", | ||
"Group", | ||
"Role", | ||
}, false), | ||
}, | ||
}, | ||
}, | ||
}, | ||
}, | ||
} | ||
} | ||
|
||
func resourceRoleMembershipRead(d *schema.ResourceData, m interface{}) error { | ||
logger.Infof("Reading role membership: %s", ResourceIDString(d)) | ||
client := m.(*restapi.RestClient) | ||
|
||
// Create a role object and populate ID attribute | ||
object := vault.NewRoleMembership(client) | ||
object.ID = d.Id() | ||
object.RoleID = d.Get("role_id").(string) | ||
err := object.Read() | ||
|
||
// If the resource does not exist, inform Terraform. We want to immediately | ||
// return here to prevent further processing. | ||
if err != nil { | ||
d.SetId("") | ||
return fmt.Errorf(" Error reading role: %v", err) | ||
} | ||
logger.Debugf("Role from tenant: %v", object) | ||
|
||
schemamap, err := vault.GenerateSchemaMap(object) | ||
if err != nil { | ||
return err | ||
} | ||
logger.Debugf("Generated Map for resourceRoleMembershipRead(): %+v", schemamap) | ||
for k, v := range schemamap { | ||
d.Set(k, v) | ||
} | ||
|
||
logger.Infof("Completed reading role membership: %s", object.Name) | ||
return nil | ||
} | ||
|
||
func resourceRoleMembershipCreate(d *schema.ResourceData, m interface{}) error { | ||
logger.Infof("Beginning role membership creation: %s", ResourceIDString(d)) | ||
|
||
// Enable partial state mode | ||
d.Partial(true) | ||
|
||
client := m.(*restapi.RestClient) | ||
|
||
// Create a role object and populate all attributes | ||
object := vault.NewRoleMembership(client) | ||
createUpateGetRoleMembershipData(d, object) | ||
|
||
// Handle role members | ||
if len(object.Members) > 0 { | ||
resp, err := object.UpdateRoleMembers(object.Members, "Add") | ||
if err != nil || !resp.Success { | ||
return fmt.Errorf(" Error adding members to role: %v", err) | ||
} | ||
} | ||
|
||
//d.SetId(d.Get("name").(string)) | ||
d.SetId(object.RoleID) | ||
// Creation completed | ||
d.Partial(false) | ||
logger.Infof("Creation of role membership completed: %s", object.Name) | ||
return resourceRoleMembershipRead(d, m) | ||
} | ||
|
||
func resourceRoleMembershipUpdate(d *schema.ResourceData, m interface{}) error { | ||
logger.Infof("Beginning role membership update: %s", ResourceIDString(d)) | ||
|
||
// Enable partial state mode | ||
d.Partial(true) | ||
|
||
client := m.(*restapi.RestClient) | ||
object := vault.NewRoleMembership(client) | ||
object.ID = d.Id() | ||
createUpateGetRoleMembershipData(d, object) | ||
|
||
// Deal with role members | ||
if d.HasChange("member") { | ||
old, new := d.GetChange("member") | ||
// Remove old members | ||
resp, err := object.UpdateRoleMembers(expandRoleMembers(old), "Delete") | ||
if err != nil || !resp.Success { | ||
return fmt.Errorf(" Failed to remove members from role: %v", err) | ||
} | ||
// Add new members | ||
resp, err = object.UpdateRoleMembers(expandRoleMembers(new), "Add") | ||
if err != nil || !resp.Success { | ||
return fmt.Errorf(" Failed to add members to role: %v", err) | ||
} | ||
} | ||
|
||
// We succeeded, disable partial mode. This causes Terraform to save all fields again. | ||
d.Partial(false) | ||
logger.Infof("Updating of role membership completed: %s", object.Name) | ||
return resourceRoleMembershipRead(d, m) | ||
} | ||
|
||
func resourceRoleMembershipDelete(d *schema.ResourceData, m interface{}) error { | ||
logger.Infof("Beginning deletion of role membership: %s", ResourceIDString(d)) | ||
client := m.(*restapi.RestClient) | ||
|
||
object := vault.NewRoleMembership(client) | ||
object.ID = d.Id() | ||
createUpateGetRoleMembershipData(d, object) | ||
// Handle role members | ||
if len(object.Members) > 0 { | ||
resp, err := object.UpdateRoleMembers(object.Members, "Delete") | ||
if err != nil || !resp.Success { | ||
return fmt.Errorf(" Failed to remove members from role: %v", err) | ||
} | ||
} | ||
|
||
d.SetId("") | ||
logger.Infof("Deletion of role membership completed: %s", ResourceIDString(d)) | ||
return nil | ||
} | ||
|
||
func createUpateGetRoleMembershipData(d *schema.ResourceData, object *vault.RoleMembership) error { | ||
object.RoleID = d.Get("role_id").(string) | ||
object.ID = object.RoleID | ||
if v, ok := d.GetOk("member"); ok { | ||
object.Members = expandRoleMembers(v) | ||
} | ||
|
||
return nil | ||
} |
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
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 |
---|---|---|
@@ -0,0 +1,63 @@ | ||
--- | ||
subcategory: "Access" | ||
--- | ||
|
||
# centrifyvault_role_membership (Resource) | ||
|
||
This resource allows you to create/update/delete role membership for either existing or new role. | ||
|
||
~> **WARNING:** `centrifyvault_role_membership` will conflict with itself if used more than once with the same role. | ||
|
||
~> **NOTE:** Do NOT use both `centrifyvault_role` and `centrifyvault_role_membership` to manage role membership for the same role. | ||
|
||
## Example Usage | ||
|
||
```terraform | ||
// Existing federated (virtual) group | ||
data "centrifyvault_federatedgroup" "fedgroup1" { | ||
name = "Okta Infra Admins" | ||
} | ||
// Existing role whose membership to be managed | ||
data "centrifyvault_role" "testrole" { | ||
name = "Test Role" | ||
} | ||
// Role membership for exsting role | ||
resource "centrifyvault_role_membership" "testrolemembers" { | ||
role_id = data.centrifyvault_role.testrole.id | ||
// Existing federated (virtual) group | ||
member { | ||
id = data.centrifyvault_federatedgroup.fedgroup1.id | ||
type = "Group" | ||
} | ||
} | ||
``` | ||
|
||
More examples can be found [here](https://github.com/marcozj/terraform-provider-centrifyvault/tree/main/examples/centrifyvault_role_membership) | ||
|
||
## Argument Reference | ||
|
||
### Required | ||
|
||
- `role_id` - (String) ID of the role. | ||
|
||
### Optional | ||
|
||
- `member` - (Block Set) (see [below reference for member](#reference-for-member)) | ||
|
||
## [Reference for `member`] | ||
|
||
Required: | ||
|
||
- `id` - (String) ID of the member. | ||
- `type` - (String) Type of the member. Can be set to `User`, `Group` or `Role`. | ||
|
||
## Import | ||
|
||
Role membership can be imported using the resource `id`, e.g. | ||
|
||
```shell | ||
terraform import centrifyvault_role_membership.example xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | ||
``` |
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
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
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
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.