Skip to content

Commit

Permalink
Add a StateChange to the firewall to wait for network be ready. (#169)
Browse files Browse the repository at this point in the history
  • Loading branch information
alejandrojnm committed Mar 24, 2023
1 parent bde1e27 commit a30aa33
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
26 changes: 24 additions & 2 deletions civo/resource_firewall.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,31 @@ func resourceFirewallCreate(ctx context.Context, d *schema.ResourceData, m inter
return diag.Errorf("[ERR] an error occurred while trying to build the firewall request, %s", err)
}

firewall, err := apiClient.NewFirewall(firewallConfig)
// Create StateChangeConf to wait for the firewall to be created
createStateConf := &resource.StateChangeConf{
Pending: []string{"failed"},
Target: []string{"success"},
Refresh: func() (interface{}, string, error) {
resp, err := apiClient.NewFirewall(firewallConfig)
if err != nil {
return 0, "", err
}
return resp, string(resp.Result), nil
},
Timeout: 60 * time.Minute,
Delay: 3 * time.Second,
MinTimeout: 3 * time.Second,
NotFoundChecks: 10,
}
_, err = createStateConf.WaitForStateContext(context.Background())
if err != nil {
return diag.Errorf("[ERR] failed to create a new firewall: %s, err: %s", firewallConfig.Name, err)
}

// Get the firewall
firewall, err := apiClient.FindFirewall(firewallConfig.Name)
if err != nil {
return diag.Errorf("[ERR] failed to create a new firewall: %s", err)
return diag.Errorf("[ERR] error retrieving firewall: %s, err: %s", firewallConfig.Name, err)
}

d.SetId(firewall.ID)
Expand Down
6 changes: 3 additions & 3 deletions civo/resource_firewall_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ func testAccCheckCivoFirewallConfigBasic(name string) string {
resource "civo_firewall" "foobar" {
name = "%s"
create_default_rules = true
region = "FAKE"
region = "LOCAL"
}`, name)
}

Expand All @@ -185,7 +185,7 @@ func testAccCheckCivoFirewallConfigWithIngressEgress(name string) string {
resource "civo_firewall" "foobar" {
name = "%s"
create_default_rules = false
region = "FAKE"
region = "LOCAL"
ingress_rule {
label = "www https"
Expand All @@ -210,6 +210,6 @@ func testAccCheckCivoFirewallConfigUpdates(name string) string {
resource "civo_firewall" "foobar" {
name = "%s"
create_default_rules = true
region = "FAKE"
region = "LOCAL"
}`, name)
}

0 comments on commit a30aa33

Please sign in to comment.