From 3119632583bfdeb2749b0f87d8578492039528b7 Mon Sep 17 00:00:00 2001 From: Ivan Sabelnikov Date: Fri, 27 May 2022 22:06:52 +0300 Subject: [PATCH 1/2] Add vnet param to routes Related issues: https://github.com/cloudflare/cloudflare-go/issues/911 https://github.com/cloudflare/terraform-provider-cloudflare/issues/1605 --- tunnel_routes.go | 58 ++++++++++++++++++++++------------------ tunnel_routes_test.go | 61 +++++++++++++++++++++++++------------------ 2 files changed, 67 insertions(+), 52 deletions(-) diff --git a/tunnel_routes.go b/tunnel_routes.go index 96a9ff57a..8c97262cf 100644 --- a/tunnel_routes.go +++ b/tunnel_routes.go @@ -13,47 +13,53 @@ import ( // TunnelRoute is the full record for a route. type TunnelRoute struct { - Network string `json:"network"` - TunnelID string `json:"tunnel_id"` - TunnelName string `json:"tunnel_name"` - Comment string `json:"comment"` - CreatedAt *time.Time `json:"created_at"` - DeletedAt *time.Time `json:"deleted_at"` + Network string `json:"network"` + TunnelID string `json:"tunnel_id"` + TunnelName string `json:"tunnel_name"` + Comment string `json:"comment"` + CreatedAt *time.Time `json:"created_at"` + DeletedAt *time.Time `json:"deleted_at"` + VirtualNetworkID string `json:"virtual_network_id"` } type TunnelRoutesListParams struct { - AccountID string - TunnelID string `url:"tunnel_id,omitempty"` - Comment string `url:"comment,omitempty"` - IsDeleted *bool `url:"is_deleted,omitempty"` - NetworkSubset string `url:"network_subset,omitempty"` - NetworkSuperset string `url:"network_superset,omitempty"` - ExistedAt *time.Time `url:"existed_at,omitempty"` + AccountID string + TunnelID string `url:"tunnel_id,omitempty"` + Comment string `url:"comment,omitempty"` + IsDeleted *bool `url:"is_deleted,omitempty"` + NetworkSubset string `url:"network_subset,omitempty"` + NetworkSuperset string `url:"network_superset,omitempty"` + ExistedAt *time.Time `url:"existed_at,omitempty"` + VirtualNetworkID string `url:"virtual_network_id,omitempty"` PaginationOptions } type TunnelRoutesCreateParams struct { - AccountID string `json:"-"` - Network string `json:"-"` - TunnelID string `json:"tunnel_id"` - Comment string `json:"comment,omitempty"` + AccountID string `json:"-"` + Network string `json:"-"` + TunnelID string `json:"tunnel_id"` + Comment string `json:"comment,omitempty"` + VirtualNetworkID string `json:"virtual_network_id,omitempty"` } type TunnelRoutesUpdateParams struct { - AccountID string `json:"-"` - Network string `json:"network"` - TunnelID string `json:"tunnel_id"` - Comment string `json:"comment,omitempty"` + AccountID string `json:"-"` + Network string `json:"network"` + TunnelID string `json:"tunnel_id"` + Comment string `json:"comment,omitempty"` + VirtualNetworkID string `json:"virtual_network_id,omitempty"` } type TunnelRoutesForIPParams struct { - AccountID string `json:"-"` - Network string `json:"-"` + AccountID string `json:"-"` + Network string `json:"-"` + VirtualNetworkID string `url:"virtual_network_id,omitempty"` } type TunnelRoutesDeleteParams struct { - AccountID string `json:"-"` - Network string `json:"-"` + AccountID string `json:"-"` + Network string `json:"-"` + VirtualNetworkID string `url:"virtual_network_id,omitempty"` } // tunnelRouteListResponse is the API response for listing tunnel routes. @@ -96,7 +102,7 @@ func (api *API) ListTunnelRoutes(ctx context.Context, params TunnelRoutesListPar func (api *API) GetTunnelRouteForIP(ctx context.Context, params TunnelRoutesForIPParams) (TunnelRoute, error) { uri := fmt.Sprintf("/%s/%s/teamnet/routes/ip/%s", AccountRouteRoot, params.AccountID, params.Network) - responseBody, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil) + responseBody, err := api.makeRequestContext(ctx, http.MethodGet, uri, params) if err != nil { return TunnelRoute{}, err } diff --git a/tunnel_routes_test.go b/tunnel_routes_test.go index 13d7cb5fd..df6174a42 100644 --- a/tunnel_routes_test.go +++ b/tunnel_routes_test.go @@ -29,7 +29,8 @@ func TestListTunnelRoutes(t *testing.T) { "tunnel_name": "blog", "comment": "Example comment for this route", "created_at": "2021-01-25T18:22:34.317854Z", - "deleted_at": "2021-01-25T18:22:34.317854Z" + "deleted_at": "2021-01-25T18:22:34.317854Z", + "virtual_network_id": "9f322de4-5988-4945-b770-f1d6ac200f86" } ] }`) @@ -46,6 +47,7 @@ func TestListTunnelRoutes(t *testing.T) { "Example comment for this route", &ts, &ts, + "9f322de4-5988-4945-b770-f1d6ac200f86", }, } @@ -74,7 +76,8 @@ func TestTunnelRouteForIP(t *testing.T) { "tunnel_name": "blog", "comment": "Example comment for this route", "created_at": "2021-01-25T18:22:34.317854Z", - "deleted_at": "2021-01-25T18:22:34.317854Z" + "deleted_at": "2021-01-25T18:22:34.317854Z", + "virtual_network_id": "9f322de4-5988-4945-b770-f1d6ac200f86" } }`) } @@ -83,12 +86,13 @@ func TestTunnelRouteForIP(t *testing.T) { ts, _ := time.Parse(time.RFC3339Nano, "2021-01-25T18:22:34.317854Z") want := TunnelRoute{ - Network: "ff01::/32", - TunnelID: "f70ff985-a4ef-4643-bbbc-4a0ed4fc8415", - TunnelName: "blog", - Comment: "Example comment for this route", - CreatedAt: &ts, - DeletedAt: &ts, + Network: "ff01::/32", + TunnelID: "f70ff985-a4ef-4643-bbbc-4a0ed4fc8415", + TunnelName: "blog", + Comment: "Example comment for this route", + CreatedAt: &ts, + DeletedAt: &ts, + VirtualNetworkID: "9f322de4-5988-4945-b770-f1d6ac200f86", } got, err := client.GetTunnelRouteForIP(context.Background(), TunnelRoutesForIPParams{AccountID: testAccountID, Network: "10.1.0.137"}) @@ -115,7 +119,8 @@ func TestCreateTunnelRoute(t *testing.T) { "tunnel_name": "blog", "comment": "Example comment for this route", "created_at": "2021-01-25T18:22:34.317854Z", - "deleted_at": "2021-01-25T18:22:34.317854Z" + "deleted_at": "2021-01-25T18:22:34.317854Z", + "virtual_network_id": "9f322de4-5988-4945-b770-f1d6ac200f86" } }`) } @@ -124,15 +129,16 @@ func TestCreateTunnelRoute(t *testing.T) { ts, _ := time.Parse(time.RFC3339Nano, "2021-01-25T18:22:34.317854Z") want := TunnelRoute{ - Network: "10.0.0.0/16", - TunnelID: "f70ff985-a4ef-4643-bbbc-4a0ed4fc8415", - TunnelName: "blog", - Comment: "Example comment for this route", - CreatedAt: &ts, - DeletedAt: &ts, + Network: "10.0.0.0/16", + TunnelID: "f70ff985-a4ef-4643-bbbc-4a0ed4fc8415", + TunnelName: "blog", + Comment: "Example comment for this route", + CreatedAt: &ts, + DeletedAt: &ts, + VirtualNetworkID: "9f322de4-5988-4945-b770-f1d6ac200f86", } - tunnel, err := client.CreateTunnelRoute(context.Background(), TunnelRoutesCreateParams{AccountID: testAccountID, TunnelID: testTunnelID, Network: "10.0.0.0/16", Comment: "foo"}) + tunnel, err := client.CreateTunnelRoute(context.Background(), TunnelRoutesCreateParams{AccountID: testAccountID, TunnelID: testTunnelID, Network: "10.0.0.0/16", Comment: "foo", VirtualNetworkID: "9f322de4-5988-4945-b770-f1d6ac200f86"}) if assert.NoError(t, err) { assert.Equal(t, want, tunnel) } @@ -161,23 +167,25 @@ func TestUpdateTunnelRoute(t *testing.T) { "tunnel_name": "blog", "comment": "Example comment for this route", "created_at": "2021-01-25T18:22:34.317854Z", - "deleted_at": "2021-01-25T18:22:34.317854Z" + "deleted_at": "2021-01-25T18:22:34.317854Z", + "virtual_network_id": "9f322de4-5988-4945-b770-f1d6ac200f86" } }`) } ts, _ := time.Parse(time.RFC3339Nano, "2021-01-25T18:22:34.317854Z") want := TunnelRoute{ - Network: "10.0.0.0/16", - TunnelID: "f70ff985-a4ef-4643-bbbc-4a0ed4fc8415", - TunnelName: "blog", - Comment: "Example comment for this route", - CreatedAt: &ts, - DeletedAt: &ts, + Network: "10.0.0.0/16", + TunnelID: "f70ff985-a4ef-4643-bbbc-4a0ed4fc8415", + TunnelName: "blog", + Comment: "Example comment for this route", + CreatedAt: &ts, + DeletedAt: &ts, + VirtualNetworkID: "9f322de4-5988-4945-b770-f1d6ac200f86", } mux.HandleFunc("/accounts/"+testAccountID+"/teamnet/routes/network/10.0.0.0/16", handler) - tunnel, err := client.UpdateTunnelRoute(context.Background(), TunnelRoutesUpdateParams{AccountID: testAccountID, TunnelID: testTunnelID, Network: "10.0.0.0/16", Comment: "foo"}) + tunnel, err := client.UpdateTunnelRoute(context.Background(), TunnelRoutesUpdateParams{AccountID: testAccountID, TunnelID: testTunnelID, Network: "10.0.0.0/16", Comment: "foo", VirtualNetworkID: "9f322de4-5988-4945-b770-f1d6ac200f86"}) if assert.NoError(t, err) { assert.Equal(t, want, tunnel) @@ -202,12 +210,13 @@ func TestDeleteTunnelRoute(t *testing.T) { "tunnel_name": "blog", "comment": "Example comment for this route", "created_at": "2021-01-25T18:22:34.317854Z", - "deleted_at": "2021-01-25T18:22:34.317854Z" + "deleted_at": "2021-01-25T18:22:34.317854Z", + "virtual_network_id": "9f322de4-5988-4945-b770-f1d6ac200f86" } }`) } mux.HandleFunc("/accounts/"+testAccountID+"/teamnet/routes/network/10.0.0.0/16", handler) - err := client.DeleteTunnelRoute(context.Background(), TunnelRoutesDeleteParams{AccountID: testAccountID, Network: "10.0.0.0/16"}) + err := client.DeleteTunnelRoute(context.Background(), TunnelRoutesDeleteParams{AccountID: testAccountID, Network: "10.0.0.0/16", VirtualNetworkID: "9f322de4-5988-4945-b770-f1d6ac200f86"}) assert.NoError(t, err) } From f16d34cef93249bec1ceac0a2131c731d6dfac85 Mon Sep 17 00:00:00 2001 From: Ivan Sabelnikov Date: Wed, 1 Jun 2022 14:27:46 +0300 Subject: [PATCH 2/2] Fix vnet get param to get route for ip --- tunnel_routes.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tunnel_routes.go b/tunnel_routes.go index 45cae7af7..3ba73c789 100644 --- a/tunnel_routes.go +++ b/tunnel_routes.go @@ -57,8 +57,8 @@ type TunnelRoutesUpdateParams struct { } type TunnelRoutesForIPParams struct { - AccountID string `json:"-"` - Network string `json:"-"` + AccountID string `url:"-"` + Network string `url:"-"` VirtualNetworkID string `url:"virtual_network_id,omitempty"` } @@ -118,9 +118,9 @@ func (api *API) GetTunnelRouteForIP(ctx context.Context, params TunnelRoutesForI return TunnelRoute{}, ErrInvalidNetworkValue } - uri := fmt.Sprintf("/%s/%s/teamnet/routes/ip/%s", AccountRouteRoot, params.AccountID, params.Network) + uri := buildURI(fmt.Sprintf("/%s/%s/teamnet/routes/ip/%s", AccountRouteRoot, params.AccountID, params.Network), params) - responseBody, err := api.makeRequestContext(ctx, http.MethodGet, uri, params) + responseBody, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil) if err != nil { return TunnelRoute{}, err }