Skip to content

Commit 13a9edb

Browse files
committed
add sync-state information
1 parent 30349dc commit 13a9edb

4 files changed

Lines changed: 116 additions & 0 deletions

File tree

aws/internal/service/networkfirewall/waiter/waiter.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ func FirewallUpdated(ctx context.Context, conn *networkfirewall.NetworkFirewall,
4040
Target: []string{networkfirewall.FirewallStatusValueReady},
4141
Refresh: FirewallUpdatedStatus(ctx, conn, arn),
4242
Timeout: FirewallTimeout,
43+
Delay: 30 * time.Second,
4344
}
4445

4546
outputRaw, err := stateConf.WaitForState()

aws/resource_aws_networkfirewall_firewall.go

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,42 @@ func resourceAwsNetworkFirewallFirewall() *schema.Resource {
5050
Type: schema.TypeBool,
5151
Optional: true,
5252
},
53+
"firewall_status": {
54+
Type: schema.TypeList,
55+
Computed: true,
56+
Elem: &schema.Resource{
57+
Schema: map[string]*schema.Schema{
58+
"sync_states": {
59+
Type: schema.TypeList,
60+
Computed: true,
61+
Elem: &schema.Resource{
62+
Schema: map[string]*schema.Schema{
63+
"availability_zone": {
64+
Type: schema.TypeString,
65+
Computed: true,
66+
},
67+
"attachment": {
68+
Type: schema.TypeList,
69+
Computed: true,
70+
Elem: &schema.Resource{
71+
Schema: map[string]*schema.Schema{
72+
"endpoint_id": {
73+
Type: schema.TypeString,
74+
Computed: true,
75+
},
76+
"subnet_id": {
77+
Type: schema.TypeString,
78+
Computed: true,
79+
},
80+
},
81+
},
82+
},
83+
},
84+
},
85+
},
86+
},
87+
},
88+
},
5389
"name": {
5490
Type: schema.TypeString,
5591
Required: true,
@@ -162,6 +198,7 @@ func resourceAwsNetworkFirewallFirewallRead(ctx context.Context, d *schema.Resou
162198
d.Set("name", firewall.FirewallName)
163199
d.Set("firewall_policy_arn", firewall.FirewallPolicyArn)
164200
d.Set("firewall_policy_change_protection", firewall.FirewallPolicyChangeProtection)
201+
d.Set("firewall_status", flattenNetworkFirewallFirewallStatus(output.FirewallStatus))
165202
d.Set("subnet_change_protection", firewall.SubnetChangeProtection)
166203
d.Set("update_token", output.UpdateToken)
167204
d.Set("vpc_id", firewall.VpcId)
@@ -380,6 +417,48 @@ func expandNetworkFirewallSubnetMappingIds(l []interface{}) []string {
380417
return ids
381418
}
382419

420+
func flattenNetworkFirewallFirewallStatus(status *networkfirewall.FirewallStatus) []interface{} {
421+
if status == nil {
422+
return nil
423+
}
424+
425+
m := map[string]interface{}{
426+
"sync_states": flattenNetworkFirewallSyncStates(status.SyncStates),
427+
}
428+
429+
return []interface{}{m}
430+
}
431+
432+
func flattenNetworkFirewallSyncStates(s map[string]*networkfirewall.SyncState) []interface{} {
433+
if s == nil {
434+
return nil
435+
}
436+
437+
syncStates := make([]interface{}, 0, len(s))
438+
for k, v := range s {
439+
m := map[string]interface{}{
440+
"availability_zone": k,
441+
"attachment": flattenNetworkFirewallSyncStateAttachment(v.Attachment),
442+
}
443+
syncStates = append(syncStates, m)
444+
}
445+
446+
return syncStates
447+
}
448+
449+
func flattenNetworkFirewallSyncStateAttachment(a *networkfirewall.Attachment) []interface{} {
450+
if a == nil {
451+
return nil
452+
}
453+
454+
m := map[string]interface{}{
455+
"endpoint_id": aws.StringValue(a.EndpointId),
456+
"subnet_id": aws.StringValue(a.SubnetId),
457+
}
458+
459+
return []interface{}{m}
460+
}
461+
383462
func flattenNetworkFirewallSubnetMappings(sm []*networkfirewall.SubnetMapping) []interface{} {
384463
mappings := make([]interface{}, 0, len(sm))
385464
for _, s := range sm {

aws/resource_aws_networkfirewall_firewall_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"log"
7+
"regexp"
78
"testing"
89

910
"github.com/aws/aws-sdk-go/aws"
@@ -97,11 +98,19 @@ func TestAccAwsNetworkFirewallFirewall_basic(t *testing.T) {
9798
resource.TestCheckResourceAttr(resourceName, "delete_protection", "false"),
9899
resource.TestCheckResourceAttr(resourceName, "description", ""),
99100
resource.TestCheckResourceAttrPair(resourceName, "firewall_policy_arn", policyResourceName, "arn"),
101+
resource.TestCheckResourceAttr(resourceName, "firewall_status.#", "1"),
102+
resource.TestCheckResourceAttr(resourceName, "firewall_status.0.sync_states.#", "1"),
103+
resource.TestCheckTypeSetElemAttrPair(resourceName, "firewall_status.0.sync_states.*.availability_zone", subnetResourceName, "availability_zone"),
104+
resource.TestMatchTypeSetElemNestedAttrs(resourceName, "firewall_status.0.sync_states.*", map[string]*regexp.Regexp{
105+
"attachment.0.endpoint_id": regexp.MustCompile(`vpce-`),
106+
}),
107+
resource.TestCheckTypeSetElemAttrPair(resourceName, "firewall_status.0.sync_states.*.attachment.0.subnet_id", subnetResourceName, "id"),
100108
resource.TestCheckResourceAttr(resourceName, "name", rName),
101109
resource.TestCheckResourceAttrPair(resourceName, "vpc_id", vpcResourceName, "id"),
102110
resource.TestCheckResourceAttr(resourceName, "subnet_mapping.#", "1"),
103111
tfawsresource.TestCheckTypeSetElemAttrPair(resourceName, "subnet_mapping.*.subnet_id", subnetResourceName, "id"),
104112
resource.TestCheckResourceAttr(resourceName, "tags.%", "0"),
113+
resource.TestCheckResourceAttrSet(resourceName, "update_token"),
105114
),
106115
},
107116
{
@@ -216,6 +225,13 @@ func TestAccAwsNetworkFirewallFirewall_subnetMappings_updateSubnet(t *testing.T)
216225
Config: testAccNetworkFirewallFirewall_updateSubnet(rName),
217226
Check: resource.ComposeTestCheckFunc(
218227
testAccCheckAwsNetworkFirewallFirewallExists(resourceName),
228+
resource.TestCheckResourceAttr(resourceName, "firewall_status.#", "1"),
229+
resource.TestCheckResourceAttr(resourceName, "firewall_status.0.sync_states.#", "1"),
230+
resource.TestCheckTypeSetElemAttrPair(resourceName, "firewall_status.0.sync_states.*.availability_zone", updateSubnetResourceName, "availability_zone"),
231+
resource.TestMatchTypeSetElemNestedAttrs(resourceName, "firewall_status.0.sync_states.*", map[string]*regexp.Regexp{
232+
"attachment.0.endpoint_id": regexp.MustCompile(`vpce-`),
233+
}),
234+
resource.TestCheckTypeSetElemAttrPair(resourceName, "firewall_status.0.sync_states.*.attachment.0.subnet_id", updateSubnetResourceName, "id"),
219235
resource.TestCheckResourceAttr(resourceName, "subnet_mapping.#", "1"),
220236
tfawsresource.TestCheckTypeSetElemAttrPair(resourceName, "subnet_mapping.*.subnet_id", updateSubnetResourceName, "id"),
221237
),
@@ -252,6 +268,12 @@ func TestAccAwsNetworkFirewallFirewall_subnetMappings_updateMultipleSubnets(t *t
252268
Config: testAccNetworkFirewallFirewall_updateMultipleSubnets(rName),
253269
Check: resource.ComposeTestCheckFunc(
254270
testAccCheckAwsNetworkFirewallFirewallExists(resourceName),
271+
resource.TestCheckResourceAttr(resourceName, "firewall_status.#", "1"),
272+
resource.TestCheckResourceAttr(resourceName, "firewall_status.0.sync_states.#", "2"),
273+
resource.TestCheckTypeSetElemAttrPair(resourceName, "firewall_status.0.sync_states.*.availability_zone", subnetResourceName, "availability_zone"),
274+
resource.TestCheckTypeSetElemAttrPair(resourceName, "firewall_status.0.sync_states.*.attachment.0.subnet_id", subnetResourceName, "id"),
275+
resource.TestCheckTypeSetElemAttrPair(resourceName, "firewall_status.0.sync_states.*.availability_zone", updateSubnetResourceName, "availability_zone"),
276+
resource.TestCheckTypeSetElemAttrPair(resourceName, "firewall_status.0.sync_states.*.attachment.0.subnet_id", updateSubnetResourceName, "id"),
255277
resource.TestCheckResourceAttr(resourceName, "subnet_mapping.#", "2"),
256278
tfawsresource.TestCheckTypeSetElemAttrPair(resourceName, "subnet_mapping.*.subnet_id", subnetResourceName, "id"),
257279
tfawsresource.TestCheckTypeSetElemAttrPair(resourceName, "subnet_mapping.*.subnet_id", updateSubnetResourceName, "id"),
@@ -261,6 +283,13 @@ func TestAccAwsNetworkFirewallFirewall_subnetMappings_updateMultipleSubnets(t *t
261283
Config: testAccNetworkFirewallFirewall_basic(rName),
262284
Check: resource.ComposeTestCheckFunc(
263285
testAccCheckAwsNetworkFirewallFirewallExists(resourceName),
286+
resource.TestCheckResourceAttr(resourceName, "firewall_status.#", "1"),
287+
resource.TestCheckResourceAttr(resourceName, "firewall_status.0.sync_states.#", "1"),
288+
resource.TestCheckTypeSetElemAttrPair(resourceName, "firewall_status.0.sync_states.*.availability_zone", subnetResourceName, "availability_zone"),
289+
resource.TestMatchTypeSetElemNestedAttrs(resourceName, "firewall_status.0.sync_states.*", map[string]*regexp.Regexp{
290+
"attachment.0.endpoint_id": regexp.MustCompile(`vpce-`),
291+
}),
292+
resource.TestCheckTypeSetElemAttrPair(resourceName, "firewall_status.0.sync_states.*.attachment.0.subnet_id", subnetResourceName, "id"),
264293
resource.TestCheckResourceAttr(resourceName, "subnet_mapping.#", "1"),
265294
tfawsresource.TestCheckTypeSetElemAttrPair(resourceName, "subnet_mapping.*.subnet_id", subnetResourceName, "id"),
266295
),

website/docs/r/networkfirewall_firewall.html.markdown

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ In addition to all arguments above, the following attributes are exported:
6464

6565
* `arn` - The Amazon Resource Name (ARN) that identifies the firewall.
6666

67+
* `firewall_status` - Nested list of information about the current status of the firewall.
68+
* `sync_states` - List of subnets configured for use by the firewall.
69+
* `attachment` - Nested list describing the attachment status of the firewall's association with a single VPC subnet.
70+
* `endpoint_id` - The identifier of the firewall endpoint that AWS Network Firewall has instantiated in the subnet. You use this to identify the firewall endpoint in the VPC route tables, when you redirect the VPC traffic through the endpoint.
71+
* `subnet_id` - The unique identifier of the subnet that you've specified to be used for a firewall endpoint.
72+
* `availability_zone` - The Availability Zone where the subnet is configured.
73+
6774
* `update_token` - A string token used when updating a firewall.
6875

6976
## Import

0 commit comments

Comments
 (0)