Skip to content

Commit

Permalink
firewall rule related resources change block type from Set to List
Browse files Browse the repository at this point in the history
  • Loading branch information
magodo committed Jan 18, 2022
1 parent 46f9b92 commit 6ba25d6
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 144 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import (
"github.com/hashicorp/terraform-provider-azurerm/internal/services/firewall/parse"
firewallValidate "github.com/hashicorp/terraform-provider-azurerm/internal/services/firewall/validate"
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk"
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/set"
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation"
"github.com/hashicorp/terraform-provider-azurerm/internal/timeouts"
"github.com/hashicorp/terraform-provider-azurerm/utils"
Expand Down Expand Up @@ -82,32 +81,28 @@ func resourceFirewallApplicationRuleCollection() *pluginsdk.Resource {
ValidateFunc: validation.NoZeroValues,
},
"source_addresses": {
Type: pluginsdk.TypeSet,
Type: pluginsdk.TypeList,
Optional: true,
Elem: &pluginsdk.Schema{Type: pluginsdk.TypeString},
Set: pluginsdk.HashString,
},
"source_ip_groups": {
Type: pluginsdk.TypeSet,
Type: pluginsdk.TypeList,
Optional: true,
Elem: &pluginsdk.Schema{Type: pluginsdk.TypeString},
Set: pluginsdk.HashString,
},
"description": {
Type: pluginsdk.TypeString,
Optional: true,
},
"fqdn_tags": {
Type: pluginsdk.TypeSet,
Type: pluginsdk.TypeList,
Optional: true,
Elem: &pluginsdk.Schema{Type: pluginsdk.TypeString},
Set: pluginsdk.HashString,
},
"target_fqdns": {
Type: pluginsdk.TypeSet,
Type: pluginsdk.TypeList,
Optional: true,
Elem: &pluginsdk.Schema{Type: pluginsdk.TypeString},
Set: pluginsdk.HashString,
},
"protocol": {
Type: pluginsdk.TypeList,
Expand Down Expand Up @@ -382,10 +377,10 @@ func expandFirewallApplicationRules(inputs []interface{}) (*[]network.AzureFirew

ruleName := rule["name"].(string)
ruleDescription := rule["description"].(string)
ruleSourceAddresses := rule["source_addresses"].(*pluginsdk.Set).List()
ruleSourceIpGroups := rule["source_ip_groups"].(*pluginsdk.Set).List()
ruleFqdnTags := rule["fqdn_tags"].(*pluginsdk.Set).List()
ruleTargetFqdns := rule["target_fqdns"].(*pluginsdk.Set).List()
ruleSourceAddresses := rule["source_addresses"].([]interface{})
ruleSourceIpGroups := rule["source_ip_groups"].([]interface{})
ruleFqdnTags := rule["fqdn_tags"].([]interface{})
ruleTargetFqdns := rule["target_fqdns"].([]interface{})

output := network.AzureFirewallApplicationRule{
Name: utils.String(ruleName),
Expand All @@ -397,8 +392,7 @@ func expandFirewallApplicationRules(inputs []interface{}) (*[]network.AzureFirew
}

ruleProtocols := make([]network.AzureFirewallApplicationRuleProtocol, 0)
protocols := rule["protocol"].([]interface{})
for _, v := range protocols {
for _, v := range rule["protocol"].([]interface{}) {
protocol := v.(map[string]interface{})
port := protocol["port"].(int)
ruleProtocol := network.AzureFirewallApplicationRuleProtocol{
Expand All @@ -423,8 +417,8 @@ func expandFirewallApplicationRules(inputs []interface{}) (*[]network.AzureFirew
return &outputs, nil
}

func flattenFirewallApplicationRuleCollectionRules(rules *[]network.AzureFirewallApplicationRule) []map[string]interface{} {
outputs := make([]map[string]interface{}, 0)
func flattenFirewallApplicationRuleCollectionRules(rules *[]network.AzureFirewallApplicationRule) []interface{} {
outputs := make([]interface{}, 0)
if rules == nil {
return outputs
}
Expand All @@ -438,16 +432,16 @@ func flattenFirewallApplicationRuleCollectionRules(rules *[]network.AzureFirewal
output["description"] = *ruleDescription
}
if ruleSourceAddresses := rule.SourceAddresses; ruleSourceAddresses != nil {
output["source_addresses"] = set.FromStringSlice(*ruleSourceAddresses)
output["source_addresses"] = utils.FlattenStringSlice(ruleSourceAddresses)
}
if ruleSourceIpGroups := rule.SourceIPGroups; ruleSourceIpGroups != nil {
output["source_ip_groups"] = set.FromStringSlice(*ruleSourceIpGroups)
output["source_ip_groups"] = utils.FlattenStringSlice(ruleSourceIpGroups)
}
if ruleFqdnTags := rule.FqdnTags; ruleFqdnTags != nil {
output["fqdn_tags"] = set.FromStringSlice(*ruleFqdnTags)
output["fqdn_tags"] = utils.FlattenStringSlice(ruleFqdnTags)
}
if ruleTargetFqdns := rule.TargetFqdns; ruleTargetFqdns != nil {
output["target_fqdns"] = set.FromStringSlice(*ruleTargetFqdns)
output["target_fqdns"] = utils.FlattenStringSlice(ruleTargetFqdns)
}
protocols := make([]map[string]interface{}, 0)
if ruleProtocols := rule.Protocols; ruleProtocols != nil {
Expand Down
50 changes: 21 additions & 29 deletions internal/services/firewall/firewall_nat_rule_collection_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import (
"github.com/hashicorp/terraform-provider-azurerm/internal/services/firewall/parse"
"github.com/hashicorp/terraform-provider-azurerm/internal/services/firewall/validate"
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk"
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/set"
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/validation"
"github.com/hashicorp/terraform-provider-azurerm/internal/timeouts"
"github.com/hashicorp/terraform-provider-azurerm/utils"
Expand Down Expand Up @@ -70,7 +69,7 @@ func resourceFirewallNatRuleCollection() *pluginsdk.Resource {
},

"rule": {
Type: pluginsdk.TypeSet,
Type: pluginsdk.TypeList,
Required: true,
MinItems: 1,
Elem: &pluginsdk.Resource{
Expand All @@ -93,31 +92,27 @@ func resourceFirewallNatRuleCollection() *pluginsdk.Resource {
Required: true,
},
"source_addresses": {
Type: pluginsdk.TypeSet,
Type: pluginsdk.TypeList,
Optional: true,
Elem: &pluginsdk.Schema{Type: pluginsdk.TypeString},
Set: pluginsdk.HashString,
},
"source_ip_groups": {
Type: pluginsdk.TypeSet,
Type: pluginsdk.TypeList,
Optional: true,
Elem: &pluginsdk.Schema{Type: pluginsdk.TypeString},
Set: pluginsdk.HashString,
},
"destination_addresses": {
Type: pluginsdk.TypeSet,
Type: pluginsdk.TypeList,
Required: true,
Elem: &pluginsdk.Schema{Type: pluginsdk.TypeString},
Set: pluginsdk.HashString,
},
"destination_ports": {
Type: pluginsdk.TypeSet,
Type: pluginsdk.TypeList,
Required: true,
Elem: &pluginsdk.Schema{Type: pluginsdk.TypeString},
Set: pluginsdk.HashString,
},
"protocols": {
Type: pluginsdk.TypeSet,
Type: pluginsdk.TypeList,
Required: true,
Elem: &pluginsdk.Schema{
Type: pluginsdk.TypeString,
Expand All @@ -128,7 +123,6 @@ func resourceFirewallNatRuleCollection() *pluginsdk.Resource {
string(network.AzureFirewallNetworkRuleProtocolUDP),
}, false),
},
Set: pluginsdk.HashString,
},
},
},
Expand Down Expand Up @@ -164,7 +158,7 @@ func resourceFirewallNatRuleCollectionCreateUpdate(d *pluginsdk.ResourceData, me
}

ruleCollections := *props.NatRuleCollections
natRules, err := expandFirewallNatRules(d.Get("rule").(*pluginsdk.Set))
natRules, err := expandFirewallNatRules(d.Get("rule").([]interface{}))
if err != nil {
return fmt.Errorf("expanding Firewall NAT Rules: %+v", err)
}
Expand Down Expand Up @@ -373,23 +367,22 @@ func resourceFirewallNatRuleCollectionDelete(d *pluginsdk.ResourceData, meta int
return nil
}

func expandFirewallNatRules(input *pluginsdk.Set) (*[]network.AzureFirewallNatRule, error) {
nwRules := input.List()
func expandFirewallNatRules(input []interface{}) (*[]network.AzureFirewallNatRule, error) {
rules := make([]network.AzureFirewallNatRule, 0)

for _, nwRule := range nwRules {
for _, nwRule := range input {
rule := nwRule.(map[string]interface{})

name := rule["name"].(string)
description := rule["description"].(string)

sourceAddresses := make([]string, 0)
for _, v := range rule["source_addresses"].(*pluginsdk.Set).List() {
for _, v := range rule["source_addresses"].([]interface{}) {
sourceAddresses = append(sourceAddresses, v.(string))
}

sourceIpGroups := make([]string, 0)
for _, v := range rule["source_ip_groups"].(*pluginsdk.Set).List() {
for _, v := range rule["source_ip_groups"].([]interface{}) {
sourceIpGroups = append(sourceIpGroups, v.(string))
}

Expand All @@ -398,12 +391,12 @@ func expandFirewallNatRules(input *pluginsdk.Set) (*[]network.AzureFirewallNatRu
}

destinationAddresses := make([]string, 0)
for _, v := range rule["destination_addresses"].(*pluginsdk.Set).List() {
for _, v := range rule["destination_addresses"].([]interface{}) {
destinationAddresses = append(destinationAddresses, v.(string))
}

destinationPorts := make([]string, 0)
for _, v := range rule["destination_ports"].(*pluginsdk.Set).List() {
for _, v := range rule["destination_ports"].([]interface{}) {
destinationPorts = append(destinationPorts, v.(string))
}

Expand All @@ -422,8 +415,7 @@ func expandFirewallNatRules(input *pluginsdk.Set) (*[]network.AzureFirewallNatRu
}

nrProtocols := make([]network.AzureFirewallNetworkRuleProtocol, 0)
protocols := rule["protocols"].(*pluginsdk.Set)
for _, v := range protocols.List() {
for _, v := range rule["protocols"].([]interface{}) {
s := network.AzureFirewallNetworkRuleProtocol(v.(string))
nrProtocols = append(nrProtocols, s)
}
Expand All @@ -434,8 +426,8 @@ func expandFirewallNatRules(input *pluginsdk.Set) (*[]network.AzureFirewallNatRu
return &rules, nil
}

func flattenFirewallNatRuleCollectionRules(rules *[]network.AzureFirewallNatRule) []map[string]interface{} {
outputs := make([]map[string]interface{}, 0)
func flattenFirewallNatRuleCollectionRules(rules *[]network.AzureFirewallNatRule) []interface{} {
outputs := make([]interface{}, 0)
if rules == nil {
return outputs
}
Expand All @@ -455,24 +447,24 @@ func flattenFirewallNatRuleCollectionRules(rules *[]network.AzureFirewallNatRule
output["translated_port"] = *rule.TranslatedPort
}
if rule.SourceAddresses != nil {
output["source_addresses"] = set.FromStringSlice(*rule.SourceAddresses)
output["source_addresses"] = utils.FlattenStringSlice(rule.SourceAddresses)
}
if rule.SourceIPGroups != nil {
output["source_ip_groups"] = set.FromStringSlice(*rule.SourceIPGroups)
output["source_ip_groups"] = utils.FlattenStringSlice(rule.SourceIPGroups)
}
if rule.DestinationAddresses != nil {
output["destination_addresses"] = set.FromStringSlice(*rule.DestinationAddresses)
output["destination_addresses"] = utils.FlattenStringSlice(rule.DestinationAddresses)
}
if rule.DestinationPorts != nil {
output["destination_ports"] = set.FromStringSlice(*rule.DestinationPorts)
output["destination_ports"] = utils.FlattenStringSlice(rule.DestinationPorts)
}
protocols := make([]string, 0)
if rule.Protocols != nil {
for _, protocol := range *rule.Protocols {
protocols = append(protocols, string(protocol))
}
}
output["protocols"] = set.FromStringSlice(protocols)
output["protocols"] = utils.FlattenStringSlice(&protocols)
outputs = append(outputs, output)
}
return outputs
Expand Down
Loading

0 comments on commit 6ba25d6

Please sign in to comment.