Repository: cloudflare/cloudflare-go
Pull request #1442 (2023-11-15 23:42:50)

Add Healthy field to Load Balancer Pool struct
## Description

Add support to LoadBalancerPool struct by adding `healthy` field. In api response to the pool endpoints I see that healthy field is available but not in the cloudflare-go library. 

## Has your change been tested?

Added unit test

## Screenshots (if appropriate):

## Types of changes

Add field to struct

What sort of change does your code introduce/modify?

- [ ] Bug fix (non-breaking change which fixes an issue)
- [X] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)

## Checklist:

- [X] My code follows the code style of this project.
- [X] My change requires a change to the documentation.
- [] I have updated the documentation accordingly.
- [X] I have added tests to cover my changes.
- [X] All new and existing tests passed.
- [] This change is using publicly documented in [cloudflare/api-schemas](https://github.com/cloudflare/api-schemas) 
      and relies on stable APIs.

[1]: https://help.github.com/articles/closing-issues-using-keywords/


github-actions[bot]: Oops! It looks like no changelog entry is attached to this PR. Please include a release note as described in https://github.com/cloudflare/cloudflare-go/blob/master/docs/changelog-process.md.

Example: 

~~~
```release-note:TYPE
Release note
```
~~~

If you do not require a release note to be included, please add the `workflow/skip-changelog-entry` label.
Ltadrian: @jacobbednarz would you know whats wrong with changelog check failing?
jacobbednarz: the PR number here is 1442 however the changelog is one behind at 1441. if you update the filename, the changelog checker will be happy.
Ltadrian: Thank you that worked!

Patch:
diff --git a/.changelog/1428.txt b/.changelog/1428.txt
deleted file mode 100644
index f0c3236ea..000000000
--- a/.changelog/1428.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:enhancement
-ip_access_rules: Add ListIPAccessRules() to list IP Access Rules
-```
diff --git a/.changelog/1441.txt b/.changelog/1441.txt
deleted file mode 100644
index 0901f1c8c..000000000
--- a/.changelog/1441.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-```release-note:bug
-load_balancing: Add support for virtual network id in origins
-```
\ No newline at end of file
diff --git a/.changelog/1442.txt b/.changelog/1442.txt
new file mode 100644
index 000000000..7cb0d2373
--- /dev/null
+++ b/.changelog/1442.txt
@@ -0,0 +1,3 @@
+```release-note:enhancement
+load_balancing: add healthy field to LoadBalancerPool
+```
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4bc2e615f..13f75dd26 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,12 +1,7 @@
 ## 0.82.0 (Unreleased)
 
-ENHANCEMENTS:
-
-* ip_access_rules: Add ListIPAccessRules() to list IP Access Rules ([#1428](https://github.com/cloudflare/cloudflare-go/issues/1428))
-
 BUG FIXES:
 
-* load_balancing: Add support for virtual network id in origins ([#1441](https://github.com/cloudflare/cloudflare-go/issues/1441))
 * per_hostname_tls_setting: use `buildURI` for defining the query parameters when sorting ([#1440](https://github.com/cloudflare/cloudflare-go/issues/1440))
 
 DEPENDENCIES:
diff --git a/ip_access_rules.go b/ip_access_rules.go
deleted file mode 100644
index 58d29cd08..000000000
--- a/ip_access_rules.go
+++ /dev/null
@@ -1,89 +0,0 @@
-package cloudflare
-
-import (
-	"context"
-	"fmt"
-	"net/http"
-
-	"github.com/goccy/go-json"
-)
-
-type ListIPAccessRulesOrderOption string
-type ListIPAccessRulesMatchOption string
-type IPAccessRulesModeOption string
-
-const (
-	IPAccessRulesConfigurationTarget  ListIPAccessRulesOrderOption = "configuration.target"
-	IPAccessRulesConfigurationValue   ListIPAccessRulesOrderOption = "configuration.value"
-	IPAccessRulesMatchOptionAll       ListIPAccessRulesMatchOption = "all"
-	IPAccessRulesMatchOptionAny       ListIPAccessRulesMatchOption = "any"
-	IPAccessRulesModeBlock            IPAccessRulesModeOption      = "block"
-	IPAccessRulesModeChallenge        IPAccessRulesModeOption      = "challenge"
-	IPAccessRulesModeJsChallenge      IPAccessRulesModeOption      = "js_challenge"
-	IPAccessRulesModeManagedChallenge IPAccessRulesModeOption      = "managed_challenge"
-	IPAccessRulesModeWhitelist        IPAccessRulesModeOption      = "whitelist"
-)
-
-type ListIPAccessRulesFilters struct {
-	Configuration IPAccessRuleConfiguration    `json:"configuration,omitempty"`
-	Match         ListIPAccessRulesMatchOption `json:"match,omitempty"`
-	Mode          IPAccessRulesModeOption      `json:"mode,omitempty"`
-	Notes         string                       `json:"notes,omitempty"`
-}
-
-type ListIPAccessRulesParams struct {
-	Direction string                       `url:"direction,omitempty"`
-	Filters   ListIPAccessRulesFilters     `url:"filters,omitempty"`
-	Order     ListIPAccessRulesOrderOption `url:"order,omitempty"`
-	PaginationOptions
-}
-
-type IPAccessRuleConfiguration struct {
-	Target string `json:"target,omitempty"`
-	Value  string `json:"value,omitempty"`
-}
-
-type IPAccessRule struct {
-	AllowedModes  []IPAccessRulesModeOption `json:"allowed_modes"`
-	Configuration IPAccessRuleConfiguration `json:"configuration"`
-	CreatedOn     string                    `json:"created_on"`
-	ID            string                    `json:"id"`
-	Mode          IPAccessRulesModeOption   `json:"mode"`
-	ModifiedOn    string                    `json:"modified_on"`
-	Notes         string                    `json:"notes"`
-}
-
-type ListIPAccessRulesResponse struct {
-	Result     []IPAccessRule `json:"result"`
-	ResultInfo `json:"result_info"`
-	Response
-}
-
-// ListIPAccessRules fetches IP Access rules of a zone/user/account. You can
-// filter the results using several optional parameters.
-//
-// API references:
-//   - https://developers.cloudflare.com/api/operations/ip-access-rules-for-a-user-list-ip-access-rules
-//   - https://developers.cloudflare.com/api/operations/ip-access-rules-for-a-zone-list-ip-access-rules
-//   - https://developers.cloudflare.com/api/operations/ip-access-rules-for-an-account-list-ip-access-rules
-func (api *API) ListIPAccessRules(ctx context.Context, rc *ResourceContainer, params ListIPAccessRulesParams) ([]IPAccessRule, *ResultInfo, error) {
-	if rc.Identifier == "" {
-		return []IPAccessRule{}, &ResultInfo{}, ErrMissingResourceIdentifier
-	}
-
-	uri := buildURI(fmt.Sprintf("/%s/%s/firewall/access_rules/rules", rc.Level, rc.Identifier), params)
-
-	res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil)
-	if err != nil {
-		return []IPAccessRule{}, &ResultInfo{}, err
-	}
-
-	result := ListIPAccessRulesResponse{}
-
-	err = json.Unmarshal(res, &result)
-	if err != nil {
-		return []IPAccessRule{}, &ResultInfo{}, fmt.Errorf("%s: %w", errUnmarshalError, err)
-	}
-
-	return result.Result, &result.ResultInfo, nil
-}
diff --git a/load_balancing.go b/load_balancing.go
index bb46f8333..d7b0ba81a 100644
--- a/load_balancing.go
+++ b/load_balancing.go
@@ -26,6 +26,7 @@ type LoadBalancerPool struct {
 	Longitude         *float32                    `json:"longitude,omitempty"`
 	LoadShedding      *LoadBalancerLoadShedding   `json:"load_shedding,omitempty"`
 	OriginSteering    *LoadBalancerOriginSteering `json:"origin_steering,omitempty"`
+	Healthy           *bool                       `json:"healthy,omitempty"`
 
 	// CheckRegions defines the geographic region(s) from where to run health-checks from - e.g. "WNAM", "WEU", "SAF", "SAM".
 	// Providing a null/empty value means "all regions", which may not be available to all plan types.
@@ -47,9 +48,6 @@ type LoadBalancerOrigin struct {
 	// weight is used to scale the origin's open connections.
 	Weight float64             `json:"weight"`
 	Header map[string][]string `json:"header"`
-	// The virtual network subnet ID the origin belongs in.
-	// Virtual network must also belong to the account.
-	VirtualNetworkID string `json:"virtual_network_id,omitempty"`
 }
 
 // LoadBalancerOriginSteering controls origin selection for new sessions and traffic without session affinity.


Test patch:
diff --git a/ip_access_rules_test.go b/ip_access_rules_test.go
deleted file mode 100644
index 4eba12443..000000000
--- a/ip_access_rules_test.go
+++ /dev/null
@@ -1,311 +0,0 @@
-package cloudflare
-
-import (
-	"context"
-	"fmt"
-	"net/http"
-	"testing"
-
-	"github.com/stretchr/testify/assert"
-)
-
-func TestListIPAccessRules(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodGet, r.Method, "Expected method 'GET', got %s", r.Method)
-		w.Header().Set("content-type", "application/json")
-		fmt.Fprintf(w, `{
-			"result":[
-						{
-							"allowed_modes": [
-								"whitelist",
-								"block",
-								"challenge",
-								"js_challenge",
-								"managed_challenge"
-							],
-							"configuration": {
-								"target": "ip",
-								"value": "198.51.100.1"
-							},
-							"created_on": "2014-01-01T05:20:00.12345Z",
-							"id": "f2d427378e7542acb295380d352e2ebd",
-							"mode": "whitelist",
-							"modified_on": "2014-01-01T05:20:00.12345Z",
-							"notes": "Whitelisting this IP."
-						},
-						{
-							"allowed_modes": [
-								"whitelist",
-								"block",
-								"challenge",
-								"js_challenge",
-								"managed_challenge"
-							],
-							"configuration": {
-								"target": "ip",
-								"value": "198.51.100.2"
-							},
-							"created_on": "2014-01-01T05:20:00.12345Z",
-							"id": "92f17202ed8bd63d69a66b86a49a8f6b",
-							"mode": "block",
-							"modified_on": "2014-01-01T05:20:00.12345Z",
-							"notes": "This rule is enabled because of an event that occurred on date X."
-						},
-						{
-							"allowed_modes": [
-								"whitelist",
-								"block",
-								"challenge",
-								"js_challenge",
-								"managed_challenge"
-							],
-							"configuration": {
-								"target": "ip",
-								"value": "198.51.100.3"
-							},
-							"created_on": "2014-01-01T05:20:00.12345Z",
-							"id": "4ae338944d6143378c3cf05a7c77d983",
-							"mode": "challenge",
-							"modified_on": "2014-01-01T05:20:00.12345Z",
-							"notes": "This rule is enabled because of an event that occurred on date Y."
-						},
-						{
-							"allowed_modes": [
-								"whitelist",
-								"block",
-								"challenge",
-								"js_challenge",
-								"managed_challenge"
-							],
-							"configuration": {
-								"target": "ip",
-								"value": "198.51.100.4"
-							},
-							"created_on": "2014-01-01T05:20:00.12345Z",
-							"id": "52161eb6af4241bb9d4b32394be72fdf",
-							"mode": "js_challenge",
-							"modified_on": "2014-01-01T05:20:00.12345Z",
-							"notes": "This rule is enabled because of an event that occurred on date Z."
-						},
-						{
-							"allowed_modes": [
-								"whitelist",
-								"block",
-								"challenge",
-								"js_challenge",
-								"managed_challenge"
-							],
-							"configuration": {
-								"target": "ip",
-								"value": "198.51.100.5"
-							},
-							"created_on": "2014-01-01T05:20:00.12345Z",
-							"id": "cbf4b7a5a2a24e59a03044d6d44ceb09",
-							"mode": "managed_challenge",
-							"modified_on": "2014-01-01T05:20:00.12345Z",
-							"notes": "This rule is enabled because we like the challenge page."
-						}
-			],
-			"success":true,
-			"errors":null,
-			"messages":null,
-			"result_info":{
-				"page":1,
-				"per_page":25,
-				"count":5,
-				"total_count":5
-			}
-		}
-		`)
-	}
-
-	mux.HandleFunc("/zones/d56084adb405e0b7e32c52321bf07be6/firewall/access_rules/rules", handler)
-	want := []IPAccessRule{
-		{
-			AllowedModes: []IPAccessRulesModeOption{
-				IPAccessRulesModeWhitelist,
-				IPAccessRulesModeBlock,
-				IPAccessRulesModeChallenge,
-				IPAccessRulesModeJsChallenge,
-				IPAccessRulesModeManagedChallenge,
-			},
-			ID: "f2d427378e7542acb295380d352e2ebd",
-			Configuration: IPAccessRuleConfiguration{
-				Target: "ip",
-				Value:  "198.51.100.1",
-			},
-			CreatedOn:  "2014-01-01T05:20:00.12345Z",
-			Mode:       "whitelist",
-			ModifiedOn: "2014-01-01T05:20:00.12345Z",
-			Notes:      "Whitelisting this IP.",
-		},
-		{
-			AllowedModes: []IPAccessRulesModeOption{
-				IPAccessRulesModeWhitelist,
-				IPAccessRulesModeBlock,
-				IPAccessRulesModeChallenge,
-				IPAccessRulesModeJsChallenge,
-				IPAccessRulesModeManagedChallenge,
-			},
-			ID: "92f17202ed8bd63d69a66b86a49a8f6b",
-			Configuration: IPAccessRuleConfiguration{
-				Target: "ip",
-				Value:  "198.51.100.2",
-			},
-			CreatedOn:  "2014-01-01T05:20:00.12345Z",
-			Mode:       "block",
-			ModifiedOn: "2014-01-01T05:20:00.12345Z",
-			Notes:      "This rule is enabled because of an event that occurred on date X.",
-		},
-		{
-			AllowedModes: []IPAccessRulesModeOption{
-				IPAccessRulesModeWhitelist,
-				IPAccessRulesModeBlock,
-				IPAccessRulesModeChallenge,
-				IPAccessRulesModeJsChallenge,
-				IPAccessRulesModeManagedChallenge,
-			},
-			ID: "4ae338944d6143378c3cf05a7c77d983",
-			Configuration: IPAccessRuleConfiguration{
-				Target: "ip",
-				Value:  "198.51.100.3",
-			},
-			CreatedOn:  "2014-01-01T05:20:00.12345Z",
-			Mode:       "challenge",
-			ModifiedOn: "2014-01-01T05:20:00.12345Z",
-			Notes:      "This rule is enabled because of an event that occurred on date Y.",
-		},
-		{
-			AllowedModes: []IPAccessRulesModeOption{
-				IPAccessRulesModeWhitelist,
-				IPAccessRulesModeBlock,
-				IPAccessRulesModeChallenge,
-				IPAccessRulesModeJsChallenge,
-				IPAccessRulesModeManagedChallenge,
-			},
-			ID: "52161eb6af4241bb9d4b32394be72fdf",
-			Configuration: IPAccessRuleConfiguration{
-				Target: "ip",
-				Value:  "198.51.100.4",
-			},
-			CreatedOn:  "2014-01-01T05:20:00.12345Z",
-			Mode:       "js_challenge",
-			ModifiedOn: "2014-01-01T05:20:00.12345Z",
-			Notes:      "This rule is enabled because of an event that occurred on date Z.",
-		},
-		{
-			AllowedModes: []IPAccessRulesModeOption{
-				IPAccessRulesModeWhitelist,
-				IPAccessRulesModeBlock,
-				IPAccessRulesModeChallenge,
-				IPAccessRulesModeJsChallenge,
-				IPAccessRulesModeManagedChallenge,
-			},
-			ID: "cbf4b7a5a2a24e59a03044d6d44ceb09",
-			Configuration: IPAccessRuleConfiguration{
-				Target: "ip",
-				Value:  "198.51.100.5",
-			},
-			CreatedOn:  "2014-01-01T05:20:00.12345Z",
-			Mode:       "managed_challenge",
-			ModifiedOn: "2014-01-01T05:20:00.12345Z",
-			Notes:      "This rule is enabled because we like the challenge page.",
-		},
-	}
-
-	actual, _, err := client.ListIPAccessRules(context.Background(),
-		ZoneIdentifier("d56084adb405e0b7e32c52321bf07be6"), ListIPAccessRulesParams{})
-
-	if assert.NoError(t, err) {
-		assert.Equal(t, want, actual)
-	}
-}
-
-func TestListIPAccessRulesWithParams(t *testing.T) {
-	setup()
-	defer teardown()
-
-	handler := func(w http.ResponseWriter, r *http.Request) {
-		assert.Equal(t, http.MethodGet, r.Method, "Expected method 'GET', got %s", r.Method)
-		w.Header().Set("content-type", "application/json")
-		fmt.Fprintf(w, `{
-			"result":[
-						{
-							"allowed_modes": [
-								"whitelist",
-								"block",
-								"challenge",
-								"js_challenge",
-								"managed_challenge"
-							],
-							"configuration": {
-								"target": "ip",
-								"value": "198.51.100.5"
-							},
-							"created_on": "2014-01-01T05:20:00.12345Z",
-							"id": "cbf4b7a5a2a24e59a03044d6d44ceb09",
-							"mode": "managed_challenge",
-							"modified_on": "2014-01-01T05:20:00.12345Z",
-							"notes": "This rule is enabled because we like the challenge page."
-						}
-			],
-			"success":true,
-			"errors":null,
-			"messages":null,
-			"result_info":{
-				"page":1,
-				"per_page":100,
-				"count":1,
-				"total_count":1
-			}
-		}
-		`)
-	}
-
-	mux.HandleFunc("/zones/d56084adb405e0b7e32c52321bf07be6/firewall/access_rules/rules", handler)
-	want := []IPAccessRule{
-		{
-			AllowedModes: []IPAccessRulesModeOption{
-				IPAccessRulesModeWhitelist,
-				IPAccessRulesModeBlock,
-				IPAccessRulesModeChallenge,
-				IPAccessRulesModeJsChallenge,
-				IPAccessRulesModeManagedChallenge,
-			},
-			ID: "cbf4b7a5a2a24e59a03044d6d44ceb09",
-			Configuration: IPAccessRuleConfiguration{
-				Target: "ip",
-				Value:  "198.51.100.5",
-			},
-			CreatedOn:  "2014-01-01T05:20:00.12345Z",
-			Mode:       "managed_challenge",
-			ModifiedOn: "2014-01-01T05:20:00.12345Z",
-			Notes:      "This rule is enabled because we like the challenge page.",
-		},
-	}
-
-	actual, _, err := client.ListIPAccessRules(context.Background(),
-		ZoneIdentifier("d56084adb405e0b7e32c52321bf07be6"), ListIPAccessRulesParams{
-			Direction: "asc",
-			Filters: ListIPAccessRulesFilters{
-				Configuration: IPAccessRuleConfiguration{
-					Target: "ip",
-				},
-				Match: "any",
-				Mode:  "manage_challenge",
-				Notes: "This rule is enabled because we like the challenge page.",
-			},
-			Order: IPAccessRulesConfigurationTarget,
-			PaginationOptions: PaginationOptions{
-				Page:    1,
-				PerPage: 100,
-			},
-		})
-
-	if assert.NoError(t, err) {
-		assert.Equal(t, want, actual)
-	}
-}
diff --git a/load_balancing_test.go b/load_balancing_test.go
index 0bc00b5f6..51d544b02 100644
--- a/load_balancing_test.go
+++ b/load_balancing_test.go
@@ -47,8 +47,7 @@ func TestCreateLoadBalancerPool(t *testing.T) {
                       "Host": [
                           "example.com"
                       ]
-                  },
-			      "virtual_network_id":"a5624d4e-044a-4ff0-b3e1-e2465353d4b4"
+                  }
                 }
               ],
               "notification_email": "someone@example.com",
@@ -91,14 +90,14 @@ func TestCreateLoadBalancerPool(t *testing.T) {
                       "Host": [
                           "example.com"
                       ]
-                  },
-			      "virtual_network_id":"a5624d4e-044a-4ff0-b3e1-e2465353d4b4"
+                  }
                 }
               ],
               "notification_email": "someone@example.com",
               "check_regions": [
                 "WEU"
-              ]
+              ],
+			  "healthy": true
             }
         }`)
 	}
@@ -139,13 +138,13 @@ func TestCreateLoadBalancerPool(t *testing.T) {
 				Header: map[string][]string{
 					"Host": {"example.com"},
 				},
-				VirtualNetworkID: "a5624d4e-044a-4ff0-b3e1-e2465353d4b4",
 			},
 		},
 		NotificationEmail: "someone@example.com",
 		CheckRegions: []string{
 			"WEU",
 		},
+		Healthy: BoolPtr(true),
 	}
 	request := LoadBalancerPool{
 		Description: "Primary data center - Provider XYZ",
@@ -172,7 +171,6 @@ func TestCreateLoadBalancerPool(t *testing.T) {
 				Header: map[string][]string{
 					"Host": {"example.com"},
 				},
-				VirtualNetworkID: "a5624d4e-044a-4ff0-b3e1-e2465353d4b4",
 			},
 		},
 		NotificationEmail: "someone@example.com",
@@ -290,8 +288,7 @@ func TestListLoadBalancerPools(t *testing.T) {
                         "name": "app-server-1",
                         "address": "198.51.100.1",
                         "enabled": true,
-                        "weight": 1,
-					    "virtual_network_id":"a5624d4e-044a-4ff0-b3e1-e2465353d4b4"
+                        "weight": 1
                       }
                     ],
                     "notification_email": "someone@example.com"
@@ -323,11 +320,10 @@ func TestListLoadBalancerPools(t *testing.T) {
 			},
 			Origins: []LoadBalancerOrigin{
 				{
-					Name:             "app-server-1",
-					Address:          "198.51.100.1",
-					Enabled:          true,
-					Weight:           1,
-					VirtualNetworkID: "a5624d4e-044a-4ff0-b3e1-e2465353d4b4",
+					Name:    "app-server-1",
+					Address: "198.51.100.1",
+					Enabled: true,
+					Weight:  1,
 				},
 			},
 			NotificationEmail: "someone@example.com",
@@ -377,8 +373,7 @@ func TestGetLoadBalancerPool(t *testing.T) {
                   "name": "app-server-1",
                   "address": "198.51.100.1",
                   "enabled": true,
-                  "weight": 1,
-				  "virtual_network_id":"a5624d4e-044a-4ff0-b3e1-e2465353d4b4"
+                  "weight": 1
                 }
               ],
               "notification_email": "someone@example.com"
@@ -402,11 +397,10 @@ func TestGetLoadBalancerPool(t *testing.T) {
 		},
 		Origins: []LoadBalancerOrigin{
 			{
-				Name:             "app-server-1",
-				Address:          "198.51.100.1",
-				Enabled:          true,
-				Weight:           1,
-				VirtualNetworkID: "a5624d4e-044a-4ff0-b3e1-e2465353d4b4",
+				Name:    "app-server-1",
+				Address: "198.51.100.1",
+				Enabled: true,
+				Weight:  1,
 			},
 		},
 		NotificationEmail: "someone@example.com",
@@ -491,8 +485,7 @@ func TestUpdateLoadBalancerPool(t *testing.T) {
                       "Host": [
                           "example.com"
                       ]
-                  },
-			      "virtual_network_id":"a5624d4e-044a-4ff0-b3e1-e2465353d4b4"
+                  }
                 }
               ],
               "notification_email": "nobody@example.com",
@@ -525,8 +518,7 @@ func TestUpdateLoadBalancerPool(t *testing.T) {
                       "Host": [
                           "example.com"
                       ]
-                  },
-			      "virtual_network_id":"a5624d4e-044a-4ff0-b3e1-e2465353d4b4"
+                  }
                 }
               ],
               "notification_email": "nobody@example.com",
@@ -559,7 +551,6 @@ func TestUpdateLoadBalancerPool(t *testing.T) {
 				Header: map[string][]string{
 					"Host": {"example.com"},
 				},
-				VirtualNetworkID: "a5624d4e-044a-4ff0-b3e1-e2465353d4b4",
 			},
 		},
 		NotificationEmail: "nobody@example.com",
@@ -584,7 +575,6 @@ func TestUpdateLoadBalancerPool(t *testing.T) {
 				Header: map[string][]string{
 					"Host": {"example.com"},
 				},
-				VirtualNetworkID: "a5624d4e-044a-4ff0-b3e1-e2465353d4b4",
 			},
 		},
 		NotificationEmail: "nobody@example.com",