Skip to content

Commit

Permalink
Merge pull request #10105 from sharebear/fix/use_parser_for_user_assi…
Browse files Browse the repository at this point in the history
…gned_identity

fix/use parser for user assigned identity
  • Loading branch information
tombuildsstuff committed Jan 13, 2021
2 parents ac0aa54 + 69b84e3 commit 1befe5e
Show file tree
Hide file tree
Showing 24 changed files with 219 additions and 81 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,10 @@ func dataSourceApiManagementRead(d *schema.ResourceData, meta interface{}) error
d.Set("location", azure.NormalizeLocation(*location))
}

identity := flattenAzureRmApiManagementMachineIdentity(resp.Identity)
identity, err := flattenAzureRmApiManagementMachineIdentity(resp.Identity)
if err != nil {
return err
}
if err := d.Set("identity", identity); err != nil {
return fmt.Errorf("setting `identity`: %+v", err)
}
Expand Down
21 changes: 15 additions & 6 deletions azurerm/internal/services/apimanagement/api_management_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import (
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/apimanagement/parse"
apimValidate "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/apimanagement/validate"
msiparse "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/parse"
msivalidate "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/validate"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tags"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/timeouts"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils"
Expand Down Expand Up @@ -111,7 +113,7 @@ func resourceApiManagementService() *schema.Resource {
MinItems: 1,
Elem: &schema.Schema{
Type: schema.TypeString,
ValidateFunc: validation.NoZeroValues,
ValidateFunc: msivalidate.UserAssignedIdentityID,
},
},
},
Expand Down Expand Up @@ -680,7 +682,10 @@ func resourceApiManagementServiceRead(d *schema.ResourceData, meta interface{})
d.Set("location", azure.NormalizeLocation(*location))
}

identity := flattenAzureRmApiManagementMachineIdentity(resp.Identity)
identity, err := flattenAzureRmApiManagementMachineIdentity(resp.Identity)
if err != nil {
return err
}
if err := d.Set("identity", identity); err != nil {
return fmt.Errorf("setting `identity`: %+v", err)
}
Expand Down Expand Up @@ -1108,9 +1113,9 @@ func expandAzureRmApiManagementIdentity(vs []interface{}) (*apimanagement.Servic
return &managedServiceIdentity, nil
}

func flattenAzureRmApiManagementMachineIdentity(identity *apimanagement.ServiceIdentity) []interface{} {
func flattenAzureRmApiManagementMachineIdentity(identity *apimanagement.ServiceIdentity) ([]interface{}, error) {
if identity == nil || identity.Type == apimanagement.None {
return make([]interface{}, 0)
return make([]interface{}, 0), nil
}

result := make(map[string]interface{})
Expand All @@ -1127,12 +1132,16 @@ func flattenAzureRmApiManagementMachineIdentity(identity *apimanagement.ServiceI
identityIds := make([]interface{}, 0)
if identity.UserAssignedIdentities != nil {
for key := range identity.UserAssignedIdentities {
identityIds = append(identityIds, key)
parsedId, err := msiparse.UserAssignedIdentityID(key)
if err != nil {
return nil, err
}
identityIds = append(identityIds, parsedId.ID())
}
result["identity_ids"] = schema.NewSet(schema.HashString, identityIds)
}

return []interface{}{result}
return []interface{}{result}, nil
}

func expandAzureRmApiManagementSkuName(d *schema.ResourceData) *apimanagement.ServiceSkuProperties {
Expand Down
15 changes: 10 additions & 5 deletions azurerm/internal/services/blueprints/blueprint.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/helper/validation"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/suppress"
msiparse "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/parse"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/validate"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils"
)
Expand Down Expand Up @@ -152,15 +153,19 @@ func expandArmBlueprintAssignmentIdentity(input []interface{}) (*blueprint.Manag
return &identity, nil
}

func flattenArmBlueprintAssignmentIdentity(input *blueprint.ManagedServiceIdentity) []interface{} {
func flattenArmBlueprintAssignmentIdentity(input *blueprint.ManagedServiceIdentity) ([]interface{}, error) {
if input == nil {
return []interface{}{}
return []interface{}{}, nil
}

identityIds := make([]string, 0)
if input.UserAssignedIdentities != nil {
for k := range input.UserAssignedIdentities {
identityIds = append(identityIds, k)
for key := range input.UserAssignedIdentities {
parsedId, err := msiparse.UserAssignedIdentityID(key)
if err != nil {
return nil, err
}
identityIds = append(identityIds, parsedId.ID())
}
}

Expand All @@ -181,7 +186,7 @@ func flattenArmBlueprintAssignmentIdentity(input *blueprint.ManagedServiceIdenti
"principal_id": principalId,
"tenant_id": tenantId,
},
}
}, nil
}

func flattenArmBlueprintAssignmentParameters(input map[string]*blueprint.ParameterValue) (string, error) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,11 @@ func resourceBlueprintAssignmentRead(d *schema.ResourceData, meta interface{}) e
}

if resp.Identity != nil {
d.Set("identity", flattenArmBlueprintAssignmentIdentity(resp.Identity))
identity, err := flattenArmBlueprintAssignmentIdentity(resp.Identity)
if err != nil {
return err
}
d.Set("identity", identity)
}

if resp.AssignmentProperties != nil {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -529,7 +529,11 @@ func resourceLinuxVirtualMachineRead(d *schema.ResourceData, meta interface{}) e
d.Set("location", azure.NormalizeLocation(*location))
}

if err := d.Set("identity", flattenVirtualMachineIdentity(resp.Identity)); err != nil {
identity, err := flattenVirtualMachineIdentity(resp.Identity)
if err != nil {
return err
}
if err := d.Set("identity", identity); err != nil {
return fmt.Errorf("setting `identity`: %+v", err)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -862,7 +862,11 @@ func resourceLinuxVirtualMachineScaleSetRead(d *schema.ResourceData, meta interf
d.Set("instances", instances)
d.Set("sku", skuName)

if err := d.Set("identity", FlattenVirtualMachineScaleSetIdentity(resp.Identity)); err != nil {
identity, err := FlattenVirtualMachineScaleSetIdentity(resp.Identity)
if err != nil {
return err
}
if err := d.Set("identity", identity); err != nil {
return fmt.Errorf("Error setting `identity`: %+v", err)
}

Expand Down
20 changes: 13 additions & 7 deletions azurerm/internal/services/compute/virtual_machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import (
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/suppress"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/compute/parse"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/compute/validate"
msiparse "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/parse"
msivalidate "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/validate"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils"
)

Expand Down Expand Up @@ -86,8 +88,8 @@ func virtualMachineIdentitySchema() *schema.Schema {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
// TODO: validation for a UAI which requires an ID Parser/Validator
Type: schema.TypeString,
ValidateFunc: msivalidate.UserAssignedIdentityID,
},
},

Expand Down Expand Up @@ -136,15 +138,19 @@ func expandVirtualMachineIdentity(input []interface{}) (*compute.VirtualMachineI
return &identity, nil
}

func flattenVirtualMachineIdentity(input *compute.VirtualMachineIdentity) []interface{} {
func flattenVirtualMachineIdentity(input *compute.VirtualMachineIdentity) ([]interface{}, error) {
if input == nil || input.Type == compute.ResourceIdentityTypeNone {
return []interface{}{}
return []interface{}{}, nil
}

identityIds := make([]string, 0)
if input.UserAssignedIdentities != nil {
for k := range input.UserAssignedIdentities {
identityIds = append(identityIds, k)
for key := range input.UserAssignedIdentities {
parsedId, err := msiparse.UserAssignedIdentityID(key)
if err != nil {
return nil, err
}
identityIds = append(identityIds, parsedId.ID())
}
}

Expand All @@ -165,7 +171,7 @@ func flattenVirtualMachineIdentity(input *compute.VirtualMachineIdentity) []inte
"principal_id": principalId,
"tenant_id": tenantId,
},
}
}, nil
}

func expandVirtualMachineNetworkInterfaceIDs(input []interface{}) []compute.NetworkInterfaceReference {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,11 @@ func dataSourceArmVirtualMachineRead(d *schema.ResourceData, meta interface{}) e

d.SetId(*resp.ID)

if err := d.Set("identity", flattenVirtualMachineIdentity(resp.Identity)); err != nil {
identity, err := flattenVirtualMachineIdentity(resp.Identity)
if err != nil {
return err
}
if err := d.Set("identity", identity); err != nil {
return fmt.Errorf("setting `identity`: %+v", err)
}

Expand Down
22 changes: 16 additions & 6 deletions azurerm/internal/services/compute/virtual_machine_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import (
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/validate"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/clients"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/locks"
msiparse "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/parse"
msivalidate "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/validate"
intStor "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/storage/client"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/tags"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/timeouts"
Expand Down Expand Up @@ -153,7 +155,7 @@ func resourceVirtualMachine() *schema.Resource {
MinItems: 1,
Elem: &schema.Schema{
Type: schema.TypeString,
ValidateFunc: validation.NoZeroValues,
ValidateFunc: msivalidate.UserAssignedIdentityID,
},
},
},
Expand Down Expand Up @@ -816,7 +818,11 @@ func resourceVirtualMachineRead(d *schema.ResourceData, meta interface{}) error
return fmt.Errorf("Error setting `plan`: %#v", err)
}

if err := d.Set("identity", flattenAzureRmVirtualMachineIdentity(resp.Identity)); err != nil {
identity, err := flattenAzureRmVirtualMachineIdentity(resp.Identity)
if err != nil {
return err
}
if err := d.Set("identity", identity); err != nil {
return fmt.Errorf("Error setting `identity`: %+v", err)
}

Expand Down Expand Up @@ -1131,9 +1137,9 @@ func flattenAzureRmVirtualMachineImageReference(image *compute.ImageReference) [
return []interface{}{result}
}

func flattenAzureRmVirtualMachineIdentity(identity *compute.VirtualMachineIdentity) []interface{} {
func flattenAzureRmVirtualMachineIdentity(identity *compute.VirtualMachineIdentity) ([]interface{}, error) {
if identity == nil {
return make([]interface{}, 0)
return make([]interface{}, 0), nil
}

result := make(map[string]interface{})
Expand All @@ -1153,12 +1159,16 @@ func flattenAzureRmVirtualMachineIdentity(identity *compute.VirtualMachineIdenti
}
*/
for key := range identity.UserAssignedIdentities {
identityIds = append(identityIds, key)
parsedId, err := msiparse.UserAssignedIdentityID(key)
if err != nil {
return nil, err
}
identityIds = append(identityIds, parsedId.ID())
}
}
result["identity_ids"] = identityIds

return []interface{}{result}
return []interface{}{result}, nil
}

func flattenAzureRmVirtualMachineDiagnosticsProfile(profile *compute.BootDiagnostics) []interface{} {
Expand Down
15 changes: 10 additions & 5 deletions azurerm/internal/services/compute/virtual_machine_scale_set.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure"
azValidate "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/validate"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/compute/validate"
msiparse "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/parse"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils"
)

Expand Down Expand Up @@ -129,15 +130,19 @@ func ExpandVirtualMachineScaleSetIdentity(input []interface{}) (*compute.Virtual
return &identity, nil
}

func FlattenVirtualMachineScaleSetIdentity(input *compute.VirtualMachineScaleSetIdentity) []interface{} {
func FlattenVirtualMachineScaleSetIdentity(input *compute.VirtualMachineScaleSetIdentity) ([]interface{}, error) {
if input == nil || input.Type == compute.ResourceIdentityTypeNone {
return []interface{}{}
return []interface{}{}, nil
}

identityIds := make([]string, 0)
if input.UserAssignedIdentities != nil {
for k := range input.UserAssignedIdentities {
identityIds = append(identityIds, k)
for key := range input.UserAssignedIdentities {
parsedId, err := msiparse.UserAssignedIdentityID(key)
if err != nil {
return nil, err
}
identityIds = append(identityIds, parsedId.ID())
}
}

Expand All @@ -152,7 +157,7 @@ func FlattenVirtualMachineScaleSetIdentity(input *compute.VirtualMachineScaleSet
"identity_ids": identityIds,
"principal_id": principalId,
},
}
}, nil
}

func VirtualMachineScaleSetNetworkInterfaceSchema() *schema.Schema {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,11 @@ func dataSourceArmVirtualMachineScaleSetRead(d *schema.ResourceData, meta interf
}
d.SetId(*resp.ID)

if err := d.Set("identity", FlattenVirtualMachineScaleSetIdentity(resp.Identity)); err != nil {
identity, err := FlattenVirtualMachineScaleSetIdentity(resp.Identity)
if err != nil {
return err
}
if err := d.Set("identity", identity); err != nil {
return fmt.Errorf("setting `identity`: %+v", err)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import (
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/suppress"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/tf"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/validate"
msiparse "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/parse"
msivalidate "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/msi/validate"
"github.com/terraform-providers/terraform-provider-azurerm/azurerm/utils"
)

Expand Down Expand Up @@ -81,7 +83,8 @@ func resourceArmVirtualMachineScaleSet() *schema.Resource {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
Type: schema.TypeString,
ValidateFunc: msivalidate.UserAssignedIdentityID,
},
},
"principal_id": {
Expand Down Expand Up @@ -965,7 +968,10 @@ func resourceArmVirtualMachineScaleSetRead(d *schema.ResourceData, meta interfac
return fmt.Errorf("[DEBUG] Error setting `sku`: %#v", err)
}

flattenedIdentity := flattenAzureRmVirtualMachineScaleSetIdentity(resp.Identity)
flattenedIdentity, err := flattenAzureRmVirtualMachineScaleSetIdentity(resp.Identity)
if err != nil {
return err
}
if err := d.Set("identity", flattenedIdentity); err != nil {
return fmt.Errorf("[DEBUG] Error setting `identity`: %+v", err)
}
Expand Down Expand Up @@ -1115,9 +1121,9 @@ func resourceArmVirtualMachineScaleSetDelete(d *schema.ResourceData, meta interf
return nil
}

func flattenAzureRmVirtualMachineScaleSetIdentity(identity *compute.VirtualMachineScaleSetIdentity) []interface{} {
func flattenAzureRmVirtualMachineScaleSetIdentity(identity *compute.VirtualMachineScaleSetIdentity) ([]interface{}, error) {
if identity == nil {
return make([]interface{}, 0)
return make([]interface{}, 0), nil
}

result := make(map[string]interface{})
Expand All @@ -1129,12 +1135,16 @@ func flattenAzureRmVirtualMachineScaleSetIdentity(identity *compute.VirtualMachi
identityIds := make([]string, 0)
if identity.UserAssignedIdentities != nil {
for key := range identity.UserAssignedIdentities {
identityIds = append(identityIds, key)
parsedId, err := msiparse.UserAssignedIdentityID(key)
if err != nil {
return nil, err
}
identityIds = append(identityIds, parsedId.ID())
}
}
result["identity_ids"] = identityIds

return []interface{}{result}
return []interface{}{result}, nil
}

func flattenAzureRmVirtualMachineScaleSetOsProfileLinuxConfig(config *compute.LinuxConfiguration) []interface{} {
Expand Down

0 comments on commit 1befe5e

Please sign in to comment.