From 8223b5fcf8a601cfee72261d568a6c80b5e34da1 Mon Sep 17 00:00:00 2001 From: Rajesh K Pirati Date: Thu, 25 Apr 2024 15:44:00 +0530 Subject: [PATCH 1/3] Fix data assignment APIs Signed-off-by: Rajesh K Pirati --- go.mod | 2 +- go.sum | 4 +- .../data_source_ibm_iam_policy_assignment.go | 186 ++++-- .../data_source_ibm_iam_policy_assignments.go | 626 +++++++++++++++--- 4 files changed, 649 insertions(+), 169 deletions(-) diff --git a/go.mod b/go.mod index 96299b7df33..1e4d0a6ae05 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,7 @@ require ( github.com/IBM/ibm-hpcs-uko-sdk v0.0.20-beta github.com/IBM/keyprotect-go-client v0.12.2 github.com/IBM/networking-go-sdk v0.45.0 - github.com/IBM/platform-services-go-sdk v0.62.3 + github.com/IBM/platform-services-go-sdk v0.62.4 github.com/IBM/project-go-sdk v0.2.8-1 github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5 github.com/IBM/scc-go-sdk/v5 v5.1.5 diff --git a/go.sum b/go.sum index f55340a63eb..8a794c72028 100644 --- a/go.sum +++ b/go.sum @@ -158,8 +158,8 @@ github.com/IBM/mqcloud-go-sdk v0.0.4 h1:gqMpoU5a0qJ0GETG4PQrkgeEEoaQLvbxRJnEe6yt github.com/IBM/mqcloud-go-sdk v0.0.4/go.mod h1:gQptHC6D+rxfg0muRFFGvTDmvl4YfiDE0uXkaRRewRk= github.com/IBM/networking-go-sdk v0.45.0 h1:tYgDhVDpgKvELNY7tcodbZ4ny9fatpEWM6PwtQcDe20= github.com/IBM/networking-go-sdk v0.45.0/go.mod h1:NnJPA1e5GWr5opJe+5Hs6e1G6RcBIFz64TrkZsdnSp8= -github.com/IBM/platform-services-go-sdk v0.62.3 h1:utPtD1DYpA2r8Q7vDWoszMYJEsop7U973kyQ6vNizCA= -github.com/IBM/platform-services-go-sdk v0.62.3/go.mod h1:fd7gUOmsuQYhYLTZVLL+posObT/ISxVV+6JzsfDs5qE= +github.com/IBM/platform-services-go-sdk v0.62.4 h1:KZ6ILrcJckNTQ9k7HAIWOl2s0fpj4rzRunFwmzLhiQg= +github.com/IBM/platform-services-go-sdk v0.62.4/go.mod h1:fd7gUOmsuQYhYLTZVLL+posObT/ISxVV+6JzsfDs5qE= github.com/IBM/project-go-sdk v0.2.8-1 h1:2xGV+bZZ0ZrDzCpmVfcMkdOchARNns7vkUtAdQyDanQ= github.com/IBM/project-go-sdk v0.2.8-1/go.mod h1:7YN8IpeiDPPrIdm/4xMJhj2aU/TA1TSrvFuUUSGq9BU= github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5 h1:NPUhkoOCRuv3OFWt19PmwjXGGTKlvmbuPg9fUrBUNe4= diff --git a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignment.go b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignment.go index 2ecd62d7a0f..9baeb5db1c1 100644 --- a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignment.go +++ b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignment.go @@ -26,25 +26,10 @@ func DataSourceIBMIAMPolicyAssignment() *schema.Resource { Required: true, Description: "The policy template assignment ID.", }, - "template_id": { + "version": { Type: schema.TypeString, - Computed: true, - Description: "policy template id.", - }, - "template_version": { - Type: schema.TypeString, - Computed: true, - Description: "policy template version.", - }, - "target_type": { - Type: schema.TypeString, - Computed: true, - Description: "Assignment target type.", - }, - "target": { - Type: schema.TypeString, - Computed: true, - Description: "assignment target id.", + Required: true, + Description: "The policy template assignment new format", }, "id": { Type: schema.TypeString, @@ -76,6 +61,39 @@ func DataSourceIBMIAMPolicyAssignment() *schema.Resource { Computed: true, Description: "The iam ID of the entity that last modified the policy assignment.", }, + "subject": { + Type: schema.TypeList, + Computed: true, + Description: "subject details of access type assignment.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + "type": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + "target": { + Type: schema.TypeMap, + Computed: true, + Description: "assignment target details", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, + "template": { + Type: schema.TypeMap, + Computed: true, + Description: "policy template details", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + }, "resources": { Type: schema.TypeList, Computed: true, @@ -83,9 +101,12 @@ func DataSourceIBMIAMPolicyAssignment() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "target": { - Type: schema.TypeString, + Type: schema.TypeMap, Computed: true, - Description: "Account ID where resources are assigned.", + Description: "assignment target details", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, }, "policy": { Type: schema.TypeList, @@ -197,33 +218,43 @@ func DataSourceIBMIAMPolicyAssignment() *schema.Resource { "options": { Type: schema.TypeList, Computed: true, - Description: "List of objects with required properties for a policy assignment.", + Description: "The set of properties required for a policy assignment.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "subject_type": { - Type: schema.TypeString, - Computed: true, - Description: "The policy subject type; either 'iam_id' or 'access_group_id'.", - }, - "subject_id": { - Type: schema.TypeString, - Computed: true, - Description: "The policy subject id.", - }, - "root_requester_id": { - Type: schema.TypeString, - Computed: true, - Description: "The policy assignment requester id.", - }, - "root_template_id": { - Type: schema.TypeString, - Computed: true, - Description: "The template id where this policy is being assigned from.", - }, - "root_template_version": { - Type: schema.TypeString, - Computed: true, - Description: "The template version where this policy is being assigned from.", + "root": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "requester_id": { + Type: schema.TypeString, + Computed: true, + }, + "assignment_id": { + Type: schema.TypeString, + Computed: true, + Description: "Passed in value to correlate with other assignments.", + }, + "template": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": { + Type: schema.TypeString, + Computed: true, + Description: "The template id where this policy is being assigned from.", + }, + "version": { + Type: schema.TypeString, + Computed: true, + Description: "The template version where this policy is being assigned from.", + }, + }, + }, + }, + }, + }, }, }, }, @@ -246,33 +277,34 @@ func dataSourceIBMIAMPolicyAssignmentRead(context context.Context, d *schema.Res getPolicyAssignmentOptions := &iampolicymanagementv1.GetPolicyAssignmentOptions{} getPolicyAssignmentOptions.SetAssignmentID(d.Get("assignment_id").(string)) + getPolicyAssignmentOptions.SetVersion("1.0") - policyAssignmentRecord, response, err := iamPolicyManagementClient.GetPolicyAssignmentWithContext(context, getPolicyAssignmentOptions) + assignmentResponse, response, err := iamPolicyManagementClient.GetPolicyAssignmentWithContext(context, getPolicyAssignmentOptions) if err != nil { log.Printf("[DEBUG] GetPolicyAssignmentWithContext failed %s\n%s", err, response) return diag.FromErr(fmt.Errorf("GetPolicyAssignmentWithContext failed %s\n%s", err, response)) } + policyAssignmentRecord := assignmentResponse.(*iampolicymanagementv1.GetPolicyAssignmentResponse) d.SetId(*policyAssignmentRecord.ID) - if err = d.Set("template_id", policyAssignmentRecord.TemplateID); err != nil { - return diag.FromErr(fmt.Errorf("Error setting template_id: %s", err)) + targetMap, err := ResourceIBMPolicyAssignmentAssignmentTargetDetailsToMap(policyAssignmentRecord.Target) + if err != nil { + return diag.FromErr(err) } - if err = d.Set("template_version", policyAssignmentRecord.TemplateVersion); err != nil { - return diag.FromErr(fmt.Errorf("Error setting template_version: %s", err)) + if err = d.Set("id", policyAssignmentRecord.ID); err != nil { + return diag.FromErr(fmt.Errorf("Error setting id: %s", err)) } - - if err = d.Set("target_type", policyAssignmentRecord.TargetType); err != nil { - return diag.FromErr(fmt.Errorf("Error setting target_type: %s", err)) + if err = d.Set("target", targetMap); err != nil { + return diag.FromErr(fmt.Errorf("error setting target: %s", err)) } - - if err = d.Set("target", policyAssignmentRecord.Target); err != nil { - return diag.FromErr(fmt.Errorf("Error setting target: %s", err)) + optionsMap, err := ResourceIBMPolicyAssignmentPolicyAssignmentV1OptionsToMap(policyAssignmentRecord.Options) + if err != nil { + return diag.FromErr(err) } - - if err = d.Set("id", policyAssignmentRecord.ID); err != nil { - return diag.FromErr(fmt.Errorf("Error setting id: %s", err)) + if err = d.Set("options", []map[string]interface{}{optionsMap}); err != nil { + return diag.FromErr(fmt.Errorf("error setting options: %s", err)) } if err = d.Set("href", policyAssignmentRecord.Href); err != nil { @@ -302,7 +334,7 @@ func dataSourceIBMIAMPolicyAssignmentRead(context context.Context, d *schema.Res resources := []map[string]interface{}{} if policyAssignmentRecord.Resources != nil { for _, modelItem := range policyAssignmentRecord.Resources { - modelMap, err := dataSourceIBMPolicyAssignmentPolicyAssignmentResourcesToMap(&modelItem) + modelMap, err := ResourceIBMPolicyAssignmentPolicyAssignmentV1ResourcesToMap(&modelItem) if err != nil { return diag.FromErr(err) } @@ -312,25 +344,35 @@ func dataSourceIBMIAMPolicyAssignmentRead(context context.Context, d *schema.Res if err = d.Set("resources", resources); err != nil { return diag.FromErr(fmt.Errorf("Error setting resources %s", err)) } - - options := []map[string]interface{}{} - if policyAssignmentRecord.Options != nil { - for _, modelItem := range policyAssignmentRecord.Options { - modelMap, err := dataSourceIBMAssignmentPolicyAssignmentOptionsToMap(&modelItem) - if err != nil { - return diag.FromErr(err) - } - options = append(options, modelMap) + subject := []map[string]interface{}{} + if policyAssignmentRecord.Subject != nil { + modelMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentV1Subject(policyAssignmentRecord.Subject) + if err != nil { + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_policy_assignment", "read") + return tfErr.GetDiag() } + subject = append(subject, modelMap) } - if err = d.Set("options", options); err != nil { - return diag.FromErr(fmt.Errorf("Error setting options %s", err)) + if err = d.Set("subject", subject); err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting subject: %s", err), "(Data) ibm_policy_assignment", "read") + return tfErr.GetDiag() } return nil } -func dataSourceIBMPolicyAssignmentPolicyAssignmentResourcesToMap(model *iampolicymanagementv1.PolicyAssignmentResources) (map[string]interface{}, error) { +func DataSourceIBMPolicyAssignmentPolicyAssignmentV1Subject(model *iampolicymanagementv1.GetPolicyAssignmentResponseSubject) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.Type != nil { + modelMap["type"] = *model.Type + } + return modelMap, nil +} + +func dataSourceIBMPolicyAssignmentPolicyAssignmentResourcesToMap(model *iampolicymanagementv1.PolicyAssignmentV1Resources) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.Target != nil { modelMap["target"] = model.Target diff --git a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments.go b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments.go index 954d5f5e1e9..ede7e44a67c 100644 --- a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments.go +++ b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments.go @@ -1,4 +1,4 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2024 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 package iampolicy @@ -13,14 +13,31 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex" "github.com/IBM/platform-services-go-sdk/iampolicymanagementv1" ) func DataSourceIBMIAMPolicyAssignments() *schema.Resource { return &schema.Resource{ - ReadContext: dataSourceIBMIAMPolicyAssignmentsRead, + ReadContext: dataSourceIBMPolicyAssignmentRead, Schema: map[string]*schema.Schema{ + "version": { + Type: schema.TypeString, + Required: true, + Description: "specify version of response body format.", + }, + "account_id": { + Type: schema.TypeString, + Required: true, + Description: "The account GUID in which the policies belong to.", + }, + "accept_language": { + Type: schema.TypeString, + Optional: true, + Default: "default", + Description: "Language code for translations* `default` - English* `de` - German (Standard)* `en` - English* `es` - Spanish (Spain)* `fr` - French (Standard)* `it` - Italian (Standard)* `ja` - Japanese* `ko` - Korean* `pt-br` - Portuguese (Brazil)* `zh-cn` - Chinese (Simplified, PRC)* `zh-tw` - (Chinese, Taiwan).", + }, "template_id": { Type: schema.TypeString, Optional: true, @@ -31,41 +48,73 @@ func DataSourceIBMIAMPolicyAssignments() *schema.Resource { Optional: true, Description: "Optional policy template version.", }, - "policy_assignments": { + "assignments": { Type: schema.TypeList, Computed: true, Description: "List of policy assignments.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "template_id": { - Type: schema.TypeString, - Computed: true, - Description: "policy template id.", - }, - "template_version": { - Type: schema.TypeString, - Computed: true, - Description: "policy template version.", - }, - "assignment_id": { - Type: schema.TypeString, - Computed: true, - Description: "Passed in value to correlate with other assignments.", + "target": { + Type: schema.TypeMap, + Required: true, + Description: "assignment target details", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, }, - "target_type": { - Type: schema.TypeString, + "options": { + Type: schema.TypeList, Computed: true, - Description: "Assignment target type.", + Description: "The set of properties required for a policy assignment.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "root": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "requester_id": { + Type: schema.TypeString, + Computed: true, + }, + "assignment_id": { + Type: schema.TypeString, + Computed: true, + Description: "Passed in value to correlate with other assignments.", + }, + "template": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": { + Type: schema.TypeString, + Computed: true, + Description: "The template id where this policy is being assigned from.", + }, + "version": { + Type: schema.TypeString, + Computed: true, + Description: "The template version where this policy is being assigned from.", + }, + }, + }, + }, + }, + }, + }, + }, + }, }, - "target": { + "id": { Type: schema.TypeString, Computed: true, - Description: "assignment target id.", + Description: "Policy assignment ID.", }, - "id": { + "account_id": { Type: schema.TypeString, Computed: true, - Description: "Policy assignment ID.", + Description: "The account GUID that the policies assignments belong to..", }, "href": { Type: schema.TypeString, @@ -99,9 +148,12 @@ func DataSourceIBMIAMPolicyAssignments() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "target": { - Type: schema.TypeString, - Computed: true, - Description: "Account ID where resources are assigned.", + Type: schema.TypeMap, + Required: true, + Description: "assignment target details", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, }, "policy": { Type: schema.TypeList, @@ -123,6 +175,11 @@ func DataSourceIBMIAMPolicyAssignments() *schema.Resource { }, }, }, + "status": { + Type: schema.TypeString, + Computed: true, + Description: "policy status.", + }, "error_message": { Type: schema.TypeList, Computed: true, @@ -199,55 +256,72 @@ func DataSourceIBMIAMPolicyAssignments() *schema.Resource { }, }, }, - "status": { - Type: schema.TypeString, - Computed: true, - Description: "The policy assignment status.", - }, }, }, }, }, }, }, - "options": { + "subject": { Type: schema.TypeList, Computed: true, - Description: "List of objects with required properties for a policy assignment.", + Description: "subject details of access type assignment.", Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "subject_type": { - Type: schema.TypeString, - Computed: true, - Description: "The policy subject type; either 'iam_id' or 'access_group_id'.", + "id": { + Type: schema.TypeString, + Computed: true, }, - "subject_id": { - Type: schema.TypeString, - Computed: true, - Description: "The policy subject id.", + "type": { + Type: schema.TypeString, + Computed: true, }, - "root_requester_id": { - Type: schema.TypeString, - Computed: true, - Description: "The policy assignment requester id.", - }, - "root_template_id": { + }, + }, + }, + "template": { + Type: schema.TypeList, + Computed: true, + Description: "policy template details.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": { Type: schema.TypeString, Computed: true, - Description: "The template id where this policy is being assigned from.", + Description: "policy template id.", }, - "root_template_version": { + "version": { Type: schema.TypeString, Computed: true, - Description: "The template version where this policy is being assigned from.", + Description: "policy template version.", }, }, }, }, - "account_id": { + "status": { + Type: schema.TypeString, + Computed: true, + Description: "The policy assignment status.", + }, + "template_id": { + Type: schema.TypeString, + Computed: true, + Description: "policy template id.", + }, + "template_version": { + Type: schema.TypeString, + Computed: true, + Description: "policy template version.", + }, + "assignment_id": { Type: schema.TypeString, Computed: true, - Description: "Enterprise accountID.", + Description: "Passed in value to correlate with other assignments.", + }, + "target_type": { + Type: schema.TypeString, + Computed: true, + Description: "Assignment target type.", }, }, }, @@ -256,22 +330,21 @@ func DataSourceIBMIAMPolicyAssignments() *schema.Resource { } } -func dataSourceIBMIAMPolicyAssignmentsRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { +func dataSourceIBMPolicyAssignmentRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { iamPolicyManagementClient, err := meta.(conns.ClientSession).IAMPolicyManagementV1API() if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_policy_assignment", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } - userDetails, err := meta.(conns.ClientSession).BluemixUserDetails() - if err != nil { - return diag.FromErr(fmt.Errorf("Failed to fetch BluemixUserDetails %s", err)) - } - - accountID := userDetails.UserAccount - listPolicyAssignmentsOptions := &iampolicymanagementv1.ListPolicyAssignmentsOptions{} - listPolicyAssignmentsOptions.SetAccountID(accountID) + listPolicyAssignmentsOptions.SetVersion(d.Get("version").(string)) + listPolicyAssignmentsOptions.SetAccountID(d.Get("account_id").(string)) + if _, ok := d.GetOk("accept_language"); ok { + listPolicyAssignmentsOptions.SetAcceptLanguage(d.Get("accept_language").(string)) + } if _, ok := d.GetOk("template_id"); ok { listPolicyAssignmentsOptions.SetTemplateID(d.Get("template_id").(string)) } @@ -279,26 +352,29 @@ func dataSourceIBMIAMPolicyAssignmentsRead(context context.Context, d *schema.Re listPolicyAssignmentsOptions.SetTemplateVersion(d.Get("template_version").(string)) } - policyTemplateAssignmentCollection, response, err := iamPolicyManagementClient.ListPolicyAssignmentsWithContext(context, listPolicyAssignmentsOptions) + policyTemplateAssignmentCollection, _, err := iamPolicyManagementClient.ListPolicyAssignmentsWithContext(context, listPolicyAssignmentsOptions) if err != nil { - log.Printf("[DEBUG] ListPolicyAssignmentsWithContext failed %s\n%s", err, response) - return diag.FromErr(fmt.Errorf("ListPolicyAssignmentsWithContext failed %s\n%s", err, response)) + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("ListPolicyAssignmentsWithContext failed: %s", err.Error()), "(Data) ibm_policy_assignment", "read") + log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) + return tfErr.GetDiag() } d.SetId(dataSourceIBMPolicyAssignmentID(d)) - policyAssignments := []map[string]interface{}{} + assignments := []map[string]interface{}{} if policyTemplateAssignmentCollection.Assignments != nil { for _, modelItem := range policyTemplateAssignmentCollection.Assignments { - modelMap, err := dataSourceIBMPolicyAssignmentPolicyAssignmentRecordToMap(&modelItem) + modelMap, err := DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsToMap(modelItem) if err != nil { - return diag.FromErr(err) + tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_policy_assignment", "read") + return tfErr.GetDiag() } - policyAssignments = append(policyAssignments, modelMap) + assignments = append(assignments, modelMap) } } - if err = d.Set("policy_assignments", policyAssignments); err != nil { - return diag.FromErr(fmt.Errorf("Error setting policy_assignments %s", err)) + if err = d.Set("assignments", assignments); err != nil { + tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting assignments: %s", err), "(Data) ibm_policy_assignment", "read") + return tfErr.GetDiag() } return nil @@ -309,50 +385,394 @@ func dataSourceIBMPolicyAssignmentID(d *schema.ResourceData) string { return time.Now().UTC().String() } -func dataSourceIBMPolicyAssignmentPolicyAssignmentRecordToMap(model *iampolicymanagementv1.PolicyAssignment) (map[string]interface{}, error) { +func DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsToMap(model iampolicymanagementv1.PolicyTemplateAssignmentItemsIntf) (map[string]interface{}, error) { + if _, ok := model.(*iampolicymanagementv1.PolicyTemplateAssignmentItemsPolicyAssignmentV1); ok { + return DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsPolicyAssignmentV1ToMap(model.(*iampolicymanagementv1.PolicyTemplateAssignmentItemsPolicyAssignmentV1)) + } else if _, ok := model.(*iampolicymanagementv1.PolicyTemplateAssignmentItemsPolicyAssignment); ok { + return DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsPolicyAssignmentToMap(model.(*iampolicymanagementv1.PolicyTemplateAssignmentItemsPolicyAssignment)) + } else if _, ok := model.(*iampolicymanagementv1.PolicyTemplateAssignmentItems); ok { + modelMap := make(map[string]interface{}) + model := model.(*iampolicymanagementv1.PolicyTemplateAssignmentItems) + if model.Target != nil { + targetMap, err := DataSourceIBMPolicyAssignmentAssignmentTargetDetailsToMap(model.Target) + if err != nil { + return modelMap, err + } + // modelMap["target"] = []map[string]interface{}{targetMap} + modelMap["target"] = targetMap + } + if model.Options != nil { + optionsMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentV1OptionsToMap(model.Options) + if err != nil { + return modelMap, err + } + modelMap["options"] = []map[string]interface{}{optionsMap} + } + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.AccountID != nil { + modelMap["account_id"] = *model.AccountID + } + if model.Href != nil { + modelMap["href"] = *model.Href + } + if model.CreatedAt != nil { + modelMap["created_at"] = model.CreatedAt.String() + } + if model.CreatedByID != nil { + modelMap["created_by_id"] = *model.CreatedByID + } + if model.LastModifiedAt != nil { + modelMap["last_modified_at"] = model.LastModifiedAt.String() + } + if model.LastModifiedByID != nil { + modelMap["last_modified_by_id"] = *model.LastModifiedByID + } + if model.Resources != nil { + resources := []map[string]interface{}{} + for _, resourcesItem := range model.Resources { + resourcesItemMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentV1ResourcesToMap(&resourcesItem) + if err != nil { + return modelMap, err + } + resources = append(resources, resourcesItemMap) + } + modelMap["resources"] = resources + } + if model.Subject != nil { + subjectMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentV1SubjectToMap(model.Subject) + if err != nil { + return modelMap, err + } + modelMap["subject"] = []map[string]interface{}{subjectMap} + } + if model.Template != nil { + templateMap, err := DataSourceIBMPolicyAssignmentAssignmentTemplateDetailsToMap(model.Template) + if err != nil { + return modelMap, err + } + modelMap["template"] = []map[string]interface{}{templateMap} + } + if model.Status != nil { + modelMap["status"] = *model.Status + } + if model.TemplateID != nil { + modelMap["template_id"] = *model.TemplateID + } + if model.TemplateVersion != nil { + modelMap["template_version"] = *model.TemplateVersion + } + if model.AssignmentID != nil { + modelMap["assignment_id"] = *model.AssignmentID + } + if model.TargetType != nil { + modelMap["target_type"] = *model.TargetType + } + return modelMap, nil + } else { + return nil, fmt.Errorf("Unrecognized iampolicymanagementv1.PolicyTemplateAssignmentItemsIntf subtype encountered") + } +} + +func DataSourceIBMPolicyAssignmentAssignmentTargetDetailsToMap(model *iampolicymanagementv1.AssignmentTargetDetails) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Type != nil { + modelMap["type"] = *model.Type + } + if model.ID != nil { + modelMap["id"] = *model.ID + } + return modelMap, nil +} + +func DataSourceIBMPolicyAssignmentPolicyAssignmentV1OptionsToMap(model *iampolicymanagementv1.PolicyAssignmentV1Options) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + rootMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentV1OptionsRootToMap(model.Root) + if err != nil { + return modelMap, err + } + modelMap["root"] = []map[string]interface{}{rootMap} + return modelMap, nil +} + +func DataSourceIBMPolicyAssignmentPolicyAssignmentV1OptionsRootToMap(model *iampolicymanagementv1.PolicyAssignmentV1OptionsRoot) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.RequesterID != nil { + modelMap["requester_id"] = *model.RequesterID + } + if model.AssignmentID != nil { + modelMap["assignment_id"] = *model.AssignmentID + } + if model.Template != nil { + templateMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentV1OptionsRootTemplateToMap(model.Template) + if err != nil { + return modelMap, err + } + modelMap["template"] = []map[string]interface{}{templateMap} + } + return modelMap, nil +} + +func DataSourceIBMPolicyAssignmentPolicyAssignmentV1OptionsRootTemplateToMap(model *iampolicymanagementv1.PolicyAssignmentV1OptionsRootTemplate) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.Version != nil { + modelMap["version"] = *model.Version + } + return modelMap, nil +} + +func DataSourceIBMPolicyAssignmentPolicyAssignmentV1ResourcesToMap(model *iampolicymanagementv1.PolicyAssignmentV1Resources) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Target != nil { + targetMap, err := DataSourceIBMPolicyAssignmentAssignmentTargetDetailsToMap(model.Target) + if err != nil { + return modelMap, err + } + modelMap["target"] = targetMap + } + if model.Policy != nil { + policyMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentResourcePolicyToMap(model.Policy) + if err != nil { + return modelMap, err + } + modelMap["policy"] = []map[string]interface{}{policyMap} + } + return modelMap, nil +} + +func DataSourceIBMPolicyAssignmentPolicyAssignmentResourcePolicyToMap(model *iampolicymanagementv1.PolicyAssignmentResourcePolicy) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ResourceCreated != nil { + resourceCreatedMap, err := DataSourceIBMPolicyAssignmentAssignmentResourceCreatedToMap(model.ResourceCreated) + if err != nil { + return modelMap, err + } + modelMap["resource_created"] = []map[string]interface{}{resourceCreatedMap} + } + if model.Status != nil { + modelMap["status"] = *model.Status + } + if model.ErrorMessage != nil { + errorMessageMap, err := DataSourceIBMPolicyAssignmentErrorResponseToMap(model.ErrorMessage) + if err != nil { + return modelMap, err + } + modelMap["error_message"] = []map[string]interface{}{errorMessageMap} + } + return modelMap, nil +} + +func DataSourceIBMPolicyAssignmentAssignmentResourceCreatedToMap(model *iampolicymanagementv1.AssignmentResourceCreated) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ID != nil { + modelMap["id"] = *model.ID + } + return modelMap, nil +} + +func DataSourceIBMPolicyAssignmentErrorResponseToMap(model *iampolicymanagementv1.ErrorResponse) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Trace != nil { + modelMap["trace"] = *model.Trace + } + if model.Errors != nil { + errors := []map[string]interface{}{} + for _, errorsItem := range model.Errors { + errorsItemMap, err := DataSourceIBMPolicyAssignmentErrorObjectToMap(&errorsItem) + if err != nil { + return modelMap, err + } + errors = append(errors, errorsItemMap) + } + modelMap["errors"] = errors + } + if model.StatusCode != nil { + modelMap["status_code"] = flex.IntValue(model.StatusCode) + } + return modelMap, nil +} + +func DataSourceIBMPolicyAssignmentErrorObjectToMap(model *iampolicymanagementv1.ErrorObject) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["code"] = *model.Code + modelMap["message"] = *model.Message + if model.Details != nil { + detailsMap, err := DataSourceIBMPolicyAssignmentErrorDetailsToMap(model.Details) + if err != nil { + return modelMap, err + } + modelMap["details"] = []map[string]interface{}{detailsMap} + } + if model.MoreInfo != nil { + modelMap["more_info"] = *model.MoreInfo + } + return modelMap, nil +} + +func DataSourceIBMPolicyAssignmentErrorDetailsToMap(model *iampolicymanagementv1.ErrorDetails) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) - modelMap["template_id"] = model.TemplateID - modelMap["template_version"] = model.TemplateVersion - modelMap["assignment_id"] = model.AssignmentID - modelMap["target_type"] = model.TargetType - modelMap["target"] = model.Target + if model.ConflictsWith != nil { + conflictsWithMap, err := DataSourceIBMPolicyAssignmentConflictsWithToMap(model.ConflictsWith) + if err != nil { + return modelMap, err + } + modelMap["conflicts_with"] = []map[string]interface{}{conflictsWithMap} + } + return modelMap, nil +} + +func DataSourceIBMPolicyAssignmentConflictsWithToMap(model *iampolicymanagementv1.ConflictsWith) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Etag != nil { + modelMap["etag"] = *model.Etag + } + if model.Role != nil { + modelMap["role"] = *model.Role + } + if model.Policy != nil { + modelMap["policy"] = *model.Policy + } + return modelMap, nil +} + +func DataSourceIBMPolicyAssignmentPolicyAssignmentV1SubjectToMap(model *iampolicymanagementv1.PolicyAssignmentV1Subject) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.Type != nil { + modelMap["type"] = *model.Type + } + return modelMap, nil +} + +func DataSourceIBMPolicyAssignmentAssignmentTemplateDetailsToMap(model *iampolicymanagementv1.AssignmentTemplateDetails) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.Version != nil { + modelMap["version"] = *model.Version + } + return modelMap, nil +} + +func DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsPolicyAssignmentV1ToMap(model *iampolicymanagementv1.PolicyTemplateAssignmentItemsPolicyAssignmentV1) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + targetMap, err := DataSourceIBMPolicyAssignmentAssignmentTargetDetailsToMap(model.Target) + if err != nil { + return modelMap, err + } + // modelMap["target"] = []map[string]interface{}{targetMap} + modelMap["target"] = targetMap + optionsMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentV1OptionsToMap(model.Options) + if err != nil { + return modelMap, err + } + modelMap["options"] = []map[string]interface{}{optionsMap} if model.ID != nil { - modelMap["id"] = model.ID + modelMap["id"] = *model.ID + } + if model.AccountID != nil { + modelMap["account_id"] = *model.AccountID } if model.Href != nil { - modelMap["href"] = model.Href + modelMap["href"] = *model.Href } if model.CreatedAt != nil { modelMap["created_at"] = model.CreatedAt.String() } if model.CreatedByID != nil { - modelMap["created_by_id"] = model.CreatedByID + modelMap["created_by_id"] = *model.CreatedByID } if model.LastModifiedAt != nil { modelMap["last_modified_at"] = model.LastModifiedAt.String() } if model.LastModifiedByID != nil { - modelMap["last_modified_by_id"] = model.LastModifiedByID + modelMap["last_modified_by_id"] = *model.LastModifiedByID } - if model.AccountID != nil { - modelMap["account_id"] = model.AccountID + resources := []map[string]interface{}{} + for _, resourcesItem := range model.Resources { + resourcesItemMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentV1ResourcesToMap(&resourcesItem) + if err != nil { + return modelMap, err + } + resources = append(resources, resourcesItemMap) } + modelMap["resources"] = resources + if model.Subject != nil { + subjectMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentV1SubjectToMap(model.Subject) + if err != nil { + return modelMap, err + } + modelMap["subject"] = []map[string]interface{}{subjectMap} + } + templateMap, err := DataSourceIBMPolicyAssignmentAssignmentTemplateDetailsToMap(model.Template) + if err != nil { + return modelMap, err + } + modelMap["template"] = []map[string]interface{}{templateMap} + modelMap["status"] = *model.Status + return modelMap, nil +} +func DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsPolicyAssignmentToMap(model *iampolicymanagementv1.PolicyTemplateAssignmentItemsPolicyAssignment) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.TemplateID != nil { + modelMap["template_id"] = *model.TemplateID + } + if model.TemplateVersion != nil { + modelMap["template_version"] = *model.TemplateVersion + } + if model.AssignmentID != nil { + modelMap["assignment_id"] = *model.AssignmentID + } + if model.TargetType != nil { + modelMap["target_type"] = *model.TargetType + } + if model.Target != nil { + modelMap["target"] = *model.Target + } if model.Options != nil { options := []map[string]interface{}{} - for _, modelItem := range model.Options { - modelMap, err := dataSourceIBMAssignmentPolicyAssignmentOptionsToMap(&modelItem) + for _, optionsItem := range model.Options { + optionsItemMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentOptionsToMap(&optionsItem) if err != nil { return modelMap, err } - options = append(options, modelMap) + options = append(options, optionsItemMap) } modelMap["options"] = options } + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.AccountID != nil { + modelMap["account_id"] = *model.AccountID + } + if model.Href != nil { + modelMap["href"] = *model.Href + } + if model.CreatedAt != nil { + modelMap["created_at"] = model.CreatedAt.String() + } + if model.CreatedByID != nil { + modelMap["created_by_id"] = *model.CreatedByID + } + if model.LastModifiedAt != nil { + modelMap["last_modified_at"] = model.LastModifiedAt.String() + } + if model.LastModifiedByID != nil { + modelMap["last_modified_by_id"] = *model.LastModifiedByID + } if model.Resources != nil { resources := []map[string]interface{}{} for _, resourcesItem := range model.Resources { - resourcesItemMap, err := dataSourceIBMPolicyAssignmentPolicyAssignmentResourcesToMap(&resourcesItem) + resourcesItemMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentResourcesToMap(&resourcesItem) if err != nil { return modelMap, err } @@ -360,19 +780,37 @@ func dataSourceIBMPolicyAssignmentPolicyAssignmentRecordToMap(model *iampolicyma } modelMap["resources"] = resources } + if model.Status != nil { + modelMap["status"] = *model.Status + } return modelMap, nil } -func dataSourceIBMAssignmentPolicyAssignmentOptionsToMap(model *iampolicymanagementv1.PolicyAssignmentOptions) (map[string]interface{}, error) { +func DataSourceIBMPolicyAssignmentPolicyAssignmentOptionsToMap(model *iampolicymanagementv1.PolicyAssignmentOptions) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) - modelMap["subject_type"] = model.SubjectType - modelMap["subject_id"] = model.SubjectID - modelMap["root_requester_id"] = model.RootRequesterID + modelMap["subject_type"] = *model.SubjectType + modelMap["subject_id"] = *model.SubjectID + modelMap["root_requester_id"] = *model.RootRequesterID if model.RootTemplateID != nil { - modelMap["root_template_id"] = model.RootTemplateID + modelMap["root_template_id"] = *model.RootTemplateID } if model.RootTemplateVersion != nil { - modelMap["root_template_version"] = model.RootTemplateVersion + modelMap["root_template_version"] = *model.RootTemplateVersion + } + return modelMap, nil +} + +func DataSourceIBMPolicyAssignmentPolicyAssignmentResourcesToMap(model *iampolicymanagementv1.PolicyAssignmentResources) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Target != nil { + modelMap["target"] = *model.Target + } + if model.Policy != nil { + policyMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentResourcePolicyToMap(model.Policy) + if err != nil { + return modelMap, err + } + modelMap["policy"] = []map[string]interface{}{policyMap} } return modelMap, nil } From ce798d4820c7152f26dc2985a8a336610c90f4ee Mon Sep 17 00:00:00 2001 From: Rajesh K Pirati Date: Thu, 25 Apr 2024 16:20:01 +0530 Subject: [PATCH 2/3] remove accountId as input --- .../data_source_ibm_iam_policy_assignment.go | 152 ++++++++++++++++++ .../data_source_ibm_iam_policy_assignments.go | 36 ++++- ..._source_ibm_iam_policy_assignments_test.go | 3 +- 3 files changed, 183 insertions(+), 8 deletions(-) diff --git a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignment.go b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignment.go index 9baeb5db1c1..54a4be5b36f 100644 --- a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignment.go +++ b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignment.go @@ -361,6 +361,158 @@ func dataSourceIBMIAMPolicyAssignmentRead(context context.Context, d *schema.Res return nil } +func ResourceIBMPolicyAssignmentConflictsWithToMap(model *iampolicymanagementv1.ConflictsWith) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Etag != nil { + modelMap["etag"] = *model.Etag + } + if model.Role != nil { + modelMap["role"] = *model.Role + } + if model.Policy != nil { + modelMap["policy"] = *model.Policy + } + return modelMap, nil +} + +func ResourceIBMPolicyAssignmentErrorDetailsToMap(model *iampolicymanagementv1.ErrorDetails) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ConflictsWith != nil { + conflictsWithMap, err := ResourceIBMPolicyAssignmentConflictsWithToMap(model.ConflictsWith) + if err != nil { + return modelMap, err + } + modelMap["conflicts_with"] = []map[string]interface{}{conflictsWithMap} + } + return modelMap, nil +} + +func ResourceIBMPolicyAssignmentAssignmentResourceCreatedToMap(model *iampolicymanagementv1.AssignmentResourceCreated) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ID != nil { + modelMap["id"] = *model.ID + } + return modelMap, nil +} + +func ResourceIBMPolicyAssignmentErrorObjectToMap(model *iampolicymanagementv1.ErrorObject) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + modelMap["code"] = *model.Code + modelMap["message"] = *model.Message + if model.Details != nil { + detailsMap, err := ResourceIBMPolicyAssignmentErrorDetailsToMap(model.Details) + if err != nil { + return modelMap, err + } + modelMap["details"] = []map[string]interface{}{detailsMap} + } + if model.MoreInfo != nil { + modelMap["more_info"] = *model.MoreInfo + } + return modelMap, nil +} + +func ResourceIBMPolicyAssignmentErrorResponseToMap(model *iampolicymanagementv1.ErrorResponse) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Trace != nil { + modelMap["trace"] = *model.Trace + } + if model.Errors != nil { + errors := []map[string]interface{}{} + for _, errorsItem := range model.Errors { + errorsItemMap, err := ResourceIBMPolicyAssignmentErrorObjectToMap(&errorsItem) + if err != nil { + return modelMap, err + } + errors = append(errors, errorsItemMap) + } + modelMap["errors"] = errors + } + if model.StatusCode != nil { + modelMap["status_code"] = flex.IntValue(model.StatusCode) + } + return modelMap, nil +} + +func ResourceIBMPolicyAssignmentPolicyAssignmentResourcePolicyToMap(model *iampolicymanagementv1.PolicyAssignmentResourcePolicy) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ResourceCreated != nil { + resourceCreatedMap, err := ResourceIBMPolicyAssignmentAssignmentResourceCreatedToMap(model.ResourceCreated) + if err != nil { + return modelMap, err + } + modelMap["resource_created"] = []map[string]interface{}{resourceCreatedMap} + } + if model.Status != nil { + modelMap["status"] = *model.Status + } + if model.ErrorMessage != nil { + errorMessageMap, err := ResourceIBMPolicyAssignmentErrorResponseToMap(model.ErrorMessage) + if err != nil { + return modelMap, err + } + modelMap["error_message"] = []map[string]interface{}{errorMessageMap} + } + return modelMap, nil +} + +func ResourceIBMPolicyAssignmentPolicyAssignmentV1ResourcesToMap(model *iampolicymanagementv1.PolicyAssignmentV1Resources) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Target != nil { + targetMap, err := ResourceIBMPolicyAssignmentResourceTargetDetailsToMap(model.Target) + if err != nil { + return modelMap, err + } + modelMap["target"] = targetMap + } + if model.Policy != nil { + policyMap, err := ResourceIBMPolicyAssignmentPolicyAssignmentResourcePolicyToMap(model.Policy) + if err != nil { + return modelMap, err + } + modelMap["policy"] = []map[string]interface{}{policyMap} + } + return modelMap, nil +} +func ResourceIBMPolicyAssignmentPolicyAssignmentV1OptionsRootTemplateToMap(model *iampolicymanagementv1.PolicyAssignmentV1OptionsRootTemplate) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.ID != nil { + modelMap["id"] = *model.ID + } + if model.Version != nil { + modelMap["version"] = *model.Version + } + return modelMap, nil +} + +func ResourceIBMPolicyAssignmentPolicyAssignmentV1OptionsRootToMap(model *iampolicymanagementv1.PolicyAssignmentV1OptionsRoot) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.RequesterID != nil { + modelMap["requester_id"] = *model.RequesterID + } + if model.AssignmentID != nil { + modelMap["assignment_id"] = *model.AssignmentID + } + if model.Template != nil { + templateMap, err := ResourceIBMPolicyAssignmentPolicyAssignmentV1OptionsRootTemplateToMap(model.Template) + if err != nil { + return modelMap, err + } + modelMap["template"] = []map[string]interface{}{templateMap} + } + return modelMap, nil +} + +func ResourceIBMPolicyAssignmentPolicyAssignmentV1OptionsToMap(model *iampolicymanagementv1.PolicyAssignmentV1Options) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + rootMap, err := ResourceIBMPolicyAssignmentPolicyAssignmentV1OptionsRootToMap(model.Root) + if err != nil { + return modelMap, err + } + modelMap["root"] = []map[string]interface{}{rootMap} + return modelMap, nil +} + func DataSourceIBMPolicyAssignmentPolicyAssignmentV1Subject(model *iampolicymanagementv1.GetPolicyAssignmentResponseSubject) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.ID != nil { diff --git a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments.go b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments.go index ede7e44a67c..ed728053768 100644 --- a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments.go +++ b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments.go @@ -27,11 +27,6 @@ func DataSourceIBMIAMPolicyAssignments() *schema.Resource { Required: true, Description: "specify version of response body format.", }, - "account_id": { - Type: schema.TypeString, - Required: true, - Description: "The account GUID in which the policies belong to.", - }, "accept_language": { Type: schema.TypeString, Optional: true, @@ -337,11 +332,16 @@ func dataSourceIBMPolicyAssignmentRead(context context.Context, d *schema.Resour log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage()) return tfErr.GetDiag() } + userDetails, err := meta.(conns.ClientSession).BluemixUserDetails() + if err != nil { + return diag.FromErr(fmt.Errorf("failed to fetch BluemixUserDetails %s", err)) + } + accountID := userDetails.UserAccount listPolicyAssignmentsOptions := &iampolicymanagementv1.ListPolicyAssignmentsOptions{} + listPolicyAssignmentsOptions.SetAccountID(accountID) listPolicyAssignmentsOptions.SetVersion(d.Get("version").(string)) - listPolicyAssignmentsOptions.SetAccountID(d.Get("account_id").(string)) if _, ok := d.GetOk("accept_language"); ok { listPolicyAssignmentsOptions.SetAcceptLanguage(d.Get("accept_language").(string)) } @@ -380,6 +380,28 @@ func dataSourceIBMPolicyAssignmentRead(context context.Context, d *schema.Resour return nil } +func ResourceIBMPolicyAssignmentAssignmentTargetDetailsToMap(model *iampolicymanagementv1.AssignmentTargetDetails) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Type != nil { + modelMap["type"] = *model.Type + } + if model.ID != nil { + modelMap["id"] = *model.ID + } + return modelMap, nil +} + +func ResourceIBMPolicyAssignmentResourceTargetDetailsToMap(model *iampolicymanagementv1.AssignmentTemplateDetails) (map[string]interface{}, error) { + modelMap := make(map[string]interface{}) + if model.Version != nil { + modelMap["version"] = *model.Version + } + if model.ID != nil { + modelMap["id"] = *model.ID + } + return modelMap, nil +} + // dataSourceIBMPolicyAssignmentID returns a reasonable ID for the list. func dataSourceIBMPolicyAssignmentID(d *schema.ResourceData) string { return time.Now().UTC().String() @@ -528,7 +550,7 @@ func DataSourceIBMPolicyAssignmentPolicyAssignmentV1OptionsRootTemplateToMap(mod func DataSourceIBMPolicyAssignmentPolicyAssignmentV1ResourcesToMap(model *iampolicymanagementv1.PolicyAssignmentV1Resources) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.Target != nil { - targetMap, err := DataSourceIBMPolicyAssignmentAssignmentTargetDetailsToMap(model.Target) + targetMap, err := ResourceIBMPolicyAssignmentResourceTargetDetailsToMap(model.Target) if err != nil { return modelMap, err } diff --git a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments_test.go b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments_test.go index 7113feae1ee..c9f15f22911 100644 --- a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments_test.go +++ b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments_test.go @@ -21,7 +21,7 @@ func TestAccIBMIAMPolicyAssignmentsDataSourceBasic(t *testing.T) { Config: testAccCheckIBMPolicyAssignmentDataSourceConfigBasic(), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("data.ibm_iam_policy_assignments.policy_assignment", "id"), - resource.TestCheckResourceAttrSet("data.ibm_iam_policy_assignments.policy_assignment", "policy_assignments.#"), + resource.TestCheckResourceAttrSet("data.ibm_iam_policy_assignments.policy_assignment", "assignments.#"), ), }, }, @@ -31,5 +31,6 @@ func TestAccIBMIAMPolicyAssignmentsDataSourceBasic(t *testing.T) { func testAccCheckIBMPolicyAssignmentDataSourceConfigBasic() string { return fmt.Sprintf(` data "ibm_iam_policy_assignments" "policy_assignment" { + version="1.0" }`) } From 9f4c5087389640f3c6075c85d543cb1be2a70007 Mon Sep 17 00:00:00 2001 From: Rajesh K Pirati Date: Fri, 26 Apr 2024 14:59:18 +0530 Subject: [PATCH 3/3] make version as optional and set to 1.0 as default --- .../data_source_ibm_iam_policy_assignment.go | 166 ++++-------------- .../data_source_ibm_iam_policy_assignments.go | 124 ++----------- ..._source_ibm_iam_policy_assignments_test.go | 1 - .../d/iam_policy_assignment.html.markdown | 36 ++-- 4 files changed, 67 insertions(+), 260 deletions(-) diff --git a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignment.go b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignment.go index 54a4be5b36f..2aaef64f9eb 100644 --- a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignment.go +++ b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignment.go @@ -28,7 +28,8 @@ func DataSourceIBMIAMPolicyAssignment() *schema.Resource { }, "version": { Type: schema.TypeString, - Required: true, + Optional: true, + Default: "1.0", Description: "The policy template assignment new format", }, "id": { @@ -62,20 +63,11 @@ func DataSourceIBMIAMPolicyAssignment() *schema.Resource { Description: "The iam ID of the entity that last modified the policy assignment.", }, "subject": { - Type: schema.TypeList, + Type: schema.TypeMap, Computed: true, - Description: "subject details of access type assignment.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "id": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - }, - "type": &schema.Schema{ - Type: schema.TypeString, - Computed: true, - }, - }, + Description: "assignment access type subject details", + Elem: &schema.Schema{ + Type: schema.TypeString, }, }, "target": { @@ -294,11 +286,21 @@ func dataSourceIBMIAMPolicyAssignmentRead(context context.Context, d *schema.Res } if err = d.Set("id", policyAssignmentRecord.ID); err != nil { - return diag.FromErr(fmt.Errorf("Error setting id: %s", err)) + return diag.FromErr(fmt.Errorf("error setting id: %s", err)) } if err = d.Set("target", targetMap); err != nil { return diag.FromErr(fmt.Errorf("error setting target: %s", err)) } + if policyAssignmentRecord.Template != nil { + templateMap, err := DataSourceIBMPolicyAssignmentAssignmentTemplateDetailsToMap(policyAssignmentRecord.Template) + if err != nil { + return diag.FromErr(err) + } + + if err = d.Set("template", templateMap); err != nil { + return diag.FromErr(fmt.Errorf("error setting template: %s", err)) + } + } optionsMap, err := ResourceIBMPolicyAssignmentPolicyAssignmentV1OptionsToMap(policyAssignmentRecord.Options) if err != nil { return diag.FromErr(err) @@ -308,27 +310,27 @@ func dataSourceIBMIAMPolicyAssignmentRead(context context.Context, d *schema.Res } if err = d.Set("href", policyAssignmentRecord.Href); err != nil { - return diag.FromErr(fmt.Errorf("Error setting href: %s", err)) + return diag.FromErr(fmt.Errorf("error setting href: %s", err)) } if err = d.Set("created_at", flex.DateTimeToString(policyAssignmentRecord.CreatedAt)); err != nil { - return diag.FromErr(fmt.Errorf("Error setting created_at: %s", err)) + return diag.FromErr(fmt.Errorf("error setting created_at: %s", err)) } if err = d.Set("created_by_id", policyAssignmentRecord.CreatedByID); err != nil { - return diag.FromErr(fmt.Errorf("Error setting created_by_id: %s", err)) + return diag.FromErr(fmt.Errorf("error setting created_by_id: %s", err)) } if err = d.Set("last_modified_at", flex.DateTimeToString(policyAssignmentRecord.LastModifiedAt)); err != nil { - return diag.FromErr(fmt.Errorf("Error setting last_modified_at: %s", err)) + return diag.FromErr(fmt.Errorf("error setting last_modified_at: %s", err)) } if err = d.Set("last_modified_by_id", policyAssignmentRecord.LastModifiedByID); err != nil { - return diag.FromErr(fmt.Errorf("Error setting last_modified_by_id: %s", err)) + return diag.FromErr(fmt.Errorf("error setting last_modified_by_id: %s", err)) } if err = d.Set("account_id", policyAssignmentRecord.AccountID); err != nil { - return diag.FromErr(fmt.Errorf("Error setting account_id: %s", err)) + return diag.FromErr(fmt.Errorf("error setting account_id: %s", err)) } resources := []map[string]interface{}{} @@ -342,20 +344,18 @@ func dataSourceIBMIAMPolicyAssignmentRead(context context.Context, d *schema.Res } } if err = d.Set("resources", resources); err != nil { - return diag.FromErr(fmt.Errorf("Error setting resources %s", err)) + return diag.FromErr(fmt.Errorf("error setting resources %s", err)) } - subject := []map[string]interface{}{} + if policyAssignmentRecord.Subject != nil { modelMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentV1Subject(policyAssignmentRecord.Subject) if err != nil { - tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_policy_assignment", "read") - return tfErr.GetDiag() + return diag.FromErr(err) + } + + if err = d.Set("subject", modelMap); err != nil { + return diag.FromErr(fmt.Errorf("error setting subject %s", err)) } - subject = append(subject, modelMap) - } - if err = d.Set("subject", subject); err != nil { - tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting subject: %s", err), "(Data) ibm_policy_assignment", "read") - return tfErr.GetDiag() } return nil @@ -523,109 +523,3 @@ func DataSourceIBMPolicyAssignmentPolicyAssignmentV1Subject(model *iampolicymana } return modelMap, nil } - -func dataSourceIBMPolicyAssignmentPolicyAssignmentResourcesToMap(model *iampolicymanagementv1.PolicyAssignmentV1Resources) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.Target != nil { - modelMap["target"] = model.Target - } - if model.Policy != nil { - policyMap, err := dataSourceIBMPolicyAssignmentPolicyAssignmentResourcesPolicyToMap(model.Policy) - if err != nil { - return modelMap, err - } - modelMap["policy"] = []map[string]interface{}{policyMap} - } - return modelMap, nil -} - -func dataSourceIBMPolicyAssignmentPolicyAssignmentResourcesPolicyToMap(model *iampolicymanagementv1.PolicyAssignmentResourcePolicy) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - resourceCreatedMap, err := dataSourceIBMPolicyAssignmentAssignmentResourceCreatedToMap(model.ResourceCreated) - if err != nil { - return modelMap, err - } - modelMap["resource_created"] = []map[string]interface{}{resourceCreatedMap} - if model.ErrorMessage != nil { - errorMessageMap, err := dataSourceIBMPolicyAssignmentErrorResponseToMap(model.ErrorMessage) - if err != nil { - return modelMap, err - } - modelMap["error_message"] = []map[string]interface{}{errorMessageMap} - } - // modelMap["status"] = model.Status - return modelMap, nil -} - -func dataSourceIBMPolicyAssignmentAssignmentResourceCreatedToMap(model *iampolicymanagementv1.AssignmentResourceCreated) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.ID != nil { - modelMap["id"] = model.ID - } - return modelMap, nil -} - -func dataSourceIBMPolicyAssignmentErrorResponseToMap(model *iampolicymanagementv1.ErrorResponse) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.Trace != nil { - modelMap["trace"] = model.Trace - } - if model.Errors != nil { - errors := []map[string]interface{}{} - for _, errorsItem := range model.Errors { - errorsItemMap, err := dataSourceIBMPolicyAssignmentErrorObjectToMap(&errorsItem) - if err != nil { - return modelMap, err - } - errors = append(errors, errorsItemMap) - } - modelMap["errors"] = errors - } - if model.StatusCode != nil { - modelMap["status_code"] = flex.IntValue(model.StatusCode) - } - return modelMap, nil -} - -func dataSourceIBMPolicyAssignmentErrorObjectToMap(model *iampolicymanagementv1.ErrorObject) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - modelMap["code"] = model.Code - modelMap["message"] = model.Message - if model.Details != nil { - detailsMap, err := dataSourceIBMPolicyAssignmentErrorDetailsToMap(model.Details) - if err != nil { - return modelMap, err - } - modelMap["details"] = []map[string]interface{}{detailsMap} - } - if model.MoreInfo != nil { - modelMap["more_info"] = model.MoreInfo - } - return modelMap, nil -} - -func dataSourceIBMPolicyAssignmentErrorDetailsToMap(model *iampolicymanagementv1.ErrorDetails) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.ConflictsWith != nil { - conflictsWithMap, err := dataSourceIBMPolicyAssignmentConflictsWithToMap(model.ConflictsWith) - if err != nil { - return modelMap, err - } - modelMap["conflicts_with"] = []map[string]interface{}{conflictsWithMap} - } - return modelMap, nil -} - -func dataSourceIBMPolicyAssignmentConflictsWithToMap(model *iampolicymanagementv1.ConflictsWith) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - if model.Etag != nil { - modelMap["etag"] = model.Etag - } - if model.Role != nil { - modelMap["role"] = model.Role - } - if model.Policy != nil { - modelMap["policy"] = model.Policy - } - return modelMap, nil -} diff --git a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments.go b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments.go index ed728053768..a418e9f23e7 100644 --- a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments.go +++ b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments.go @@ -24,7 +24,8 @@ func DataSourceIBMIAMPolicyAssignments() *schema.Resource { Schema: map[string]*schema.Schema{ "version": { Type: schema.TypeString, - Required: true, + Optional: true, + Default: "1.0", Description: "specify version of response body format.", }, "accept_language": { @@ -51,7 +52,7 @@ func DataSourceIBMIAMPolicyAssignments() *schema.Resource { Schema: map[string]*schema.Schema{ "target": { Type: schema.TypeMap, - Required: true, + Computed: true, Description: "assignment target details", Elem: &schema.Schema{ Type: schema.TypeString, @@ -258,39 +259,19 @@ func DataSourceIBMIAMPolicyAssignments() *schema.Resource { }, }, "subject": { - Type: schema.TypeList, + Type: schema.TypeMap, Computed: true, - Description: "subject details of access type assignment.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "id": { - Type: schema.TypeString, - Computed: true, - }, - "type": { - Type: schema.TypeString, - Computed: true, - }, - }, + Description: "assignment access type subject details", + Elem: &schema.Schema{ + Type: schema.TypeString, }, }, "template": { - Type: schema.TypeList, + Type: schema.TypeMap, Computed: true, - Description: "policy template details.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "id": { - Type: schema.TypeString, - Computed: true, - Description: "policy template id.", - }, - "version": { - Type: schema.TypeString, - Computed: true, - Description: "policy template version.", - }, - }, + Description: "policy template details", + Elem: &schema.Schema{ + Type: schema.TypeString, }, }, "status": { @@ -313,11 +294,6 @@ func DataSourceIBMIAMPolicyAssignments() *schema.Resource { Computed: true, Description: "Passed in value to correlate with other assignments.", }, - "target_type": { - Type: schema.TypeString, - Computed: true, - Description: "Assignment target type.", - }, }, }, }, @@ -408,11 +384,7 @@ func dataSourceIBMPolicyAssignmentID(d *schema.ResourceData) string { } func DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsToMap(model iampolicymanagementv1.PolicyTemplateAssignmentItemsIntf) (map[string]interface{}, error) { - if _, ok := model.(*iampolicymanagementv1.PolicyTemplateAssignmentItemsPolicyAssignmentV1); ok { - return DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsPolicyAssignmentV1ToMap(model.(*iampolicymanagementv1.PolicyTemplateAssignmentItemsPolicyAssignmentV1)) - } else if _, ok := model.(*iampolicymanagementv1.PolicyTemplateAssignmentItemsPolicyAssignment); ok { - return DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsPolicyAssignmentToMap(model.(*iampolicymanagementv1.PolicyTemplateAssignmentItemsPolicyAssignment)) - } else if _, ok := model.(*iampolicymanagementv1.PolicyTemplateAssignmentItems); ok { + if _, ok := model.(*iampolicymanagementv1.PolicyTemplateAssignmentItems); ok { modelMap := make(map[string]interface{}) model := model.(*iampolicymanagementv1.PolicyTemplateAssignmentItems) if model.Target != nil { @@ -420,7 +392,6 @@ func DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsToMap(model iampo if err != nil { return modelMap, err } - // modelMap["target"] = []map[string]interface{}{targetMap} modelMap["target"] = targetMap } if model.Options != nil { @@ -467,14 +438,14 @@ func DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsToMap(model iampo if err != nil { return modelMap, err } - modelMap["subject"] = []map[string]interface{}{subjectMap} + modelMap["subject"] = subjectMap } if model.Template != nil { templateMap, err := DataSourceIBMPolicyAssignmentAssignmentTemplateDetailsToMap(model.Template) if err != nil { return modelMap, err } - modelMap["template"] = []map[string]interface{}{templateMap} + modelMap["template"] = templateMap } if model.Status != nil { modelMap["status"] = *model.Status @@ -488,12 +459,9 @@ func DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsToMap(model iampo if model.AssignmentID != nil { modelMap["assignment_id"] = *model.AssignmentID } - if model.TargetType != nil { - modelMap["target_type"] = *model.TargetType - } return modelMap, nil } else { - return nil, fmt.Errorf("Unrecognized iampolicymanagementv1.PolicyTemplateAssignmentItemsIntf subtype encountered") + return nil, fmt.Errorf("unrecognized iampolicymanagementv1.PolicyTemplateAssignmentItemsIntf subtype encountered") } } @@ -683,65 +651,6 @@ func DataSourceIBMPolicyAssignmentAssignmentTemplateDetailsToMap(model *iampolic return modelMap, nil } -func DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsPolicyAssignmentV1ToMap(model *iampolicymanagementv1.PolicyTemplateAssignmentItemsPolicyAssignmentV1) (map[string]interface{}, error) { - modelMap := make(map[string]interface{}) - targetMap, err := DataSourceIBMPolicyAssignmentAssignmentTargetDetailsToMap(model.Target) - if err != nil { - return modelMap, err - } - // modelMap["target"] = []map[string]interface{}{targetMap} - modelMap["target"] = targetMap - optionsMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentV1OptionsToMap(model.Options) - if err != nil { - return modelMap, err - } - modelMap["options"] = []map[string]interface{}{optionsMap} - if model.ID != nil { - modelMap["id"] = *model.ID - } - if model.AccountID != nil { - modelMap["account_id"] = *model.AccountID - } - if model.Href != nil { - modelMap["href"] = *model.Href - } - if model.CreatedAt != nil { - modelMap["created_at"] = model.CreatedAt.String() - } - if model.CreatedByID != nil { - modelMap["created_by_id"] = *model.CreatedByID - } - if model.LastModifiedAt != nil { - modelMap["last_modified_at"] = model.LastModifiedAt.String() - } - if model.LastModifiedByID != nil { - modelMap["last_modified_by_id"] = *model.LastModifiedByID - } - resources := []map[string]interface{}{} - for _, resourcesItem := range model.Resources { - resourcesItemMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentV1ResourcesToMap(&resourcesItem) - if err != nil { - return modelMap, err - } - resources = append(resources, resourcesItemMap) - } - modelMap["resources"] = resources - if model.Subject != nil { - subjectMap, err := DataSourceIBMPolicyAssignmentPolicyAssignmentV1SubjectToMap(model.Subject) - if err != nil { - return modelMap, err - } - modelMap["subject"] = []map[string]interface{}{subjectMap} - } - templateMap, err := DataSourceIBMPolicyAssignmentAssignmentTemplateDetailsToMap(model.Template) - if err != nil { - return modelMap, err - } - modelMap["template"] = []map[string]interface{}{templateMap} - modelMap["status"] = *model.Status - return modelMap, nil -} - func DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsPolicyAssignmentToMap(model *iampolicymanagementv1.PolicyTemplateAssignmentItemsPolicyAssignment) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.TemplateID != nil { @@ -753,9 +662,6 @@ func DataSourceIBMPolicyAssignmentPolicyTemplateAssignmentItemsPolicyAssignmentT if model.AssignmentID != nil { modelMap["assignment_id"] = *model.AssignmentID } - if model.TargetType != nil { - modelMap["target_type"] = *model.TargetType - } if model.Target != nil { modelMap["target"] = *model.Target } diff --git a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments_test.go b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments_test.go index c9f15f22911..da29f2b5729 100644 --- a/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments_test.go +++ b/ibm/service/iampolicy/data_source_ibm_iam_policy_assignments_test.go @@ -31,6 +31,5 @@ func TestAccIBMIAMPolicyAssignmentsDataSourceBasic(t *testing.T) { func testAccCheckIBMPolicyAssignmentDataSourceConfigBasic() string { return fmt.Sprintf(` data "ibm_iam_policy_assignments" "policy_assignment" { - version="1.0" }`) } diff --git a/website/docs/d/iam_policy_assignment.html.markdown b/website/docs/d/iam_policy_assignment.html.markdown index eb8d6d8c845..0d7af5d2564 100644 --- a/website/docs/d/iam_policy_assignment.html.markdown +++ b/website/docs/d/iam_policy_assignment.html.markdown @@ -25,9 +25,9 @@ data "ibm_iam_policy_assignments" "policy_assignment" { After your data source is created, you can read values from the following attributes. * `id` - The unique identifier of the policy_assignment. -* `policy_assignments` - (List) List of policy assignments. +* `assignments` - (List) List of policy assignments. * Constraints: The minimum length is `0` items. -Nested schema for **policy_assignments**: +Nested schema for **assignments**: * `assignment_id` - (String) Passed in value to correlate with other assignments. * Constraints: The maximum length is `50` characters. The minimum length is `1` character. * `created_at` - (String) The UTC timestamp when the policy assignment was created. @@ -36,14 +36,16 @@ Nested schema for **policy_assignments**: * `id` - (String) Policy assignment ID. * `last_modified_at` - (String) The UTC timestamp when the policy assignment was last modified. * `last_modified_by_id` - (String) The iam ID of the entity that last modified the policy assignment. - * `options` - (List) List of objects with required properties for a policy assignment. - * Constraints: The maximum length is `5` items. The minimum length is `1` item. + * `options` - (Map) objects with required properties for a policy assignment. Nested schema for **options**: - * `root_requester_id` - (String) The policy assignment requester id. - * `root_template_id` - (String) The template id where this policy is being assigned from. - * `root_template_version` - (String) The template version where this policy is being assigned from. - * `subject_id` - (String) The policy subject id. - * `subject_type` - (String) The policy subject type; either 'iam_id' or 'access_group_id'. + * `root` - (Map) Assignment root details + Nested schema for **root**: + * `requester_id` - (String) The policy assignment requester id. + * `assignment_id` - (String) The orchestrator assignment id. + * `template` - (Map) template details + Nested schema for **template**: + * `id` - (String) The policy assignment template id. + * `version` - (String) The orchestrator template version. * `resources` - (List) Object for each account assigned. * Constraints: The minimum length is `1` item. Nested schema for **resources**: @@ -69,8 +71,14 @@ Nested schema for **policy_assignments**: * `id` - (String) policy id. * `status` - (String) The policy assignment status. * `target` - (String) Account ID where resources are assigned. - * `target` - (String) assignment target id. - * `target_type` - (String) Assignment target type. - * `template_id` - (String) policy template id. - * `template_version` - (String) policy template version. - * `account_id` - (String) Enterprise account ID where template will be created. \ No newline at end of file + * `target` - (Map) assignment target details. + Nested schema for **target**: + * `id` - (String) The policy assignment target account id. + * `type` - (String) The target type. + * `template` - (Map) template details + Nested schema for **template**: + * `id` - (String) The policy assignment template id. + * `version` - (String) The orchestrator template version. + * `account_id` - (String) Enterprise account ID where template will be created. + +*Note*: Response will be in newer API format \ No newline at end of file