Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix/use parser for user assigned identity #10105

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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 resourceArmLinuxVirtualMachineScaleSetRead(d *schema.ResourceData, meta int
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 resourceArmVirtualMachine() *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 resourceArmVirtualMachineRead(d *schema.ResourceData, meta interface{}) err
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