From a2241c8fbfdfdadaa829aaeb9e0650522e142fb6 Mon Sep 17 00:00:00 2001 From: Erik Zilber Date: Fri, 19 Jul 2024 09:13:13 -0400 Subject: [PATCH] Migrated regions_availability to vlans from resty to request helpers (#551) --- paged_response_structs.go | 18 + regions_availability.go | 44 +- stackscripts.go | 73 +- support.go | 41 +- tags.go | 83 +- .../fixtures/ExampleCreateStackscript.yaml | 107 +- .../fixtures/ExampleGetType_missing.yaml | 9 +- .../ExampleListStackscripts_page1.yaml | 14 +- .../fixtures/ExampleListTypes_all.yaml | 137 +- .../TestRegionsAvailability_List.yaml | 845 ++++++--- .../fixtures/TestStackscripts_List.yaml | 1638 +++++++++-------- test/integration/fixtures/TestTag_Create.yaml | 513 ++++-- .../TestTag_ListTaggedObjects_Missing.yaml | 16 +- .../fixtures/TestType_GetFound.yaml | 24 +- .../fixtures/TestType_GetMissing.yaml | 14 +- test/integration/fixtures/TestTypes_List.yaml | 377 ++-- .../fixtures/TestTypes_RegionSpecific.yaml | 461 ++--- .../fixtures/TestVLANs_GetIPAMAddress.yaml | 247 +-- test/integration/fixtures/TestVLANs_List.yaml | 335 ++-- types.go | 42 +- vlans.go | 31 +- 21 files changed, 2858 insertions(+), 2211 deletions(-) diff --git a/paged_response_structs.go b/paged_response_structs.go index 32b0ba30f..00a279a6a 100644 --- a/paged_response_structs.go +++ b/paged_response_structs.go @@ -85,6 +85,9 @@ type IPv6RangesPagedResponse legacyPagedResponse[IPv6Range] // Deprecated: LinodeKernelsPagedResponse exists for historical compatibility and should not be used. type LinodeKernelsPagedResponse legacyPagedResponse[LinodeKernel] +// Deprecated: LinodeTypesPagedResponse exists for historical compatibility and should not be used. +type LinodeTypesPagedResponse legacyPagedResponse[LinodeType] + // Deprecated: LoginsPagedResponse exists for historical compatibility and should not be used. type LoginsPagedResponse legacyPagedResponse[Login] @@ -130,6 +133,21 @@ type ObjectStorageClustersPagedResponse legacyPagedResponse[ObjectStorageCluster // Deprecated: PaymentsPagedResponse exists for historical compatibility and should not be used. type PaymentsPagedResponse legacyPagedResponse[Payment] +// Deprecated: RegionsAvailabilityPagedResponse exists for historical compatibility and should not be used. +type RegionsAvailabilityPagedResponse legacyPagedResponse[RegionAvailability] + +// Deprecated: StackscriptsPagedResponse exists for historical compatibility and should not be used. +type StackscriptsPagedResponse legacyPagedResponse[Stackscript] + +// Deprecated: TagsPagedResponse exists for historical compatibility and should not be used. +type TagsPagedResponse legacyPagedResponse[Tag] + +// Deprecated: TaggedObjectsPagedResponse exists for historical compatibility and should not be used. +type TaggedObjectsPagedResponse legacyPagedResponse[TaggedObject] + +// Deprecated: TicketsPagedResponse exists for historical compatibility and should not be used. +type TicketsPagedResponse legacyPagedResponse[Ticket] + // Deprecated: PostgresDatabasesPagedResponse exists for historical compatibility and should not be used. type PostgresDatabasesPagedResponse legacyPagedResponse[PostgresDatabase] diff --git a/regions_availability.go b/regions_availability.go index d4510dd3d..4caefeb74 100644 --- a/regions_availability.go +++ b/regions_availability.go @@ -2,10 +2,6 @@ package linodego import ( "context" - "fmt" - "net/url" - - "github.com/go-resty/resty/v2" ) // Region represents a linode region object @@ -15,32 +11,11 @@ type RegionAvailability struct { Available bool `json:"available"` } -// RegionsAvailabilityPagedResponse represents a linode API response for listing -type RegionsAvailabilityPagedResponse struct { - *PageOptions - Data []RegionAvailability `json:"data"` -} - -// endpoint gets the endpoint URL for Region -func (RegionsAvailabilityPagedResponse) endpoint(_ ...any) string { - return "regions/availability" -} - -func (resp *RegionsAvailabilityPagedResponse) castResult(r *resty.Request, e string) (int, int, error) { - res, err := coupleAPIErrors(r.SetResult(RegionsAvailabilityPagedResponse{}).Get(e)) - if err != nil { - return 0, 0, err - } - castedRes := res.Result().(*RegionsAvailabilityPagedResponse) - resp.Data = append(resp.Data, castedRes.Data...) - return castedRes.Pages, castedRes.Results, nil -} - // ListRegionsAvailability lists Regions. This endpoint is cached by default. func (c *Client) ListRegionsAvailability(ctx context.Context, opts *ListOptions) ([]RegionAvailability, error) { - response := RegionsAvailabilityPagedResponse{} + e := "regions/availability" - endpoint, err := generateListCacheURL(response.endpoint(), opts) + endpoint, err := generateListCacheURL(e, opts) if err != nil { return nil, err } @@ -49,32 +24,31 @@ func (c *Client) ListRegionsAvailability(ctx context.Context, opts *ListOptions) return result.([]RegionAvailability), nil } - err = c.listHelper(ctx, &response, opts) + response, err := getPaginatedResults[RegionAvailability](ctx, c, e, opts) if err != nil { return nil, err } - c.addCachedResponse(endpoint, response.Data, &cacheExpiryTime) + c.addCachedResponse(endpoint, response, &cacheExpiryTime) - return response.Data, nil + return response, nil } // GetRegionAvailability gets the template with the provided ID. This endpoint is cached by default. func (c *Client) GetRegionAvailability(ctx context.Context, regionID string) (*RegionAvailability, error) { - e := fmt.Sprintf("regions/%s/availability", url.PathEscape(regionID)) + e := formatAPIPath("regions/%s/availability", regionID) if result := c.getCachedResponse(e); result != nil { result := result.(RegionAvailability) return &result, nil } - req := c.R(ctx).SetResult(&RegionAvailability{}) - r, err := coupleAPIErrors(req.Get(e)) + response, err := doGETRequest[RegionAvailability](ctx, c, e) if err != nil { return nil, err } - c.addCachedResponse(e, r.Result(), &cacheExpiryTime) + c.addCachedResponse(e, response, &cacheExpiryTime) - return r.Result().(*RegionAvailability), nil + return response, nil } diff --git a/stackscripts.go b/stackscripts.go index 5d67128d3..3f290b076 100644 --- a/stackscripts.go +++ b/stackscripts.go @@ -3,10 +3,8 @@ package linodego import ( "context" "encoding/json" - "fmt" "time" - "github.com/go-resty/resty/v2" "github.com/linode/linodego/internal/parseabletime" ) @@ -111,83 +109,36 @@ func (i Stackscript) GetUpdateOptions() StackscriptUpdateOptions { } } -// StackscriptsPagedResponse represents a paginated Stackscript API response -type StackscriptsPagedResponse struct { - *PageOptions - Data []Stackscript `json:"data"` -} - -// endpoint gets the endpoint URL for Stackscript -func (StackscriptsPagedResponse) endpoint(_ ...any) string { - return "linode/stackscripts" -} - -func (resp *StackscriptsPagedResponse) castResult(r *resty.Request, e string) (int, int, error) { - res, err := coupleAPIErrors(r.SetResult(StackscriptsPagedResponse{}).Get(e)) - if err != nil { - return 0, 0, err - } - castedRes := res.Result().(*StackscriptsPagedResponse) - resp.Data = append(resp.Data, castedRes.Data...) - return castedRes.Pages, castedRes.Results, nil -} - // ListStackscripts lists Stackscripts func (c *Client) ListStackscripts(ctx context.Context, opts *ListOptions) ([]Stackscript, error) { - response := StackscriptsPagedResponse{} - err := c.listHelper(ctx, &response, opts) - if err != nil { - return nil, err - } - return response.Data, nil + response, err := getPaginatedResults[Stackscript](ctx, c, "linode/stackscripts", opts) + return response, err } // GetStackscript gets the Stackscript with the provided ID func (c *Client) GetStackscript(ctx context.Context, scriptID int) (*Stackscript, error) { - e := fmt.Sprintf("linode/stackscripts/%d", scriptID) - req := c.R(ctx).SetResult(&Stackscript{}) - r, err := coupleAPIErrors(req.Get(e)) - if err != nil { - return nil, err - } - return r.Result().(*Stackscript), nil + e := formatAPIPath("linode/stackscripts/%d", scriptID) + response, err := doGETRequest[Stackscript](ctx, c, e) + return response, err } // CreateStackscript creates a StackScript func (c *Client) CreateStackscript(ctx context.Context, opts StackscriptCreateOptions) (*Stackscript, error) { - body, err := json.Marshal(opts) - if err != nil { - return nil, err - } - e := "linode/stackscripts" - req := c.R(ctx).SetResult(&Stackscript{}).SetBody(string(body)) - r, err := coupleAPIErrors(req.Post(e)) - if err != nil { - return nil, err - } - return r.Result().(*Stackscript), nil + response, err := doPOSTRequest[Stackscript](ctx, c, e, opts) + return response, err } // UpdateStackscript updates the StackScript with the specified id func (c *Client) UpdateStackscript(ctx context.Context, scriptID int, opts StackscriptUpdateOptions) (*Stackscript, error) { - body, err := json.Marshal(opts) - if err != nil { - return nil, err - } - - req := c.R(ctx).SetResult(&Stackscript{}).SetBody(string(body)) - e := fmt.Sprintf("linode/stackscripts/%d", scriptID) - r, err := coupleAPIErrors(req.Put(e)) - if err != nil { - return nil, err - } - return r.Result().(*Stackscript), nil + e := formatAPIPath("linode/stackscripts/%d", scriptID) + response, err := doPUTRequest[Stackscript](ctx, c, e, opts) + return response, err } // DeleteStackscript deletes the StackScript with the specified id func (c *Client) DeleteStackscript(ctx context.Context, scriptID int) error { - e := fmt.Sprintf("linode/stackscripts/%d", scriptID) - _, err := coupleAPIErrors(c.R(ctx).Delete(e)) + e := formatAPIPath("linode/stackscripts/%d", scriptID) + err := doDELETERequest(ctx, c, e) return err } diff --git a/support.go b/support.go index 7e7e54a54..4af871ecf 100644 --- a/support.go +++ b/support.go @@ -2,10 +2,7 @@ package linodego import ( "context" - "fmt" "time" - - "github.com/go-resty/resty/v2" ) // Ticket represents a support ticket object @@ -42,46 +39,18 @@ const ( TicketOpen TicketStatus = "open" ) -// TicketsPagedResponse represents a paginated ticket API response -type TicketsPagedResponse struct { - *PageOptions - Data []Ticket `json:"data"` -} - -func (TicketsPagedResponse) endpoint(_ ...any) string { - return "support/tickets" -} - -func (resp *TicketsPagedResponse) castResult(r *resty.Request, e string) (int, int, error) { - res, err := coupleAPIErrors(r.SetResult(TicketsPagedResponse{}).Get(e)) - if err != nil { - return 0, 0, err - } - castedRes := res.Result().(*TicketsPagedResponse) - resp.Data = append(resp.Data, castedRes.Data...) - return castedRes.Pages, castedRes.Results, nil -} - // ListTickets returns a collection of Support Tickets on the Account. Support Tickets // can be both tickets opened with Linode for support, as well as tickets generated by // Linode regarding the Account. This collection includes all Support Tickets generated // on the Account, with open tickets returned first. func (c *Client) ListTickets(ctx context.Context, opts *ListOptions) ([]Ticket, error) { - response := TicketsPagedResponse{} - err := c.listHelper(ctx, &response, opts) - if err != nil { - return nil, err - } - return response.Data, nil + response, err := getPaginatedResults[Ticket](ctx, c, "support/tickets", opts) + return response, err } // GetTicket gets a Support Ticket on the Account with the specified ID func (c *Client) GetTicket(ctx context.Context, ticketID int) (*Ticket, error) { - e := fmt.Sprintf("support/tickets/%d", ticketID) - req := c.R(ctx).SetResult(&Ticket{}) - r, err := coupleAPIErrors(req.Get(e)) - if err != nil { - return nil, err - } - return r.Result().(*Ticket), nil + e := formatAPIPath("support/tickets/%d", ticketID) + response, err := doGETRequest[Ticket](ctx, c, e) + return response, err } diff --git a/tags.go b/tags.go index f22208ec4..9d8d9eb67 100644 --- a/tags.go +++ b/tags.go @@ -4,10 +4,6 @@ import ( "context" "encoding/json" "errors" - "fmt" - "net/url" - - "github.com/go-resty/resty/v2" ) // Tag represents a Tag object @@ -54,57 +50,10 @@ func (i Tag) GetCreateOptions() (o TagCreateOptions) { return } -// TagsPagedResponse represents a paginated Tag API response -type TagsPagedResponse struct { - *PageOptions - Data []Tag `json:"data"` -} - -// endpoint gets the endpoint URL for Tag -func (TagsPagedResponse) endpoint(_ ...any) string { - return "tags" -} - -func (resp *TagsPagedResponse) castResult(r *resty.Request, e string) (int, int, error) { - res, err := coupleAPIErrors(r.SetResult(TagsPagedResponse{}).Get(e)) - if err != nil { - return 0, 0, err - } - castedRes := res.Result().(*TagsPagedResponse) - resp.Data = append(resp.Data, castedRes.Data...) - return castedRes.Pages, castedRes.Results, nil -} - -// TaggedObjectsPagedResponse represents a paginated Tag API response -type TaggedObjectsPagedResponse struct { - *PageOptions - Data []TaggedObject `json:"data"` -} - -// endpoint gets the endpoint URL for Tag -func (TaggedObjectsPagedResponse) endpoint(ids ...any) string { - id := url.PathEscape(ids[0].(string)) - return fmt.Sprintf("tags/%s", id) -} - -func (resp *TaggedObjectsPagedResponse) castResult(r *resty.Request, e string) (int, int, error) { - res, err := coupleAPIErrors(r.SetResult(TaggedObjectsPagedResponse{}).Get(e)) - if err != nil { - return 0, 0, err - } - castedRes := res.Result().(*TaggedObjectsPagedResponse) - resp.Data = append(resp.Data, castedRes.Data...) - return castedRes.Pages, castedRes.Results, nil -} - // ListTags lists Tags func (c *Client) ListTags(ctx context.Context, opts *ListOptions) ([]Tag, error) { - response := TagsPagedResponse{} - err := c.listHelper(ctx, &response, opts) - if err != nil { - return nil, err - } - return response.Data, nil + response, err := getPaginatedResults[Tag](ctx, c, "tags", opts) + return response, err } // fixData stores an object of the type defined by Type in Data using RawData @@ -147,19 +96,17 @@ func (i *TaggedObject) fixData() (*TaggedObject, error) { // ListTaggedObjects lists Tagged Objects func (c *Client) ListTaggedObjects(ctx context.Context, label string, opts *ListOptions) (TaggedObjectList, error) { - response := TaggedObjectsPagedResponse{} - label = url.PathEscape(label) - err := c.listHelper(ctx, &response, opts, label) + response, err := getPaginatedResults[TaggedObject](ctx, c, formatAPIPath("tags/%s", label), opts) if err != nil { return nil, err } - for i := range response.Data { - if _, err := response.Data[i].fixData(); err != nil { + for i := range response { + if _, err := response[i].fixData(); err != nil { return nil, err } } - return response.Data, nil + return response, nil } // SortedObjects converts a list of TaggedObjects into a Sorted Objects struct, for easier access @@ -205,24 +152,14 @@ func (t TaggedObjectList) SortedObjects() (SortedObjects, error) { // CreateTag creates a Tag func (c *Client) CreateTag(ctx context.Context, opts TagCreateOptions) (*Tag, error) { - body, err := json.Marshal(opts) - if err != nil { - return nil, err - } - e := "tags" - req := c.R(ctx).SetResult(&Tag{}).SetBody(string(body)) - r, err := coupleAPIErrors(req.Post(e)) - if err != nil { - return nil, err - } - return r.Result().(*Tag), nil + response, err := doPOSTRequest[Tag](ctx, c, e, opts) + return response, err } // DeleteTag deletes the Tag with the specified id func (c *Client) DeleteTag(ctx context.Context, label string) error { - label = url.PathEscape(label) - e := fmt.Sprintf("tags/%s", label) - _, err := coupleAPIErrors(c.R(ctx).Delete(e)) + e := formatAPIPath("tags/%s", label) + err := doDELETERequest(ctx, c, e) return err } diff --git a/test/integration/fixtures/ExampleCreateStackscript.yaml b/test/integration/fixtures/ExampleCreateStackscript.yaml index 1196841d7..48acf210b 100644 --- a/test/integration/fixtures/ExampleCreateStackscript.yaml +++ b/test/integration/fixtures/ExampleCreateStackscript.yaml @@ -2,8 +2,8 @@ version: 1 interactions: - request: - body: '{"label":"example stackscript 2024-05-31 10:04:42.930229 -0700 PDT m=+25.142787667","description":"description - for example stackscript 2024-05-31 10:04:42.930224 -0700 PDT m=+25.142783033","images":["linode/debian9","linode/ubuntu18.04"],"is_public":false,"rev_note":"revision + body: '{"label":"example stackscript 2024-07-11 14:35:59.602577 -0400 EDT m=+1.641587543","description":"description + for example stackscript 2024-07-11 14:35:59.602562 -0400 EDT m=+1.641572501","images":["linode/debian9","linode/ubuntu18.04"],"is_public":false,"rev_note":"revision 1","script":"#!/bin/bash\n"}' form: {} headers: @@ -16,10 +16,10 @@ interactions: url: https://api.linode.com/v4beta/linode/stackscripts method: POST response: - body: '{"id": 1384476, "username": "youjungk01", "user_gravatar_id": "89c3034428203ecf41c0c4795ac9f651", - "label": "example stackscript 2024-05-31 10:04:42.930229 -0700 PDT m=+25.142787667", - "description": "description for example stackscript 2024-05-31 10:04:42.930224 - -0700 PDT m=+25.142783033", "ordinal": 0, "logo_url": "", "images": ["linode/debian9", + body: '{"id": 1413819, "username": "ErikZilber", "user_gravatar_id": "dea680eaec3cc565140cd87c663c1100", + "label": "example stackscript 2024-07-11 14:35:59.602577 -0400 EDT m=+1.641587543", + "description": "description for example stackscript 2024-07-11 14:35:59.602562 + -0400 EDT m=+1.641572501", "ordinal": 0, "logo_url": "", "images": ["linode/debian9", "linode/ubuntu18.04"], "deployments_total": 0, "deployments_active": 0, "is_public": false, "mine": true, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "revision 1", "script": "#!/bin/bash\n", "user_defined_fields": @@ -35,18 +35,20 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive Content-Length: - - "602" + - "600" Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:04:43 GMT + - Thu, 11 Jul 2024 18:35:59 GMT Pragma: - no-cache Strict-Transport-Security: @@ -61,10 +63,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" X-Xss-Protection: @@ -73,8 +72,8 @@ interactions: code: 200 duration: "" - request: - body: '{"label":"2 example stackscript 2024-05-31 10:04:42.930229 -0700 PDT m=+25.142787667","description":"description - for example stackscript 2024-05-31 10:04:42.930224 -0700 PDT m=+25.142783033","images":["linode/debian9","linode/ubuntu18.04"],"is_public":false,"rev_note":"revision + body: '{"label":"2 example stackscript 2024-07-11 14:35:59.602577 -0400 EDT m=+1.641587543","description":"description + for example stackscript 2024-07-11 14:35:59.602562 -0400 EDT m=+1.641572501","images":["linode/debian9","linode/ubuntu18.04"],"is_public":false,"rev_note":"revision 2","script":"#!/bin/bash\necho 2\n"}' form: {} headers: @@ -84,13 +83,13 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/stackscripts/1384476 + url: https://api.linode.com/v4beta/linode/stackscripts/1413819 method: PUT response: - body: '{"id": 1384476, "username": "youjungk01", "user_gravatar_id": "89c3034428203ecf41c0c4795ac9f651", - "label": "2 example stackscript 2024-05-31 10:04:42.930229 -0700 PDT m=+25.142787667", - "description": "description for example stackscript 2024-05-31 10:04:42.930224 - -0700 PDT m=+25.142783033", "ordinal": 0, "logo_url": "", "images": ["linode/debian9", + body: '{"id": 1413819, "username": "ErikZilber", "user_gravatar_id": "dea680eaec3cc565140cd87c663c1100", + "label": "2 example stackscript 2024-07-11 14:35:59.602577 -0400 EDT m=+1.641587543", + "description": "description for example stackscript 2024-07-11 14:35:59.602562 + -0400 EDT m=+1.641572501", "ordinal": 0, "logo_url": "", "images": ["linode/debian9", "linode/ubuntu18.04"], "deployments_total": 0, "deployments_active": 0, "is_public": false, "mine": true, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "revision 2", "script": "#!/bin/bash\necho 2\n", "user_defined_fields": @@ -106,18 +105,20 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive Content-Length: - - "612" + - "610" Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:04:43 GMT + - Thu, 11 Jul 2024 18:35:59 GMT Pragma: - no-cache Strict-Transport-Security: @@ -132,10 +133,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" X-Xss-Protection: @@ -144,9 +142,9 @@ interactions: code: 200 duration: "" - request: - body: '{"label":"3 2 example stackscript 2024-05-31 10:04:42.930229 -0700 PDT - m=+25.142787667","description":"description for example stackscript 2024-05-31 - 10:04:42.930224 -0700 PDT m=+25.142783033","images":["linode/debian9","linode/ubuntu18.04"],"is_public":false,"rev_note":"revision + body: '{"label":"3 2 example stackscript 2024-07-11 14:35:59.602577 -0400 EDT + m=+1.641587543","description":"description for example stackscript 2024-07-11 + 14:35:59.602562 -0400 EDT m=+1.641572501","images":["linode/debian9","linode/ubuntu18.04"],"is_public":false,"rev_note":"revision 3","script":"#!/bin/bash\necho 2\necho 3\n"}' form: {} headers: @@ -156,13 +154,13 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/stackscripts/1384476 + url: https://api.linode.com/v4beta/linode/stackscripts/1413819 method: PUT response: - body: '{"id": 1384476, "username": "youjungk01", "user_gravatar_id": "89c3034428203ecf41c0c4795ac9f651", - "label": "3 2 example stackscript 2024-05-31 10:04:42.930229 -0700 PDT m=+25.142787667", - "description": "description for example stackscript 2024-05-31 10:04:42.930224 - -0700 PDT m=+25.142783033", "ordinal": 0, "logo_url": "", "images": ["linode/debian9", + body: '{"id": 1413819, "username": "ErikZilber", "user_gravatar_id": "dea680eaec3cc565140cd87c663c1100", + "label": "3 2 example stackscript 2024-07-11 14:35:59.602577 -0400 EDT m=+1.641587543", + "description": "description for example stackscript 2024-07-11 14:35:59.602562 + -0400 EDT m=+1.641572501", "ordinal": 0, "logo_url": "", "images": ["linode/debian9", "linode/ubuntu18.04"], "deployments_total": 0, "deployments_active": 0, "is_public": false, "mine": true, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "revision 3", "script": "#!/bin/bash\necho 2\necho 3\n", "user_defined_fields": @@ -178,18 +176,20 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive Content-Length: - - "622" + - "620" Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:04:43 GMT + - Thu, 11 Jul 2024 18:36:00 GMT Pragma: - no-cache Strict-Transport-Security: @@ -204,10 +204,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" X-Xss-Protection: @@ -225,13 +222,13 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/stackscripts/1384476 + url: https://api.linode.com/v4beta/linode/stackscripts/1413819 method: GET response: - body: '{"id": 1384476, "username": "youjungk01", "user_gravatar_id": "89c3034428203ecf41c0c4795ac9f651", - "label": "3 2 example stackscript 2024-05-31 10:04:42.930229 -0700 PDT m=+25.142787667", - "description": "description for example stackscript 2024-05-31 10:04:42.930224 - -0700 PDT m=+25.142783033", "ordinal": 0, "logo_url": "", "images": ["linode/debian9", + body: '{"id": 1413819, "username": "ErikZilber", "user_gravatar_id": "dea680eaec3cc565140cd87c663c1100", + "label": "3 2 example stackscript 2024-07-11 14:35:59.602577 -0400 EDT m=+1.641587543", + "description": "description for example stackscript 2024-07-11 14:35:59.602562 + -0400 EDT m=+1.641572501", "ordinal": 0, "logo_url": "", "images": ["linode/debian9", "linode/ubuntu18.04"], "deployments_total": 0, "deployments_active": 0, "is_public": false, "mine": true, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "revision 3", "script": "#!/bin/bash\necho 2\necho 3\n", "user_defined_fields": @@ -247,18 +244,20 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive Content-Length: - - "622" + - "620" Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:04:43 GMT + - Thu, 11 Jul 2024 18:36:00 GMT Pragma: - no-cache Strict-Transport-Security: @@ -274,10 +273,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" X-Xss-Protection: @@ -295,7 +291,7 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/stackscripts/1384476 + url: https://api.linode.com/v4beta/linode/stackscripts/1413819 method: DELETE response: body: '{}' @@ -310,6 +306,8 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: @@ -321,7 +319,7 @@ interactions: Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:04:43 GMT + - Thu, 11 Jul 2024 18:36:00 GMT Pragma: - no-cache Strict-Transport-Security: @@ -336,10 +334,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" X-Xss-Protection: diff --git a/test/integration/fixtures/ExampleGetType_missing.yaml b/test/integration/fixtures/ExampleGetType_missing.yaml index 07ea8d373..c486ce089 100644 --- a/test/integration/fixtures/ExampleGetType_missing.yaml +++ b/test/integration/fixtures/ExampleGetType_missing.yaml @@ -22,6 +22,8 @@ interactions: - HEAD, GET, OPTIONS, POST, PUT, DELETE Access-Control-Allow-Origin: - '*' + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: @@ -31,7 +33,7 @@ interactions: Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:04:44 GMT + - Thu, 11 Jul 2024 18:37:11 GMT Pragma: - no-cache Vary: @@ -41,10 +43,7 @@ interactions: X-Frame-Options: - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" status: 404 Not Found diff --git a/test/integration/fixtures/ExampleListStackscripts_page1.yaml b/test/integration/fixtures/ExampleListStackscripts_page1.yaml index 15454ba07..5e3840634 100644 --- a/test/integration/fixtures/ExampleListStackscripts_page1.yaml +++ b/test/integration/fixtures/ExampleListStackscripts_page1.yaml @@ -2798,7 +2798,7 @@ interactions: can now configure DIY and Softaculous Webuzo at the following URL :\"\necho \"http://$ip:2004/\"\necho \" \"\necho \"Thank you for choosing Softaculous Webuzo !\"\necho \" \"", "user_defined_fields": []}, {"id": 665116, "username": - "prod-test-012", "user_gravatar_id": "9c7a651c63f3cefe52654946e9b46bd2", "label": + "prod-test-012", "user_gravatar_id": "baf45275c482453fbd50f381af256408", "label": "test public2", "description": "", "ordinal": 0, "logo_url": "", "images": ["linode/alpine3.10"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": @@ -3672,7 +3672,7 @@ interactions: \"You can now configure qdPM and Softaculous Webuzo at the following URL :\"\necho \"http://$ip:2004/\"\necho \" \"\necho \"Thank you for choosing Softaculous Webuzo !\"\necho \" \"", "user_defined_fields": []}], "page": 1, "pages": 26, - "results": 2504}' + "results": 2527}' headers: Access-Control-Allow-Credentials: - "true" @@ -3684,16 +3684,19 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive + - Transfer-Encoding Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:04:46 GMT + - Thu, 11 Jul 2024 18:39:07 GMT Pragma: - no-cache Strict-Transport-Security: @@ -3710,10 +3713,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "20" X-Xss-Protection: diff --git a/test/integration/fixtures/ExampleListTypes_all.yaml b/test/integration/fixtures/ExampleListTypes_all.yaml index a3b9295a4..7b8a49b88 100644 --- a/test/integration/fixtures/ExampleListTypes_all.yaml +++ b/test/integration/fixtures/ExampleListTypes_all.yaml @@ -11,7 +11,7 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/types + url: https://api.linode.com/v4beta/linode/types?page=1 method: GET response: body: '{"data": [{"id": "g6-nanode-1", "label": "Nanode 1GB", "price": {"hourly": @@ -178,50 +178,68 @@ interactions: 240.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.432, "monthly": 288.0}, {"id": "br-gru", "hourly": 0.504, "monthly": 336.0}]}}, "memory": 524288, "disk": 7372800, "transfer": 12000, "vcpus": 64, "gpus": 0, "network_out": 12000, "class": - "dedicated", "successor": null}, {"id": "g7-premium-2", "label": "Premium 4GB", - "price": {"hourly": 0.0645, "monthly": 43.0}, "region_prices": [{"id": "id-cgk", - "hourly": 0.078, "monthly": 51.84}, {"id": "br-gru", "hourly": 0.091, "monthly": - 60.48}], "addons": {"backups": {"price": {"hourly": 0.008, "monthly": 5.0}, - "region_prices": [{"id": "id-cgk", "hourly": 0.009, "monthly": 6.0}, {"id": - "br-gru", "hourly": 0.01, "monthly": 7.0}]}}, "memory": 4096, "disk": 81920, - "transfer": 4000, "vcpus": 2, "gpus": 0, "network_out": 4000, "class": "premium", - "successor": null}, {"id": "g7-premium-4", "label": "Premium 8GB", "price": - {"hourly": 0.129, "monthly": 86.0}, "region_prices": [{"id": "id-cgk", "hourly": - 0.156, "monthly": 103.68}, {"id": "br-gru", "hourly": 0.181, "monthly": 120.96}], - "addons": {"backups": {"price": {"hourly": 0.015, "monthly": 10.0}, "region_prices": - [{"id": "id-cgk", "hourly": 0.018, "monthly": 12.0}, {"id": "br-gru", "hourly": - 0.021, "monthly": 14.0}]}}, "memory": 8192, "disk": 163840, "transfer": 5000, - "vcpus": 4, "gpus": 0, "network_out": 5000, "class": "premium", "successor": - null}, {"id": "g7-premium-8", "label": "Premium 16GB", "price": {"hourly": 0.2595, - "monthly": 173.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.311, "monthly": - 207.36}, {"id": "br-gru", "hourly": 0.363, "monthly": 241.92}], "addons": {"backups": - {"price": {"hourly": 0.03, "monthly": 20.0}, "region_prices": [{"id": "id-cgk", - "hourly": 0.036, "monthly": 24.0}, {"id": "br-gru", "hourly": 0.042, "monthly": - 28.0}]}}, "memory": 16384, "disk": 327680, "transfer": 6000, "vcpus": 8, "gpus": - 0, "network_out": 6000, "class": "premium", "successor": null}, {"id": "g7-premium-16", - "label": "Premium 32GB", "price": {"hourly": 0.519, "monthly": 346.0}, "region_prices": - [{"id": "id-cgk", "hourly": 0.622, "monthly": 414.72}, {"id": "br-gru", "hourly": - 0.726, "monthly": 483.84}], "addons": {"backups": {"price": {"hourly": 0.06, - "monthly": 40.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.072, "monthly": - 48.0}, {"id": "br-gru", "hourly": 0.084, "monthly": 56.0}]}}, "memory": 32768, - "disk": 655360, "transfer": 7000, "vcpus": 16, "gpus": 0, "network_out": 7000, - "class": "premium", "successor": null}, {"id": "g7-premium-32", "label": "Premium - 64GB", "price": {"hourly": 1.0365, "monthly": 691.0}, "region_prices": [{"id": - "id-cgk", "hourly": 1.244, "monthly": 829.44}, {"id": "br-gru", "hourly": 1.452, - "monthly": 967.68}], "addons": {"backups": {"price": {"hourly": 0.12, "monthly": - 80.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.144, "monthly": 96.0}, - {"id": "br-gru", "hourly": 0.168, "monthly": 112.0}]}}, "memory": 65536, "disk": - 1310720, "transfer": 8000, "vcpus": 32, "gpus": 0, "network_out": 8000, "class": - "premium", "successor": null}, {"id": "g7-premium-48", "label": "Premium 96GB", - "price": {"hourly": 1.5555, "monthly": 1037.0}, "region_prices": [{"id": "id-cgk", - "hourly": 1.866, "monthly": 1244.16}, {"id": "br-gru", "hourly": 2.177, "monthly": - 1451.52}], "addons": {"backups": {"price": {"hourly": 0.18, "monthly": 120.0}, - "region_prices": [{"id": "id-cgk", "hourly": 0.216, "monthly": 144.0}, {"id": - "br-gru", "hourly": 0.252, "monthly": 168.0}]}}, "memory": 98304, "disk": 1966080, - "transfer": 9000, "vcpus": 48, "gpus": 0, "network_out": 9000, "class": "premium", - "successor": null}, {"id": "g7-premium-50", "label": "Premium 128GB", "price": - {"hourly": 2.073, "monthly": 1382.0}, "region_prices": [{"id": "id-cgk", "hourly": - 2.488, "monthly": 1658.88}, {"id": "br-gru", "hourly": 2.903, "monthly": 1935.36}], + "dedicated", "successor": null}, {"id": "g1-gpu-rtx6000-1", "label": "Dedicated + 32GB + RTX6000 GPU x1", "price": {"hourly": 1.5, "monthly": 1000.0}, "region_prices": + [], "addons": {"backups": {"price": {"hourly": 0.06, "monthly": 40.0}, "region_prices": + []}}, "memory": 32768, "disk": 655360, "transfer": 16000, "vcpus": 8, "gpus": + 1, "network_out": 10000, "class": "gpu", "successor": null}, {"id": "g1-gpu-rtx6000-2", + "label": "Dedicated 64GB + RTX6000 GPU x2", "price": {"hourly": 3.0, "monthly": + 2000.0}, "region_prices": [], "addons": {"backups": {"price": {"hourly": 0.12, + "monthly": 80.0}, "region_prices": []}}, "memory": 65536, "disk": 1310720, "transfer": + 20000, "vcpus": 16, "gpus": 2, "network_out": 10000, "class": "gpu", "successor": + null}, {"id": "g1-gpu-rtx6000-3", "label": "Dedicated 96GB + RTX6000 GPU x3", + "price": {"hourly": 4.5, "monthly": 3000.0}, "region_prices": [], "addons": + {"backups": {"price": {"hourly": 0.18, "monthly": 120.0}, "region_prices": []}}, + "memory": 98304, "disk": 1966080, "transfer": 20000, "vcpus": 20, "gpus": 3, + "network_out": 10000, "class": "gpu", "successor": null}, {"id": "g1-gpu-rtx6000-4", + "label": "Dedicated 128GB + RTX6000 GPU x4", "price": {"hourly": 6.0, "monthly": + 4000.0}, "region_prices": [], "addons": {"backups": {"price": {"hourly": 0.24, + "monthly": 160.0}, "region_prices": []}}, "memory": 131072, "disk": 2621440, + "transfer": 20000, "vcpus": 24, "gpus": 4, "network_out": 10000, "class": "gpu", + "successor": null}, {"id": "g7-premium-2", "label": "Premium 4GB", "price": + {"hourly": 0.0645, "monthly": 43.0}, "region_prices": [{"id": "id-cgk", "hourly": + 0.078, "monthly": 51.84}, {"id": "br-gru", "hourly": 0.091, "monthly": 60.48}], + "addons": {"backups": {"price": {"hourly": 0.008, "monthly": 5.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.009, "monthly": 6.0}, {"id": "br-gru", "hourly": + 0.01, "monthly": 7.0}]}}, "memory": 4096, "disk": 81920, "transfer": 4000, "vcpus": + 2, "gpus": 0, "network_out": 4000, "class": "premium", "successor": null}, {"id": + "g7-premium-4", "label": "Premium 8GB", "price": {"hourly": 0.129, "monthly": + 86.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.156, "monthly": 103.68}, + {"id": "br-gru", "hourly": 0.181, "monthly": 120.96}], "addons": {"backups": + {"price": {"hourly": 0.015, "monthly": 10.0}, "region_prices": [{"id": "id-cgk", + "hourly": 0.018, "monthly": 12.0}, {"id": "br-gru", "hourly": 0.021, "monthly": + 14.0}]}}, "memory": 8192, "disk": 163840, "transfer": 5000, "vcpus": 4, "gpus": + 0, "network_out": 5000, "class": "premium", "successor": null}, {"id": "g7-premium-8", + "label": "Premium 16GB", "price": {"hourly": 0.2595, "monthly": 173.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.311, "monthly": 207.36}, {"id": "br-gru", "hourly": + 0.363, "monthly": 241.92}], "addons": {"backups": {"price": {"hourly": 0.03, + "monthly": 20.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.036, "monthly": + 24.0}, {"id": "br-gru", "hourly": 0.042, "monthly": 28.0}]}}, "memory": 16384, + "disk": 327680, "transfer": 6000, "vcpus": 8, "gpus": 0, "network_out": 6000, + "class": "premium", "successor": null}, {"id": "g7-premium-16", "label": "Premium + 32GB", "price": {"hourly": 0.519, "monthly": 346.0}, "region_prices": [{"id": + "id-cgk", "hourly": 0.622, "monthly": 414.72}, {"id": "br-gru", "hourly": 0.726, + "monthly": 483.84}], "addons": {"backups": {"price": {"hourly": 0.06, "monthly": + 40.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.072, "monthly": 48.0}, + {"id": "br-gru", "hourly": 0.084, "monthly": 56.0}]}}, "memory": 32768, "disk": + 655360, "transfer": 7000, "vcpus": 16, "gpus": 0, "network_out": 7000, "class": + "premium", "successor": null}, {"id": "g7-premium-32", "label": "Premium 64GB", + "price": {"hourly": 1.0365, "monthly": 691.0}, "region_prices": [{"id": "id-cgk", + "hourly": 1.244, "monthly": 829.44}, {"id": "br-gru", "hourly": 1.452, "monthly": + 967.68}], "addons": {"backups": {"price": {"hourly": 0.12, "monthly": 80.0}, + "region_prices": [{"id": "id-cgk", "hourly": 0.144, "monthly": 96.0}, {"id": + "br-gru", "hourly": 0.168, "monthly": 112.0}]}}, "memory": 65536, "disk": 1310720, + "transfer": 8000, "vcpus": 32, "gpus": 0, "network_out": 8000, "class": "premium", + "successor": null}, {"id": "g7-premium-48", "label": "Premium 96GB", "price": + {"hourly": 1.5555, "monthly": 1037.0}, "region_prices": [{"id": "id-cgk", "hourly": + 1.866, "monthly": 1244.16}, {"id": "br-gru", "hourly": 2.177, "monthly": 1451.52}], + "addons": {"backups": {"price": {"hourly": 0.18, "monthly": 120.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.216, "monthly": 144.0}, {"id": "br-gru", "hourly": + 0.252, "monthly": 168.0}]}}, "memory": 98304, "disk": 1966080, "transfer": 9000, + "vcpus": 48, "gpus": 0, "network_out": 9000, "class": "premium", "successor": + null}, {"id": "g7-premium-50", "label": "Premium 128GB", "price": {"hourly": + 2.073, "monthly": 1382.0}, "region_prices": [{"id": "id-cgk", "hourly": 2.488, + "monthly": 1658.88}, {"id": "br-gru", "hourly": 2.903, "monthly": 1935.36}], "addons": {"backups": {"price": {"hourly": 0.24, "monthly": 160.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.288, "monthly": 192.0}, {"id": "br-gru", "hourly": 0.336, "monthly": 224.0}]}}, "memory": 131072, "disk": 2560000, "transfer": @@ -240,25 +258,7 @@ interactions: [{"id": "id-cgk", "hourly": 0.432, "monthly": 288.0}, {"id": "br-gru", "hourly": 0.504, "monthly": 336.0}]}}, "memory": 524288, "disk": 7372800, "transfer": 12000, "vcpus": 64, "gpus": 0, "network_out": 12000, "class": "premium", "successor": - null}, {"id": "g1-gpu-rtx6000-1", "label": "Dedicated 32GB + RTX6000 GPU x1", - "price": {"hourly": 1.5, "monthly": 1000.0}, "region_prices": [], "addons": - {"backups": {"price": {"hourly": 0.06, "monthly": 40.0}, "region_prices": []}}, - "memory": 32768, "disk": 655360, "transfer": 16000, "vcpus": 8, "gpus": 1, "network_out": - 10000, "class": "gpu", "successor": null}, {"id": "g1-gpu-rtx6000-2", "label": - "Dedicated 64GB + RTX6000 GPU x2", "price": {"hourly": 3.0, "monthly": 2000.0}, - "region_prices": [], "addons": {"backups": {"price": {"hourly": 0.12, "monthly": - 80.0}, "region_prices": []}}, "memory": 65536, "disk": 1310720, "transfer": - 20000, "vcpus": 16, "gpus": 2, "network_out": 10000, "class": "gpu", "successor": - null}, {"id": "g1-gpu-rtx6000-3", "label": "Dedicated 96GB + RTX6000 GPU x3", - "price": {"hourly": 4.5, "monthly": 3000.0}, "region_prices": [], "addons": - {"backups": {"price": {"hourly": 0.18, "monthly": 120.0}, "region_prices": []}}, - "memory": 98304, "disk": 1966080, "transfer": 20000, "vcpus": 20, "gpus": 3, - "network_out": 10000, "class": "gpu", "successor": null}, {"id": "g1-gpu-rtx6000-4", - "label": "Dedicated 128GB + RTX6000 GPU x4", "price": {"hourly": 6.0, "monthly": - 4000.0}, "region_prices": [], "addons": {"backups": {"price": {"hourly": 0.24, - "monthly": 160.0}, "region_prices": []}}, "memory": 131072, "disk": 2621440, - "transfer": 20000, "vcpus": 24, "gpus": 4, "network_out": 10000, "class": "gpu", - "successor": null}], "page": 1, "pages": 1, "results": 37}' + null}], "page": 1, "pages": 1, "results": 37}' headers: Access-Control-Allow-Credentials: - "true" @@ -270,6 +270,8 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: @@ -279,7 +281,7 @@ interactions: Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:04:44 GMT + - Thu, 11 Jul 2024 18:40:26 GMT Pragma: - no-cache Strict-Transport-Security: @@ -296,10 +298,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" X-Xss-Protection: diff --git a/test/integration/fixtures/TestRegionsAvailability_List.yaml b/test/integration/fixtures/TestRegionsAvailability_List.yaml index bd3a29d0a..e43b74b31 100644 --- a/test/integration/fixtures/TestRegionsAvailability_List.yaml +++ b/test/integration/fixtures/TestRegionsAvailability_List.yaml @@ -11,96 +11,96 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/regions/availability + url: https://api.linode.com/v4beta/regions/availability?page=1 method: GET response: - body: '{"data": [{"region": "us-central", "plan": "gpu-rtx6000-1.1", "available": - false}, {"region": "us-central", "plan": "gpu-rtx6000-2.1", "available": false}, - {"region": "us-central", "plan": "gpu-rtx6000-3.1", "available": false}, {"region": - "us-central", "plan": "gpu-rtx6000-4.1", "available": false}, {"region": "us-central", - "plan": "premium131072.7", "available": false}, {"region": "us-central", "plan": - "premium16384.7", "available": false}, {"region": "us-central", "plan": "premium262144.7", - "available": false}, {"region": "us-central", "plan": "premium32768.7", "available": - false}, {"region": "us-central", "plan": "premium4096.7", "available": false}, - {"region": "us-central", "plan": "premium524288.7", "available": false}, {"region": - "us-central", "plan": "premium65536.7", "available": false}, {"region": "us-central", - "plan": "premium8192.7", "available": false}, {"region": "us-central", "plan": - "premium98304.7", "available": false}, {"region": "us-west", "plan": "gpu-rtx6000-1.1", - "available": false}, {"region": "us-west", "plan": "gpu-rtx6000-2.1", "available": - false}, {"region": "us-west", "plan": "gpu-rtx6000-3.1", "available": false}, - {"region": "us-west", "plan": "gpu-rtx6000-4.1", "available": false}, {"region": - "us-west", "plan": "premium131072.7", "available": false}, {"region": "us-west", - "plan": "premium16384.7", "available": false}, {"region": "us-west", "plan": - "premium262144.7", "available": false}, {"region": "us-west", "plan": "premium32768.7", - "available": false}, {"region": "us-west", "plan": "premium4096.7", "available": - false}, {"region": "us-west", "plan": "premium524288.7", "available": false}, - {"region": "us-west", "plan": "premium65536.7", "available": false}, {"region": - "us-west", "plan": "premium8192.7", "available": false}, {"region": "us-west", - "plan": "premium98304.7", "available": false}, {"region": "us-southeast", "plan": - "gpu-rtx6000-1.1", "available": false}, {"region": "us-southeast", "plan": "gpu-rtx6000-2.1", - "available": false}, {"region": "us-southeast", "plan": "gpu-rtx6000-3.1", "available": - false}, {"region": "us-southeast", "plan": "gpu-rtx6000-4.1", "available": false}, - {"region": "us-southeast", "plan": "premium131072.7", "available": false}, {"region": - "us-southeast", "plan": "premium16384.7", "available": false}, {"region": "us-southeast", - "plan": "premium262144.7", "available": false}, {"region": "us-southeast", "plan": - "premium32768.7", "available": false}, {"region": "us-southeast", "plan": "premium4096.7", - "available": false}, {"region": "us-southeast", "plan": "premium524288.7", "available": - false}, {"region": "us-southeast", "plan": "premium65536.7", "available": false}, - {"region": "us-southeast", "plan": "premium8192.7", "available": false}, {"region": - "us-southeast", "plan": "premium98304.7", "available": false}, {"region": "us-east", - "plan": "gpu-rtx6000-1.1", "available": false}, {"region": "us-east", "plan": - "gpu-rtx6000-2.1", "available": false}, {"region": "us-east", "plan": "gpu-rtx6000-3.1", - "available": false}, {"region": "us-east", "plan": "gpu-rtx6000-4.1", "available": - false}, {"region": "us-east", "plan": "premium131072.7", "available": false}, - {"region": "us-east", "plan": "premium16384.7", "available": false}, {"region": - "us-east", "plan": "premium262144.7", "available": false}, {"region": "us-east", - "plan": "premium32768.7", "available": false}, {"region": "us-east", "plan": - "premium4096.7", "available": false}, {"region": "us-east", "plan": "premium524288.7", - "available": false}, {"region": "us-east", "plan": "premium65536.7", "available": - false}, {"region": "us-east", "plan": "premium8192.7", "available": false}, - {"region": "us-east", "plan": "premium98304.7", "available": false}, {"region": - "eu-west", "plan": "gpu-rtx6000-1.1", "available": false}, {"region": "eu-west", - "plan": "gpu-rtx6000-2.1", "available": false}, {"region": "eu-west", "plan": - "gpu-rtx6000-3.1", "available": false}, {"region": "eu-west", "plan": "gpu-rtx6000-4.1", - "available": false}, {"region": "eu-west", "plan": "premium131072.7", "available": - false}, {"region": "eu-west", "plan": "premium16384.7", "available": false}, - {"region": "eu-west", "plan": "premium262144.7", "available": false}, {"region": - "eu-west", "plan": "premium32768.7", "available": false}, {"region": "eu-west", - "plan": "premium4096.7", "available": false}, {"region": "eu-west", "plan": - "premium524288.7", "available": false}, {"region": "eu-west", "plan": "premium65536.7", - "available": false}, {"region": "eu-west", "plan": "premium8192.7", "available": - false}, {"region": "eu-west", "plan": "premium98304.7", "available": false}, - {"region": "ap-south", "plan": "gpu-rtx6000-1.1", "available": false}, {"region": - "ap-south", "plan": "gpu-rtx6000-2.1", "available": false}, {"region": "ap-south", - "plan": "gpu-rtx6000-3.1", "available": false}, {"region": "ap-south", "plan": - "gpu-rtx6000-4.1", "available": false}, {"region": "ap-south", "plan": "premium131072.7", - "available": false}, {"region": "ap-south", "plan": "premium16384.7", "available": - false}, {"region": "ap-south", "plan": "premium262144.7", "available": false}, - {"region": "ap-south", "plan": "premium32768.7", "available": false}, {"region": - "ap-south", "plan": "premium4096.7", "available": false}, {"region": "ap-south", - "plan": "premium524288.7", "available": false}, {"region": "ap-south", "plan": - "premium65536.7", "available": false}, {"region": "ap-south", "plan": "premium8192.7", - "available": false}, {"region": "ap-south", "plan": "premium98304.7", "available": - false}, {"region": "eu-central", "plan": "gpu-rtx6000-1.1", "available": false}, - {"region": "eu-central", "plan": "gpu-rtx6000-2.1", "available": false}, {"region": - "eu-central", "plan": "gpu-rtx6000-3.1", "available": false}, {"region": "eu-central", - "plan": "gpu-rtx6000-4.1", "available": false}, {"region": "eu-central", "plan": - "premium131072.7", "available": false}, {"region": "eu-central", "plan": "premium16384.7", - "available": false}, {"region": "eu-central", "plan": "premium262144.7", "available": - false}, {"region": "eu-central", "plan": "premium32768.7", "available": false}, - {"region": "eu-central", "plan": "premium4096.7", "available": false}, {"region": - "eu-central", "plan": "premium524288.7", "available": false}, {"region": "eu-central", - "plan": "premium65536.7", "available": false}, {"region": "eu-central", "plan": - "premium8192.7", "available": false}, {"region": "eu-central", "plan": "premium98304.7", - "available": false}, {"region": "ap-west", "plan": "gpu-rtx6000-1.1", "available": - false}, {"region": "ap-west", "plan": "gpu-rtx6000-2.1", "available": false}, - {"region": "ap-west", "plan": "gpu-rtx6000-3.1", "available": false}, {"region": - "ap-west", "plan": "gpu-rtx6000-4.1", "available": false}, {"region": "ap-west", - "plan": "premium131072.7", "available": false}, {"region": "ap-west", "plan": - "premium16384.7", "available": false}, {"region": "ap-west", "plan": "premium262144.7", - "available": false}, {"region": "ap-west", "plan": "premium32768.7", "available": - false}, {"region": "ap-west", "plan": "premium4096.7", "available": false}], - "page": 1, "pages": 3, "results": 299}' + body: '{"data": [{"region": "us-central", "plan": "g1-gpu-rtx6000-1", "available": + false}, {"region": "us-central", "plan": "g1-gpu-rtx6000-2", "available": false}, + {"region": "us-central", "plan": "g1-gpu-rtx6000-3", "available": false}, {"region": + "us-central", "plan": "g1-gpu-rtx6000-4", "available": false}, {"region": "us-central", + "plan": "g7-premium-2", "available": false}, {"region": "us-central", "plan": + "g7-premium-4", "available": false}, {"region": "us-central", "plan": "g7-premium-8", + "available": false}, {"region": "us-central", "plan": "g7-premium-16", "available": + false}, {"region": "us-central", "plan": "g7-premium-32", "available": false}, + {"region": "us-central", "plan": "g7-premium-48", "available": false}, {"region": + "us-central", "plan": "g7-premium-50", "available": false}, {"region": "us-central", + "plan": "g7-premium-56", "available": false}, {"region": "us-central", "plan": + "g7-premium-64", "available": false}, {"region": "us-central", "plan": "g1-gpu-rtx4000a-1", + "available": false}, {"region": "us-central", "plan": "g1-gpu-rtx4000a-2", "available": + false}, {"region": "us-central", "plan": "g1-gpu-rtx4000a-4", "available": false}, + {"region": "us-central", "plan": "g1-gpu-rtx4000a-6", "available": false}, {"region": + "us-central", "plan": "g1-gpu-rtx4000a-8", "available": false}, {"region": "us-west", + "plan": "g1-gpu-rtx6000-1", "available": false}, {"region": "us-west", "plan": + "g1-gpu-rtx6000-2", "available": false}, {"region": "us-west", "plan": "g1-gpu-rtx6000-3", + "available": false}, {"region": "us-west", "plan": "g1-gpu-rtx6000-4", "available": + false}, {"region": "us-west", "plan": "g7-premium-2", "available": false}, {"region": + "us-west", "plan": "g7-premium-4", "available": false}, {"region": "us-west", + "plan": "g7-premium-8", "available": false}, {"region": "us-west", "plan": "g7-premium-16", + "available": false}, {"region": "us-west", "plan": "g7-premium-32", "available": + false}, {"region": "us-west", "plan": "g7-premium-48", "available": false}, + {"region": "us-west", "plan": "g7-premium-50", "available": false}, {"region": + "us-west", "plan": "g7-premium-56", "available": false}, {"region": "us-west", + "plan": "g7-premium-64", "available": false}, {"region": "us-west", "plan": + "g1-gpu-rtx4000a-1", "available": false}, {"region": "us-west", "plan": "g1-gpu-rtx4000a-2", + "available": false}, {"region": "us-west", "plan": "g1-gpu-rtx4000a-4", "available": + false}, {"region": "us-west", "plan": "g1-gpu-rtx4000a-6", "available": false}, + {"region": "us-west", "plan": "g1-gpu-rtx4000a-8", "available": false}, {"region": + "us-southeast", "plan": "g1-gpu-rtx6000-1", "available": false}, {"region": + "us-southeast", "plan": "g1-gpu-rtx6000-2", "available": false}, {"region": + "us-southeast", "plan": "g1-gpu-rtx6000-3", "available": false}, {"region": + "us-southeast", "plan": "g1-gpu-rtx6000-4", "available": false}, {"region": + "us-southeast", "plan": "g7-premium-2", "available": false}, {"region": "us-southeast", + "plan": "g7-premium-4", "available": false}, {"region": "us-southeast", "plan": + "g7-premium-8", "available": false}, {"region": "us-southeast", "plan": "g7-premium-16", + "available": false}, {"region": "us-southeast", "plan": "g7-premium-32", "available": + false}, {"region": "us-southeast", "plan": "g7-premium-48", "available": false}, + {"region": "us-southeast", "plan": "g7-premium-50", "available": false}, {"region": + "us-southeast", "plan": "g7-premium-56", "available": false}, {"region": "us-southeast", + "plan": "g7-premium-64", "available": false}, {"region": "us-southeast", "plan": + "g1-gpu-rtx4000a-1", "available": false}, {"region": "us-southeast", "plan": + "g1-gpu-rtx4000a-2", "available": false}, {"region": "us-southeast", "plan": + "g1-gpu-rtx4000a-4", "available": false}, {"region": "us-southeast", "plan": + "g1-gpu-rtx4000a-6", "available": false}, {"region": "us-southeast", "plan": + "g1-gpu-rtx4000a-8", "available": false}, {"region": "us-east", "plan": "g1-gpu-rtx6000-1", + "available": false}, {"region": "us-east", "plan": "g1-gpu-rtx6000-2", "available": + false}, {"region": "us-east", "plan": "g1-gpu-rtx6000-3", "available": false}, + {"region": "us-east", "plan": "g1-gpu-rtx6000-4", "available": false}, {"region": + "us-east", "plan": "g7-premium-2", "available": false}, {"region": "us-east", + "plan": "g7-premium-4", "available": false}, {"region": "us-east", "plan": "g7-premium-8", + "available": false}, {"region": "us-east", "plan": "g7-premium-16", "available": + false}, {"region": "us-east", "plan": "g7-premium-32", "available": false}, + {"region": "us-east", "plan": "g7-premium-48", "available": false}, {"region": + "us-east", "plan": "g7-premium-50", "available": false}, {"region": "us-east", + "plan": "g7-premium-56", "available": false}, {"region": "us-east", "plan": + "g7-premium-64", "available": false}, {"region": "us-east", "plan": "g1-gpu-rtx4000a-1", + "available": false}, {"region": "us-east", "plan": "g1-gpu-rtx4000a-2", "available": + false}, {"region": "us-east", "plan": "g1-gpu-rtx4000a-4", "available": false}, + {"region": "us-east", "plan": "g1-gpu-rtx4000a-6", "available": false}, {"region": + "us-east", "plan": "g1-gpu-rtx4000a-8", "available": false}, {"region": "eu-west", + "plan": "g1-gpu-rtx6000-1", "available": false}, {"region": "eu-west", "plan": + "g1-gpu-rtx6000-2", "available": false}, {"region": "eu-west", "plan": "g1-gpu-rtx6000-3", + "available": false}, {"region": "eu-west", "plan": "g1-gpu-rtx6000-4", "available": + false}, {"region": "eu-west", "plan": "g7-premium-2", "available": false}, {"region": + "eu-west", "plan": "g7-premium-4", "available": false}, {"region": "eu-west", + "plan": "g7-premium-8", "available": false}, {"region": "eu-west", "plan": "g7-premium-16", + "available": false}, {"region": "eu-west", "plan": "g7-premium-32", "available": + false}, {"region": "eu-west", "plan": "g7-premium-48", "available": false}, + {"region": "eu-west", "plan": "g7-premium-50", "available": false}, {"region": + "eu-west", "plan": "g7-premium-56", "available": false}, {"region": "eu-west", + "plan": "g7-premium-64", "available": false}, {"region": "eu-west", "plan": + "g1-gpu-rtx4000a-1", "available": false}, {"region": "eu-west", "plan": "g1-gpu-rtx4000a-2", + "available": false}, {"region": "eu-west", "plan": "g1-gpu-rtx4000a-4", "available": + false}, {"region": "eu-west", "plan": "g1-gpu-rtx4000a-6", "available": false}, + {"region": "eu-west", "plan": "g1-gpu-rtx4000a-8", "available": false}, {"region": + "ap-south", "plan": "g1-gpu-rtx6000-1", "available": true}, {"region": "ap-south", + "plan": "g1-gpu-rtx6000-2", "available": true}, {"region": "ap-south", "plan": + "g1-gpu-rtx6000-3", "available": true}, {"region": "ap-south", "plan": "g1-gpu-rtx6000-4", + "available": true}, {"region": "ap-south", "plan": "g7-premium-2", "available": + false}, {"region": "ap-south", "plan": "g7-premium-4", "available": false}, + {"region": "ap-south", "plan": "g7-premium-8", "available": false}, {"region": + "ap-south", "plan": "g7-premium-16", "available": false}, {"region": "ap-south", + "plan": "g7-premium-32", "available": false}, {"region": "ap-south", "plan": + "g7-premium-48", "available": false}], "page": 1, "pages": 5, "results": 486}' headers: Access-Control-Allow-Credentials: - "true" @@ -112,20 +112,26 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=900 - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:27:15 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: - Authorization, X-Filter - Authorization, X-Filter + - Accept-Encoding X-Accepted-Oauth-Scopes: - '*' X-Content-Type-Options: @@ -136,7 +142,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK @@ -155,91 +161,95 @@ interactions: url: https://api.linode.com/v4beta/regions/availability?page=2 method: GET response: - body: '{"data": [{"region": "ap-west", "plan": "premium524288.7", "available": - false}, {"region": "ap-west", "plan": "premium65536.7", "available": false}, - {"region": "ap-west", "plan": "premium8192.7", "available": false}, {"region": - "ap-west", "plan": "premium98304.7", "available": false}, {"region": "ca-central", - "plan": "gpu-rtx6000-1.1", "available": false}, {"region": "ca-central", "plan": - "gpu-rtx6000-2.1", "available": false}, {"region": "ca-central", "plan": "gpu-rtx6000-3.1", - "available": false}, {"region": "ca-central", "plan": "gpu-rtx6000-4.1", "available": - false}, {"region": "ca-central", "plan": "premium131072.7", "available": false}, - {"region": "ca-central", "plan": "premium16384.7", "available": false}, {"region": - "ca-central", "plan": "premium262144.7", "available": false}, {"region": "ca-central", - "plan": "premium32768.7", "available": false}, {"region": "ca-central", "plan": - "premium4096.7", "available": false}, {"region": "ca-central", "plan": "premium524288.7", - "available": false}, {"region": "ca-central", "plan": "premium65536.7", "available": - false}, {"region": "ca-central", "plan": "premium8192.7", "available": false}, - {"region": "ca-central", "plan": "premium98304.7", "available": false}, {"region": - "ap-southeast", "plan": "gpu-rtx6000-1.1", "available": false}, {"region": "ap-southeast", - "plan": "gpu-rtx6000-2.1", "available": false}, {"region": "ap-southeast", "plan": - "gpu-rtx6000-3.1", "available": false}, {"region": "ap-southeast", "plan": "gpu-rtx6000-4.1", - "available": false}, {"region": "ap-southeast", "plan": "premium131072.7", "available": - false}, {"region": "ap-southeast", "plan": "premium16384.7", "available": false}, - {"region": "ap-southeast", "plan": "premium262144.7", "available": false}, {"region": - "ap-southeast", "plan": "premium32768.7", "available": false}, {"region": "ap-southeast", - "plan": "premium4096.7", "available": false}, {"region": "ap-southeast", "plan": - "premium524288.7", "available": false}, {"region": "ap-southeast", "plan": "premium65536.7", - "available": false}, {"region": "ap-southeast", "plan": "premium8192.7", "available": - false}, {"region": "ap-southeast", "plan": "premium98304.7", "available": false}, - {"region": "us-iad", "plan": "gpu-rtx6000-1.1", "available": false}, {"region": - "us-iad", "plan": "gpu-rtx6000-2.1", "available": false}, {"region": "us-iad", - "plan": "gpu-rtx6000-3.1", "available": false}, {"region": "us-iad", "plan": - "gpu-rtx6000-4.1", "available": false}, {"region": "us-iad", "plan": "premium131072.7", - "available": true}, {"region": "us-iad", "plan": "premium16384.7", "available": - true}, {"region": "us-iad", "plan": "premium262144.7", "available": true}, {"region": - "us-iad", "plan": "premium32768.7", "available": true}, {"region": "us-iad", - "plan": "premium4096.7", "available": true}, {"region": "us-iad", "plan": "premium524288.7", - "available": true}, {"region": "us-iad", "plan": "premium65536.7", "available": - true}, {"region": "us-iad", "plan": "premium8192.7", "available": true}, {"region": - "us-iad", "plan": "premium98304.7", "available": true}, {"region": "us-ord", - "plan": "gpu-rtx6000-1.1", "available": false}, {"region": "us-ord", "plan": - "gpu-rtx6000-2.1", "available": false}, {"region": "us-ord", "plan": "gpu-rtx6000-3.1", - "available": false}, {"region": "us-ord", "plan": "gpu-rtx6000-4.1", "available": - false}, {"region": "us-ord", "plan": "premium131072.7", "available": true}, - {"region": "us-ord", "plan": "premium16384.7", "available": true}, {"region": - "us-ord", "plan": "premium262144.7", "available": true}, {"region": "us-ord", - "plan": "premium32768.7", "available": true}, {"region": "us-ord", "plan": "premium4096.7", - "available": true}, {"region": "us-ord", "plan": "premium524288.7", "available": - true}, {"region": "us-ord", "plan": "premium65536.7", "available": true}, {"region": - "us-ord", "plan": "premium8192.7", "available": true}, {"region": "us-ord", - "plan": "premium98304.7", "available": true}, {"region": "fr-par", "plan": "gpu-rtx6000-1.1", - "available": false}, {"region": "fr-par", "plan": "gpu-rtx6000-2.1", "available": - false}, {"region": "fr-par", "plan": "gpu-rtx6000-3.1", "available": false}, - {"region": "fr-par", "plan": "gpu-rtx6000-4.1", "available": false}, {"region": - "fr-par", "plan": "premium131072.7", "available": true}, {"region": "fr-par", - "plan": "premium16384.7", "available": true}, {"region": "fr-par", "plan": "premium262144.7", - "available": true}, {"region": "fr-par", "plan": "premium32768.7", "available": - true}, {"region": "fr-par", "plan": "premium4096.7", "available": true}, {"region": - "fr-par", "plan": "premium524288.7", "available": true}, {"region": "fr-par", - "plan": "premium65536.7", "available": true}, {"region": "fr-par", "plan": "premium8192.7", - "available": true}, {"region": "fr-par", "plan": "premium98304.7", "available": - true}, {"region": "us-sea", "plan": "gpu-rtx6000-1.1", "available": false}, - {"region": "us-sea", "plan": "gpu-rtx6000-2.1", "available": false}, {"region": - "us-sea", "plan": "gpu-rtx6000-3.1", "available": false}, {"region": "us-sea", - "plan": "gpu-rtx6000-4.1", "available": false}, {"region": "us-sea", "plan": - "premium131072.7", "available": true}, {"region": "us-sea", "plan": "premium16384.7", - "available": true}, {"region": "us-sea", "plan": "premium262144.7", "available": - true}, {"region": "us-sea", "plan": "premium32768.7", "available": true}, {"region": - "us-sea", "plan": "premium4096.7", "available": true}, {"region": "us-sea", - "plan": "premium524288.7", "available": true}, {"region": "us-sea", "plan": - "premium65536.7", "available": true}, {"region": "us-sea", "plan": "premium8192.7", - "available": true}, {"region": "us-sea", "plan": "premium98304.7", "available": - true}, {"region": "br-gru", "plan": "gpu-rtx6000-1.1", "available": false}, - {"region": "br-gru", "plan": "gpu-rtx6000-2.1", "available": false}, {"region": - "br-gru", "plan": "gpu-rtx6000-3.1", "available": false}, {"region": "br-gru", - "plan": "gpu-rtx6000-4.1", "available": false}, {"region": "br-gru", "plan": - "premium131072.7", "available": true}, {"region": "br-gru", "plan": "premium16384.7", - "available": true}, {"region": "br-gru", "plan": "premium262144.7", "available": - true}, {"region": "br-gru", "plan": "premium32768.7", "available": true}, {"region": - "br-gru", "plan": "premium4096.7", "available": true}, {"region": "br-gru", - "plan": "premium524288.7", "available": true}, {"region": "br-gru", "plan": - "premium65536.7", "available": true}, {"region": "br-gru", "plan": "premium8192.7", - "available": true}, {"region": "br-gru", "plan": "premium98304.7", "available": - true}, {"region": "nl-ams", "plan": "gpu-rtx6000-1.1", "available": false}, - {"region": "nl-ams", "plan": "gpu-rtx6000-2.1", "available": false}, {"region": - "nl-ams", "plan": "gpu-rtx6000-3.1", "available": false}, {"region": "nl-ams", - "plan": "gpu-rtx6000-4.1", "available": false}, {"region": "nl-ams", "plan": - "premium131072.7", "available": true}], "page": 2, "pages": 3, "results": 299}' + body: '{"data": [{"region": "ap-south", "plan": "g7-premium-50", "available": + false}, {"region": "ap-south", "plan": "g7-premium-56", "available": false}, + {"region": "ap-south", "plan": "g7-premium-64", "available": false}, {"region": + "ap-south", "plan": "g1-gpu-rtx4000a-1", "available": false}, {"region": "ap-south", + "plan": "g1-gpu-rtx4000a-2", "available": false}, {"region": "ap-south", "plan": + "g1-gpu-rtx4000a-4", "available": false}, {"region": "ap-south", "plan": "g1-gpu-rtx4000a-6", + "available": false}, {"region": "ap-south", "plan": "g1-gpu-rtx4000a-8", "available": + false}, {"region": "eu-central", "plan": "g1-gpu-rtx6000-1", "available": false}, + {"region": "eu-central", "plan": "g1-gpu-rtx6000-2", "available": false}, {"region": + "eu-central", "plan": "g1-gpu-rtx6000-3", "available": false}, {"region": "eu-central", + "plan": "g1-gpu-rtx6000-4", "available": false}, {"region": "eu-central", "plan": + "g7-premium-2", "available": false}, {"region": "eu-central", "plan": "g7-premium-4", + "available": false}, {"region": "eu-central", "plan": "g7-premium-8", "available": + false}, {"region": "eu-central", "plan": "g7-premium-16", "available": false}, + {"region": "eu-central", "plan": "g7-premium-32", "available": false}, {"region": + "eu-central", "plan": "g7-premium-48", "available": false}, {"region": "eu-central", + "plan": "g7-premium-50", "available": false}, {"region": "eu-central", "plan": + "g7-premium-56", "available": false}, {"region": "eu-central", "plan": "g7-premium-64", + "available": false}, {"region": "eu-central", "plan": "g1-gpu-rtx4000a-1", "available": + false}, {"region": "eu-central", "plan": "g1-gpu-rtx4000a-2", "available": false}, + {"region": "eu-central", "plan": "g1-gpu-rtx4000a-4", "available": false}, {"region": + "eu-central", "plan": "g1-gpu-rtx4000a-6", "available": false}, {"region": "eu-central", + "plan": "g1-gpu-rtx4000a-8", "available": false}, {"region": "ap-northeast", + "plan": "g1-gpu-rtx6000-1", "available": false}, {"region": "ap-northeast", + "plan": "g1-gpu-rtx6000-2", "available": false}, {"region": "ap-northeast", + "plan": "g1-gpu-rtx6000-3", "available": false}, {"region": "ap-northeast", + "plan": "g1-gpu-rtx6000-4", "available": false}, {"region": "ap-northeast", + "plan": "g7-premium-2", "available": false}, {"region": "ap-northeast", "plan": + "g7-premium-4", "available": false}, {"region": "ap-northeast", "plan": "g7-premium-8", + "available": false}, {"region": "ap-northeast", "plan": "g7-premium-16", "available": + false}, {"region": "ap-northeast", "plan": "g7-premium-32", "available": false}, + {"region": "ap-northeast", "plan": "g7-premium-48", "available": false}, {"region": + "ap-northeast", "plan": "g7-premium-50", "available": false}, {"region": "ap-northeast", + "plan": "g7-premium-56", "available": false}, {"region": "ap-northeast", "plan": + "g7-premium-64", "available": false}, {"region": "ap-northeast", "plan": "g1-gpu-rtx4000a-1", + "available": false}, {"region": "ap-northeast", "plan": "g1-gpu-rtx4000a-2", + "available": false}, {"region": "ap-northeast", "plan": "g1-gpu-rtx4000a-4", + "available": false}, {"region": "ap-northeast", "plan": "g1-gpu-rtx4000a-6", + "available": false}, {"region": "ap-northeast", "plan": "g1-gpu-rtx4000a-8", + "available": false}, {"region": "ap-west", "plan": "g1-gpu-rtx6000-1", "available": + true}, {"region": "ap-west", "plan": "g1-gpu-rtx6000-2", "available": true}, + {"region": "ap-west", "plan": "g1-gpu-rtx6000-3", "available": true}, {"region": + "ap-west", "plan": "g1-gpu-rtx6000-4", "available": true}, {"region": "ap-west", + "plan": "g7-premium-2", "available": false}, {"region": "ap-west", "plan": "g7-premium-4", + "available": false}, {"region": "ap-west", "plan": "g7-premium-8", "available": + false}, {"region": "ap-west", "plan": "g7-premium-16", "available": false}, + {"region": "ap-west", "plan": "g7-premium-32", "available": false}, {"region": + "ap-west", "plan": "g7-premium-48", "available": false}, {"region": "ap-west", + "plan": "g7-premium-50", "available": false}, {"region": "ap-west", "plan": + "g7-premium-56", "available": false}, {"region": "ap-west", "plan": "g7-premium-64", + "available": false}, {"region": "ap-west", "plan": "g1-gpu-rtx4000a-1", "available": + false}, {"region": "ap-west", "plan": "g1-gpu-rtx4000a-2", "available": false}, + {"region": "ap-west", "plan": "g1-gpu-rtx4000a-4", "available": false}, {"region": + "ap-west", "plan": "g1-gpu-rtx4000a-6", "available": false}, {"region": "ap-west", + "plan": "g1-gpu-rtx4000a-8", "available": false}, {"region": "ca-central", "plan": + "g1-gpu-rtx6000-1", "available": false}, {"region": "ca-central", "plan": "g1-gpu-rtx6000-2", + "available": false}, {"region": "ca-central", "plan": "g1-gpu-rtx6000-3", "available": + false}, {"region": "ca-central", "plan": "g1-gpu-rtx6000-4", "available": false}, + {"region": "ca-central", "plan": "g7-premium-2", "available": false}, {"region": + "ca-central", "plan": "g7-premium-4", "available": false}, {"region": "ca-central", + "plan": "g7-premium-8", "available": false}, {"region": "ca-central", "plan": + "g7-premium-16", "available": false}, {"region": "ca-central", "plan": "g7-premium-32", + "available": false}, {"region": "ca-central", "plan": "g7-premium-48", "available": + false}, {"region": "ca-central", "plan": "g7-premium-50", "available": false}, + {"region": "ca-central", "plan": "g7-premium-56", "available": false}, {"region": + "ca-central", "plan": "g7-premium-64", "available": false}, {"region": "ca-central", + "plan": "g1-gpu-rtx4000a-1", "available": false}, {"region": "ca-central", "plan": + "g1-gpu-rtx4000a-2", "available": false}, {"region": "ca-central", "plan": "g1-gpu-rtx4000a-4", + "available": false}, {"region": "ca-central", "plan": "g1-gpu-rtx4000a-6", "available": + false}, {"region": "ca-central", "plan": "g1-gpu-rtx4000a-8", "available": false}, + {"region": "ap-southeast", "plan": "g1-gpu-rtx6000-1", "available": false}, + {"region": "ap-southeast", "plan": "g1-gpu-rtx6000-2", "available": false}, + {"region": "ap-southeast", "plan": "g1-gpu-rtx6000-3", "available": false}, + {"region": "ap-southeast", "plan": "g1-gpu-rtx6000-4", "available": false}, + {"region": "ap-southeast", "plan": "g7-premium-2", "available": false}, {"region": + "ap-southeast", "plan": "g7-premium-4", "available": false}, {"region": "ap-southeast", + "plan": "g7-premium-8", "available": false}, {"region": "ap-southeast", "plan": + "g7-premium-16", "available": false}, {"region": "ap-southeast", "plan": "g7-premium-32", + "available": false}, {"region": "ap-southeast", "plan": "g7-premium-48", "available": + false}, {"region": "ap-southeast", "plan": "g7-premium-50", "available": false}, + {"region": "ap-southeast", "plan": "g7-premium-56", "available": false}, {"region": + "ap-southeast", "plan": "g7-premium-64", "available": false}, {"region": "ap-southeast", + "plan": "g1-gpu-rtx4000a-1", "available": false}, {"region": "ap-southeast", + "plan": "g1-gpu-rtx4000a-2", "available": false}, {"region": "ap-southeast", + "plan": "g1-gpu-rtx4000a-4", "available": false}, {"region": "ap-southeast", + "plan": "g1-gpu-rtx4000a-6", "available": false}, {"region": "ap-southeast", + "plan": "g1-gpu-rtx4000a-8", "available": false}, {"region": "us-iad", "plan": + "g1-gpu-rtx6000-1", "available": false}, {"region": "us-iad", "plan": "g1-gpu-rtx6000-2", + "available": false}], "page": 2, "pages": 5, "results": 486}' headers: Access-Control-Allow-Credentials: - "true" @@ -251,20 +261,26 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=900 - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:27:15 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: - Authorization, X-Filter - Authorization, X-Filter + - Accept-Encoding X-Accepted-Oauth-Scopes: - '*' X-Content-Type-Options: @@ -275,7 +291,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK @@ -294,90 +310,236 @@ interactions: url: https://api.linode.com/v4beta/regions/availability?page=3 method: GET response: - body: '{"data": [{"region": "nl-ams", "plan": "premium16384.7", "available": true}, - {"region": "nl-ams", "plan": "premium262144.7", "available": true}, {"region": - "nl-ams", "plan": "premium32768.7", "available": true}, {"region": "nl-ams", - "plan": "premium4096.7", "available": true}, {"region": "nl-ams", "plan": "premium524288.7", - "available": true}, {"region": "nl-ams", "plan": "premium65536.7", "available": - true}, {"region": "nl-ams", "plan": "premium8192.7", "available": true}, {"region": - "nl-ams", "plan": "premium98304.7", "available": true}, {"region": "se-sto", - "plan": "gpu-rtx6000-1.1", "available": false}, {"region": "se-sto", "plan": - "gpu-rtx6000-2.1", "available": false}, {"region": "se-sto", "plan": "gpu-rtx6000-3.1", - "available": false}, {"region": "se-sto", "plan": "gpu-rtx6000-4.1", "available": - false}, {"region": "se-sto", "plan": "premium131072.7", "available": true}, - {"region": "se-sto", "plan": "premium16384.7", "available": true}, {"region": - "se-sto", "plan": "premium262144.7", "available": true}, {"region": "se-sto", - "plan": "premium32768.7", "available": true}, {"region": "se-sto", "plan": "premium4096.7", - "available": true}, {"region": "se-sto", "plan": "premium524288.7", "available": - true}, {"region": "se-sto", "plan": "premium65536.7", "available": true}, {"region": - "se-sto", "plan": "premium8192.7", "available": true}, {"region": "se-sto", - "plan": "premium98304.7", "available": true}, {"region": "in-maa", "plan": "gpu-rtx6000-1.1", - "available": false}, {"region": "in-maa", "plan": "gpu-rtx6000-2.1", "available": - false}, {"region": "in-maa", "plan": "gpu-rtx6000-3.1", "available": false}, - {"region": "in-maa", "plan": "gpu-rtx6000-4.1", "available": false}, {"region": - "in-maa", "plan": "premium131072.7", "available": true}, {"region": "in-maa", - "plan": "premium16384.7", "available": true}, {"region": "in-maa", "plan": "premium262144.7", - "available": true}, {"region": "in-maa", "plan": "premium32768.7", "available": - true}, {"region": "in-maa", "plan": "premium4096.7", "available": true}, {"region": - "in-maa", "plan": "premium524288.7", "available": true}, {"region": "in-maa", - "plan": "premium65536.7", "available": true}, {"region": "in-maa", "plan": "premium8192.7", - "available": true}, {"region": "in-maa", "plan": "premium98304.7", "available": - true}, {"region": "jp-osa", "plan": "gpu-rtx6000-1.1", "available": false}, - {"region": "jp-osa", "plan": "gpu-rtx6000-2.1", "available": false}, {"region": - "jp-osa", "plan": "gpu-rtx6000-3.1", "available": false}, {"region": "jp-osa", - "plan": "gpu-rtx6000-4.1", "available": false}, {"region": "jp-osa", "plan": - "premium131072.7", "available": true}, {"region": "jp-osa", "plan": "premium16384.7", - "available": true}, {"region": "jp-osa", "plan": "premium262144.7", "available": - true}, {"region": "jp-osa", "plan": "premium32768.7", "available": true}, {"region": - "jp-osa", "plan": "premium4096.7", "available": true}, {"region": "jp-osa", - "plan": "premium524288.7", "available": true}, {"region": "jp-osa", "plan": - "premium65536.7", "available": true}, {"region": "jp-osa", "plan": "premium8192.7", - "available": true}, {"region": "jp-osa", "plan": "premium98304.7", "available": - true}, {"region": "it-mil", "plan": "gpu-rtx6000-1.1", "available": false}, - {"region": "it-mil", "plan": "gpu-rtx6000-2.1", "available": false}, {"region": - "it-mil", "plan": "gpu-rtx6000-3.1", "available": false}, {"region": "it-mil", - "plan": "gpu-rtx6000-4.1", "available": false}, {"region": "it-mil", "plan": - "premium131072.7", "available": true}, {"region": "it-mil", "plan": "premium16384.7", - "available": true}, {"region": "it-mil", "plan": "premium262144.7", "available": - true}, {"region": "it-mil", "plan": "premium32768.7", "available": true}, {"region": - "it-mil", "plan": "premium4096.7", "available": true}, {"region": "it-mil", - "plan": "premium524288.7", "available": true}, {"region": "it-mil", "plan": - "premium65536.7", "available": true}, {"region": "it-mil", "plan": "premium8192.7", - "available": true}, {"region": "it-mil", "plan": "premium98304.7", "available": - true}, {"region": "us-mia", "plan": "gpu-rtx6000-1.1", "available": false}, - {"region": "us-mia", "plan": "gpu-rtx6000-2.1", "available": false}, {"region": - "us-mia", "plan": "gpu-rtx6000-3.1", "available": false}, {"region": "us-mia", - "plan": "gpu-rtx6000-4.1", "available": false}, {"region": "us-mia", "plan": - "premium131072.7", "available": true}, {"region": "us-mia", "plan": "premium16384.7", - "available": true}, {"region": "us-mia", "plan": "premium262144.7", "available": - true}, {"region": "us-mia", "plan": "premium32768.7", "available": true}, {"region": - "us-mia", "plan": "premium4096.7", "available": true}, {"region": "us-mia", - "plan": "premium524288.7", "available": true}, {"region": "us-mia", "plan": - "premium65536.7", "available": true}, {"region": "us-mia", "plan": "premium8192.7", - "available": true}, {"region": "us-mia", "plan": "premium98304.7", "available": - true}, {"region": "id-cgk", "plan": "gpu-rtx6000-1.1", "available": false}, - {"region": "id-cgk", "plan": "gpu-rtx6000-2.1", "available": false}, {"region": - "id-cgk", "plan": "gpu-rtx6000-3.1", "available": false}, {"region": "id-cgk", - "plan": "gpu-rtx6000-4.1", "available": false}, {"region": "id-cgk", "plan": - "premium131072.7", "available": true}, {"region": "id-cgk", "plan": "premium16384.7", - "available": true}, {"region": "id-cgk", "plan": "premium262144.7", "available": - true}, {"region": "id-cgk", "plan": "premium32768.7", "available": true}, {"region": - "id-cgk", "plan": "premium4096.7", "available": true}, {"region": "id-cgk", - "plan": "premium524288.7", "available": true}, {"region": "id-cgk", "plan": - "premium65536.7", "available": true}, {"region": "id-cgk", "plan": "premium8192.7", - "available": true}, {"region": "id-cgk", "plan": "premium98304.7", "available": - true}, {"region": "us-lax", "plan": "gpu-rtx6000-1.1", "available": false}, - {"region": "us-lax", "plan": "gpu-rtx6000-2.1", "available": false}, {"region": - "us-lax", "plan": "gpu-rtx6000-3.1", "available": false}, {"region": "us-lax", - "plan": "gpu-rtx6000-4.1", "available": false}, {"region": "us-lax", "plan": - "premium131072.7", "available": true}, {"region": "us-lax", "plan": "premium16384.7", - "available": true}, {"region": "us-lax", "plan": "premium262144.7", "available": - true}, {"region": "us-lax", "plan": "premium32768.7", "available": true}, {"region": - "us-lax", "plan": "premium4096.7", "available": true}, {"region": "us-lax", - "plan": "premium524288.7", "available": true}, {"region": "us-lax", "plan": - "premium65536.7", "available": true}, {"region": "us-lax", "plan": "premium8192.7", - "available": true}, {"region": "us-lax", "plan": "premium98304.7", "available": - true}], "page": 3, "pages": 3, "results": 299}' + body: '{"data": [{"region": "us-iad", "plan": "g1-gpu-rtx6000-3", "available": + false}, {"region": "us-iad", "plan": "g1-gpu-rtx6000-4", "available": false}, + {"region": "us-iad", "plan": "g7-premium-2", "available": true}, {"region": + "us-iad", "plan": "g7-premium-4", "available": true}, {"region": "us-iad", "plan": + "g7-premium-8", "available": true}, {"region": "us-iad", "plan": "g7-premium-16", + "available": true}, {"region": "us-iad", "plan": "g7-premium-32", "available": + true}, {"region": "us-iad", "plan": "g7-premium-48", "available": true}, {"region": + "us-iad", "plan": "g7-premium-50", "available": true}, {"region": "us-iad", + "plan": "g7-premium-56", "available": true}, {"region": "us-iad", "plan": "g7-premium-64", + "available": true}, {"region": "us-iad", "plan": "g1-gpu-rtx4000a-1", "available": + false}, {"region": "us-iad", "plan": "g1-gpu-rtx4000a-2", "available": false}, + {"region": "us-iad", "plan": "g1-gpu-rtx4000a-4", "available": false}, {"region": + "us-iad", "plan": "g1-gpu-rtx4000a-6", "available": false}, {"region": "us-iad", + "plan": "g1-gpu-rtx4000a-8", "available": false}, {"region": "us-ord", "plan": + "g1-gpu-rtx6000-1", "available": false}, {"region": "us-ord", "plan": "g1-gpu-rtx6000-2", + "available": false}, {"region": "us-ord", "plan": "g1-gpu-rtx6000-3", "available": + false}, {"region": "us-ord", "plan": "g1-gpu-rtx6000-4", "available": false}, + {"region": "us-ord", "plan": "g7-premium-2", "available": true}, {"region": + "us-ord", "plan": "g7-premium-4", "available": true}, {"region": "us-ord", "plan": + "g7-premium-8", "available": true}, {"region": "us-ord", "plan": "g7-premium-16", + "available": true}, {"region": "us-ord", "plan": "g7-premium-32", "available": + true}, {"region": "us-ord", "plan": "g7-premium-48", "available": true}, {"region": + "us-ord", "plan": "g7-premium-50", "available": true}, {"region": "us-ord", + "plan": "g7-premium-56", "available": true}, {"region": "us-ord", "plan": "g7-premium-64", + "available": true}, {"region": "us-ord", "plan": "g1-gpu-rtx4000a-1", "available": + true}, {"region": "us-ord", "plan": "g1-gpu-rtx4000a-2", "available": true}, + {"region": "us-ord", "plan": "g1-gpu-rtx4000a-4", "available": true}, {"region": + "us-ord", "plan": "g1-gpu-rtx4000a-6", "available": true}, {"region": "us-ord", + "plan": "g1-gpu-rtx4000a-8", "available": true}, {"region": "fr-par", "plan": + "g1-gpu-rtx6000-1", "available": false}, {"region": "fr-par", "plan": "g1-gpu-rtx6000-2", + "available": false}, {"region": "fr-par", "plan": "g1-gpu-rtx6000-3", "available": + false}, {"region": "fr-par", "plan": "g1-gpu-rtx6000-4", "available": false}, + {"region": "fr-par", "plan": "g7-premium-2", "available": true}, {"region": + "fr-par", "plan": "g7-premium-4", "available": true}, {"region": "fr-par", "plan": + "g7-premium-8", "available": true}, {"region": "fr-par", "plan": "g7-premium-16", + "available": true}, {"region": "fr-par", "plan": "g7-premium-32", "available": + true}, {"region": "fr-par", "plan": "g7-premium-48", "available": true}, {"region": + "fr-par", "plan": "g7-premium-50", "available": true}, {"region": "fr-par", + "plan": "g7-premium-56", "available": true}, {"region": "fr-par", "plan": "g7-premium-64", + "available": true}, {"region": "fr-par", "plan": "g1-gpu-rtx4000a-1", "available": + true}, {"region": "fr-par", "plan": "g1-gpu-rtx4000a-2", "available": true}, + {"region": "fr-par", "plan": "g1-gpu-rtx4000a-4", "available": true}, {"region": + "fr-par", "plan": "g1-gpu-rtx4000a-6", "available": false}, {"region": "fr-par", + "plan": "g1-gpu-rtx4000a-8", "available": false}, {"region": "us-sea", "plan": + "g1-gpu-rtx6000-1", "available": false}, {"region": "us-sea", "plan": "g1-gpu-rtx6000-2", + "available": false}, {"region": "us-sea", "plan": "g1-gpu-rtx6000-3", "available": + false}, {"region": "us-sea", "plan": "g1-gpu-rtx6000-4", "available": false}, + {"region": "us-sea", "plan": "g7-premium-2", "available": true}, {"region": + "us-sea", "plan": "g7-premium-4", "available": true}, {"region": "us-sea", "plan": + "g7-premium-8", "available": true}, {"region": "us-sea", "plan": "g7-premium-16", + "available": true}, {"region": "us-sea", "plan": "g7-premium-32", "available": + true}, {"region": "us-sea", "plan": "g7-premium-48", "available": true}, {"region": + "us-sea", "plan": "g7-premium-50", "available": true}, {"region": "us-sea", + "plan": "g7-premium-56", "available": true}, {"region": "us-sea", "plan": "g7-premium-64", + "available": false}, {"region": "us-sea", "plan": "g1-gpu-rtx4000a-1", "available": + true}, {"region": "us-sea", "plan": "g1-gpu-rtx4000a-2", "available": true}, + {"region": "us-sea", "plan": "g1-gpu-rtx4000a-4", "available": true}, {"region": + "us-sea", "plan": "g1-gpu-rtx4000a-6", "available": true}, {"region": "us-sea", + "plan": "g1-gpu-rtx4000a-8", "available": true}, {"region": "br-gru", "plan": + "g1-gpu-rtx6000-1", "available": false}, {"region": "br-gru", "plan": "g1-gpu-rtx6000-2", + "available": false}, {"region": "br-gru", "plan": "g1-gpu-rtx6000-3", "available": + false}, {"region": "br-gru", "plan": "g1-gpu-rtx6000-4", "available": false}, + {"region": "br-gru", "plan": "g7-premium-2", "available": true}, {"region": + "br-gru", "plan": "g7-premium-4", "available": true}, {"region": "br-gru", "plan": + "g7-premium-8", "available": true}, {"region": "br-gru", "plan": "g7-premium-16", + "available": true}, {"region": "br-gru", "plan": "g7-premium-32", "available": + true}, {"region": "br-gru", "plan": "g7-premium-48", "available": true}, {"region": + "br-gru", "plan": "g7-premium-50", "available": true}, {"region": "br-gru", + "plan": "g7-premium-56", "available": true}, {"region": "br-gru", "plan": "g7-premium-64", + "available": true}, {"region": "br-gru", "plan": "g1-gpu-rtx4000a-1", "available": + false}, {"region": "br-gru", "plan": "g1-gpu-rtx4000a-2", "available": false}, + {"region": "br-gru", "plan": "g1-gpu-rtx4000a-4", "available": false}, {"region": + "br-gru", "plan": "g1-gpu-rtx4000a-6", "available": false}, {"region": "br-gru", + "plan": "g1-gpu-rtx4000a-8", "available": false}, {"region": "nl-ams", "plan": + "g1-gpu-rtx6000-1", "available": false}, {"region": "nl-ams", "plan": "g1-gpu-rtx6000-2", + "available": false}, {"region": "nl-ams", "plan": "g1-gpu-rtx6000-3", "available": + false}, {"region": "nl-ams", "plan": "g1-gpu-rtx6000-4", "available": false}, + {"region": "nl-ams", "plan": "g7-premium-2", "available": true}, {"region": + "nl-ams", "plan": "g7-premium-4", "available": true}, {"region": "nl-ams", "plan": + "g7-premium-8", "available": true}, {"region": "nl-ams", "plan": "g7-premium-16", + "available": true}, {"region": "nl-ams", "plan": "g7-premium-32", "available": + true}, {"region": "nl-ams", "plan": "g7-premium-48", "available": true}, {"region": + "nl-ams", "plan": "g7-premium-50", "available": true}, {"region": "nl-ams", + "plan": "g7-premium-56", "available": true}], "page": 3, "pages": 5, "results": + 486}' + headers: + Access-Control-Allow-Credentials: + - "true" + Access-Control-Allow-Headers: + - Authorization, Origin, X-Requested-With, Content-Type, Accept, X-Filter + Access-Control-Allow-Methods: + - HEAD, GET, OPTIONS, POST, PUT, DELETE + Access-Control-Allow-Origin: + - '*' + Access-Control-Expose-Headers: + - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' + Cache-Control: + - max-age=0, no-cache, no-store + Connection: + - keep-alive + Content-Security-Policy: + - default-src 'none' + Content-Type: + - application/json + Expires: + - Thu, 11 Jul 2024 18:27:15 GMT + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Authorization, X-Filter + - Authorization, X-Filter + - Accept-Encoding + X-Accepted-Oauth-Scopes: + - '*' + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - DENY + - DENY + X-Oauth-Scopes: + - '*' + X-Ratelimit-Limit: + - "400" + X-Xss-Protection: + - 1; mode=block + status: 200 OK + code: 200 + duration: "" +- request: + body: "" + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - linodego/dev https://github.com/linode/linodego + url: https://api.linode.com/v4beta/regions/availability?page=4 + method: GET + response: + body: '{"data": [{"region": "nl-ams", "plan": "g7-premium-64", "available": false}, + {"region": "nl-ams", "plan": "g1-gpu-rtx4000a-1", "available": false}, {"region": + "nl-ams", "plan": "g1-gpu-rtx4000a-2", "available": false}, {"region": "nl-ams", + "plan": "g1-gpu-rtx4000a-4", "available": false}, {"region": "nl-ams", "plan": + "g1-gpu-rtx4000a-6", "available": false}, {"region": "nl-ams", "plan": "g1-gpu-rtx4000a-8", + "available": false}, {"region": "se-sto", "plan": "g1-gpu-rtx6000-1", "available": + false}, {"region": "se-sto", "plan": "g1-gpu-rtx6000-2", "available": false}, + {"region": "se-sto", "plan": "g1-gpu-rtx6000-3", "available": false}, {"region": + "se-sto", "plan": "g1-gpu-rtx6000-4", "available": false}, {"region": "se-sto", + "plan": "g7-premium-2", "available": true}, {"region": "se-sto", "plan": "g7-premium-4", + "available": true}, {"region": "se-sto", "plan": "g7-premium-8", "available": + true}, {"region": "se-sto", "plan": "g7-premium-16", "available": true}, {"region": + "se-sto", "plan": "g7-premium-32", "available": true}, {"region": "se-sto", + "plan": "g7-premium-48", "available": true}, {"region": "se-sto", "plan": "g7-premium-50", + "available": true}, {"region": "se-sto", "plan": "g7-premium-56", "available": + true}, {"region": "se-sto", "plan": "g7-premium-64", "available": true}, {"region": + "se-sto", "plan": "g1-gpu-rtx4000a-1", "available": false}, {"region": "se-sto", + "plan": "g1-gpu-rtx4000a-2", "available": false}, {"region": "se-sto", "plan": + "g1-gpu-rtx4000a-4", "available": false}, {"region": "se-sto", "plan": "g1-gpu-rtx4000a-6", + "available": false}, {"region": "se-sto", "plan": "g1-gpu-rtx4000a-8", "available": + false}, {"region": "es-mad", "plan": "g1-gpu-rtx6000-1", "available": false}, + {"region": "es-mad", "plan": "g1-gpu-rtx6000-2", "available": false}, {"region": + "es-mad", "plan": "g1-gpu-rtx6000-3", "available": false}, {"region": "es-mad", + "plan": "g1-gpu-rtx6000-4", "available": false}, {"region": "es-mad", "plan": + "g7-premium-2", "available": true}, {"region": "es-mad", "plan": "g7-premium-4", + "available": true}, {"region": "es-mad", "plan": "g7-premium-8", "available": + true}, {"region": "es-mad", "plan": "g7-premium-16", "available": true}, {"region": + "es-mad", "plan": "g7-premium-32", "available": true}, {"region": "es-mad", + "plan": "g7-premium-48", "available": true}, {"region": "es-mad", "plan": "g7-premium-50", + "available": true}, {"region": "es-mad", "plan": "g7-premium-56", "available": + true}, {"region": "es-mad", "plan": "g7-premium-64", "available": true}, {"region": + "es-mad", "plan": "g1-gpu-rtx4000a-1", "available": false}, {"region": "es-mad", + "plan": "g1-gpu-rtx4000a-2", "available": false}, {"region": "es-mad", "plan": + "g1-gpu-rtx4000a-4", "available": false}, {"region": "es-mad", "plan": "g1-gpu-rtx4000a-6", + "available": false}, {"region": "es-mad", "plan": "g1-gpu-rtx4000a-8", "available": + false}, {"region": "in-maa", "plan": "g1-gpu-rtx6000-1", "available": false}, + {"region": "in-maa", "plan": "g1-gpu-rtx6000-2", "available": false}, {"region": + "in-maa", "plan": "g1-gpu-rtx6000-3", "available": false}, {"region": "in-maa", + "plan": "g1-gpu-rtx6000-4", "available": false}, {"region": "in-maa", "plan": + "g7-premium-2", "available": true}, {"region": "in-maa", "plan": "g7-premium-4", + "available": true}, {"region": "in-maa", "plan": "g7-premium-8", "available": + true}, {"region": "in-maa", "plan": "g7-premium-16", "available": true}, {"region": + "in-maa", "plan": "g7-premium-32", "available": true}, {"region": "in-maa", + "plan": "g7-premium-48", "available": true}, {"region": "in-maa", "plan": "g7-premium-50", + "available": true}, {"region": "in-maa", "plan": "g7-premium-56", "available": + true}, {"region": "in-maa", "plan": "g7-premium-64", "available": true}, {"region": + "in-maa", "plan": "g1-gpu-rtx4000a-1", "available": false}, {"region": "in-maa", + "plan": "g1-gpu-rtx4000a-2", "available": false}, {"region": "in-maa", "plan": + "g1-gpu-rtx4000a-4", "available": false}, {"region": "in-maa", "plan": "g1-gpu-rtx4000a-6", + "available": false}, {"region": "in-maa", "plan": "g1-gpu-rtx4000a-8", "available": + false}, {"region": "jp-osa", "plan": "g1-gpu-rtx6000-1", "available": false}, + {"region": "jp-osa", "plan": "g1-gpu-rtx6000-2", "available": false}, {"region": + "jp-osa", "plan": "g1-gpu-rtx6000-3", "available": false}, {"region": "jp-osa", + "plan": "g1-gpu-rtx6000-4", "available": false}, {"region": "jp-osa", "plan": + "g7-premium-2", "available": true}, {"region": "jp-osa", "plan": "g7-premium-4", + "available": true}, {"region": "jp-osa", "plan": "g7-premium-8", "available": + true}, {"region": "jp-osa", "plan": "g7-premium-16", "available": true}, {"region": + "jp-osa", "plan": "g7-premium-32", "available": true}, {"region": "jp-osa", + "plan": "g7-premium-48", "available": true}, {"region": "jp-osa", "plan": "g7-premium-50", + "available": true}, {"region": "jp-osa", "plan": "g7-premium-56", "available": + true}, {"region": "jp-osa", "plan": "g7-premium-64", "available": true}, {"region": + "jp-osa", "plan": "g1-gpu-rtx4000a-1", "available": true}, {"region": "jp-osa", + "plan": "g1-gpu-rtx4000a-2", "available": true}, {"region": "jp-osa", "plan": + "g1-gpu-rtx4000a-4", "available": true}, {"region": "jp-osa", "plan": "g1-gpu-rtx4000a-6", + "available": true}, {"region": "jp-osa", "plan": "g1-gpu-rtx4000a-8", "available": + true}, {"region": "it-mil", "plan": "g1-gpu-rtx6000-1", "available": false}, + {"region": "it-mil", "plan": "g1-gpu-rtx6000-2", "available": false}, {"region": + "it-mil", "plan": "g1-gpu-rtx6000-3", "available": false}, {"region": "it-mil", + "plan": "g1-gpu-rtx6000-4", "available": false}, {"region": "it-mil", "plan": + "g7-premium-2", "available": true}, {"region": "it-mil", "plan": "g7-premium-4", + "available": true}, {"region": "it-mil", "plan": "g7-premium-8", "available": + true}, {"region": "it-mil", "plan": "g7-premium-16", "available": true}, {"region": + "it-mil", "plan": "g7-premium-32", "available": true}, {"region": "it-mil", + "plan": "g7-premium-48", "available": true}, {"region": "it-mil", "plan": "g7-premium-50", + "available": true}, {"region": "it-mil", "plan": "g7-premium-56", "available": + true}, {"region": "it-mil", "plan": "g7-premium-64", "available": false}, {"region": + "it-mil", "plan": "g1-gpu-rtx4000a-1", "available": false}, {"region": "it-mil", + "plan": "g1-gpu-rtx4000a-2", "available": false}, {"region": "it-mil", "plan": + "g1-gpu-rtx4000a-4", "available": false}, {"region": "it-mil", "plan": "g1-gpu-rtx4000a-6", + "available": false}, {"region": "it-mil", "plan": "g1-gpu-rtx4000a-8", "available": + false}, {"region": "us-mia", "plan": "g1-gpu-rtx6000-1", "available": false}, + {"region": "us-mia", "plan": "g1-gpu-rtx6000-2", "available": false}, {"region": + "us-mia", "plan": "g1-gpu-rtx6000-3", "available": false}, {"region": "us-mia", + "plan": "g1-gpu-rtx6000-4", "available": false}], "page": 4, "pages": 5, "results": + 486}' headers: Access-Control-Allow-Credentials: - "true" @@ -389,20 +551,159 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' + Cache-Control: + - max-age=0, no-cache, no-store + Connection: + - keep-alive + Content-Security-Policy: + - default-src 'none' + Content-Type: + - application/json + Expires: + - Thu, 11 Jul 2024 18:27:15 GMT + Pragma: + - no-cache + Strict-Transport-Security: + - max-age=31536000 + Vary: + - Authorization, X-Filter + - Authorization, X-Filter + - Accept-Encoding + X-Accepted-Oauth-Scopes: + - '*' + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - DENY + - DENY + X-Oauth-Scopes: + - '*' + X-Ratelimit-Limit: + - "400" + X-Xss-Protection: + - 1; mode=block + status: 200 OK + code: 200 + duration: "" +- request: + body: "" + form: {} + headers: + Accept: + - application/json + Content-Type: + - application/json + User-Agent: + - linodego/dev https://github.com/linode/linodego + url: https://api.linode.com/v4beta/regions/availability?page=5 + method: GET + response: + body: '{"data": [{"region": "us-mia", "plan": "g7-premium-2", "available": true}, + {"region": "us-mia", "plan": "g7-premium-4", "available": true}, {"region": + "us-mia", "plan": "g7-premium-8", "available": true}, {"region": "us-mia", "plan": + "g7-premium-16", "available": true}, {"region": "us-mia", "plan": "g7-premium-32", + "available": true}, {"region": "us-mia", "plan": "g7-premium-48", "available": + true}, {"region": "us-mia", "plan": "g7-premium-50", "available": true}, {"region": + "us-mia", "plan": "g7-premium-56", "available": true}, {"region": "us-mia", + "plan": "g7-premium-64", "available": false}, {"region": "us-mia", "plan": "g1-gpu-rtx4000a-1", + "available": false}, {"region": "us-mia", "plan": "g1-gpu-rtx4000a-2", "available": + false}, {"region": "us-mia", "plan": "g1-gpu-rtx4000a-4", "available": false}, + {"region": "us-mia", "plan": "g1-gpu-rtx4000a-6", "available": false}, {"region": + "us-mia", "plan": "g1-gpu-rtx4000a-8", "available": false}, {"region": "id-cgk", + "plan": "g1-gpu-rtx6000-1", "available": false}, {"region": "id-cgk", "plan": + "g1-gpu-rtx6000-2", "available": false}, {"region": "id-cgk", "plan": "g1-gpu-rtx6000-3", + "available": false}, {"region": "id-cgk", "plan": "g1-gpu-rtx6000-4", "available": + false}, {"region": "id-cgk", "plan": "g7-premium-2", "available": true}, {"region": + "id-cgk", "plan": "g7-premium-4", "available": true}, {"region": "id-cgk", "plan": + "g7-premium-8", "available": true}, {"region": "id-cgk", "plan": "g7-premium-16", + "available": true}, {"region": "id-cgk", "plan": "g7-premium-32", "available": + true}, {"region": "id-cgk", "plan": "g7-premium-48", "available": true}, {"region": + "id-cgk", "plan": "g7-premium-50", "available": true}, {"region": "id-cgk", + "plan": "g7-premium-56", "available": true}, {"region": "id-cgk", "plan": "g7-premium-64", + "available": true}, {"region": "id-cgk", "plan": "g1-gpu-rtx4000a-1", "available": + false}, {"region": "id-cgk", "plan": "g1-gpu-rtx4000a-2", "available": false}, + {"region": "id-cgk", "plan": "g1-gpu-rtx4000a-4", "available": false}, {"region": + "id-cgk", "plan": "g1-gpu-rtx4000a-6", "available": false}, {"region": "id-cgk", + "plan": "g1-gpu-rtx4000a-8", "available": false}, {"region": "us-lax", "plan": + "g1-gpu-rtx6000-1", "available": false}, {"region": "us-lax", "plan": "g1-gpu-rtx6000-2", + "available": false}, {"region": "us-lax", "plan": "g1-gpu-rtx6000-3", "available": + false}, {"region": "us-lax", "plan": "g1-gpu-rtx6000-4", "available": false}, + {"region": "us-lax", "plan": "g7-premium-2", "available": true}, {"region": + "us-lax", "plan": "g7-premium-4", "available": true}, {"region": "us-lax", "plan": + "g7-premium-8", "available": true}, {"region": "us-lax", "plan": "g7-premium-16", + "available": true}, {"region": "us-lax", "plan": "g7-premium-32", "available": + true}, {"region": "us-lax", "plan": "g7-premium-48", "available": true}, {"region": + "us-lax", "plan": "g7-premium-50", "available": true}, {"region": "us-lax", + "plan": "g7-premium-56", "available": true}, {"region": "us-lax", "plan": "g7-premium-64", + "available": true}, {"region": "us-lax", "plan": "g1-gpu-rtx4000a-1", "available": + false}, {"region": "us-lax", "plan": "g1-gpu-rtx4000a-2", "available": false}, + {"region": "us-lax", "plan": "g1-gpu-rtx4000a-4", "available": false}, {"region": + "us-lax", "plan": "g1-gpu-rtx4000a-6", "available": false}, {"region": "us-lax", + "plan": "g1-gpu-rtx4000a-8", "available": false}, {"region": "gb-lon", "plan": + "g1-gpu-rtx6000-1", "available": false}, {"region": "gb-lon", "plan": "g1-gpu-rtx6000-2", + "available": false}, {"region": "gb-lon", "plan": "g1-gpu-rtx6000-3", "available": + false}, {"region": "gb-lon", "plan": "g1-gpu-rtx6000-4", "available": false}, + {"region": "gb-lon", "plan": "g7-premium-2", "available": true}, {"region": + "gb-lon", "plan": "g7-premium-4", "available": true}, {"region": "gb-lon", "plan": + "g7-premium-8", "available": true}, {"region": "gb-lon", "plan": "g7-premium-16", + "available": true}, {"region": "gb-lon", "plan": "g7-premium-32", "available": + true}, {"region": "gb-lon", "plan": "g7-premium-48", "available": true}, {"region": + "gb-lon", "plan": "g7-premium-50", "available": true}, {"region": "gb-lon", + "plan": "g7-premium-56", "available": true}, {"region": "gb-lon", "plan": "g7-premium-64", + "available": true}, {"region": "gb-lon", "plan": "g1-gpu-rtx4000a-1", "available": + false}, {"region": "gb-lon", "plan": "g1-gpu-rtx4000a-2", "available": false}, + {"region": "gb-lon", "plan": "g1-gpu-rtx4000a-4", "available": false}, {"region": + "gb-lon", "plan": "g1-gpu-rtx4000a-6", "available": false}, {"region": "gb-lon", + "plan": "g1-gpu-rtx4000a-8", "available": false}, {"region": "au-mel", "plan": + "g1-gpu-rtx6000-1", "available": false}, {"region": "au-mel", "plan": "g1-gpu-rtx6000-2", + "available": false}, {"region": "au-mel", "plan": "g1-gpu-rtx6000-3", "available": + false}, {"region": "au-mel", "plan": "g1-gpu-rtx6000-4", "available": false}, + {"region": "au-mel", "plan": "g7-premium-2", "available": true}, {"region": + "au-mel", "plan": "g7-premium-4", "available": true}, {"region": "au-mel", "plan": + "g7-premium-8", "available": true}, {"region": "au-mel", "plan": "g7-premium-16", + "available": true}, {"region": "au-mel", "plan": "g7-premium-32", "available": + true}, {"region": "au-mel", "plan": "g7-premium-48", "available": true}, {"region": + "au-mel", "plan": "g7-premium-50", "available": true}, {"region": "au-mel", + "plan": "g7-premium-56", "available": true}, {"region": "au-mel", "plan": "g7-premium-64", + "available": true}, {"region": "au-mel", "plan": "g1-gpu-rtx4000a-1", "available": + false}, {"region": "au-mel", "plan": "g1-gpu-rtx4000a-2", "available": false}, + {"region": "au-mel", "plan": "g1-gpu-rtx4000a-4", "available": false}, {"region": + "au-mel", "plan": "g1-gpu-rtx4000a-6", "available": false}, {"region": "au-mel", + "plan": "g1-gpu-rtx4000a-8", "available": false}], "page": 5, "pages": 5, "results": + 486}' + headers: + Access-Control-Allow-Credentials: + - "true" + Access-Control-Allow-Headers: + - Authorization, Origin, X-Requested-With, Content-Type, Accept, X-Filter + Access-Control-Allow-Methods: + - HEAD, GET, OPTIONS, POST, PUT, DELETE + Access-Control-Allow-Origin: + - '*' + Access-Control-Expose-Headers: + - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=900 - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:27:16 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: - Authorization, X-Filter - Authorization, X-Filter + - Accept-Encoding X-Accepted-Oauth-Scopes: - '*' X-Content-Type-Options: @@ -413,7 +714,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK diff --git a/test/integration/fixtures/TestStackscripts_List.yaml b/test/integration/fixtures/TestStackscripts_List.yaml index a29dd6f3b..814f62a0e 100644 --- a/test/integration/fixtures/TestStackscripts_List.yaml +++ b/test/integration/fixtures/TestStackscripts_List.yaml @@ -62,8 +62,8 @@ interactions: Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion of the installation process, access http://your-ip:2004 to configure OpenBiz Cubi and Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", "ordinal": - 0, "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", "linode/ubuntu14.04lts", - "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], + 0, "logo_url": "", "images": ["linode/centos5.6", "linode/ubuntu10.04lts32bit", + "linode/ubuntu10.04lts", "linode/ubuntu14.04lts", "linode/ubuntu12.04lts", "linode/centos6.8"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "OpenBiz Cubi powered by Webuzo", "script": "#!/bin/bash\n# .\n#\n# My ref: http://www.linode.com/?r=aadfce9845055011e00f0c6c9a5c01158c452deb\n\nfunction + {"id": 1280267, "username": "andrewmohawk", "user_gravatar_id": "c4a1738bcfba73859d7582676372dc1c", + "label": "thisisjustatest", "description": "test", "ordinal": 0, "logo_url": + "", "images": ["linode/ubuntu20.04"], "deployments_total": 0, "deployments_active": + 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": + "2018-01-02T03:04:05", "rev_note": "", "script": "#!/bin/bash\necho \"Hello + world\"", "user_defined_fields": []}, {"id": 73228, "username": "rizerapp", + "user_gravatar_id": "dc70e4f46019425154b0a652de0657da", "label": "lib-system-ubuntu", + "description": "", "ordinal": 0, "logo_url": "", "images": ["linode/ubuntu14.04lts", + "linode/ubuntu16.04lts", "linode/ubuntu16.10"], "deployments_total": 0, "deployments_active": + 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": + "2018-01-02T03:04:05", "rev_note": "Initial import", "script": "#!/bin/bash\n#\n# + System related utilities\n#\n# Copyright (c) 2010 Filip Wasilewski .\n#\n# + My ref: http://www.linode.com/?r=aadfce9845055011e00f0c6c9a5c01158c452deb\n\nfunction lower {\n # helper function\n echo $1 | tr ''[:upper:]'' ''[:lower:]''\n}\n\nfunction system_update {\n apt-get update && apt-get upgrade -y\n}\n\nfunction system_add_user {\n # system_add_user(username, password, groups, shell=/bin/bash)\n USERNAME=`lower @@ -1522,8 +1537,8 @@ interactions: here\r\nhttp://www.webuzo.com/pricing\r\n\r\nPath to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion of the installation process, access http://your-ip:2004 to configure Magento 1.7 and Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", - "ordinal": 0, "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", - "linode/ubuntu14.04lts", "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], + "ordinal": 0, "logo_url": "", "images": ["linode/centos5.6", "linode/ubuntu10.04lts32bit", + "linode/ubuntu10.04lts", "linode/ubuntu14.04lts", "linode/ubuntu12.04lts", "linode/centos6.8"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "Magento 1.7 powered by Webuzo", "script": "#!/bin/bash\n# \n\tVersion: 1.0.0.0\n\tRequirements:\n\t\t- + ss://linode/python-library \n\nThis StackScript + both deploys and provides a library for MySQL. The functions \nin this StackScript + are designed to be run across the Linode Core Distributions:\n\t- Ubuntu\n\t- + CentOS\n\t- Debian\n\t- Fedora\n\nStackScript User Defined Variables:\n\n\n\"\"\"\n\nimport os\nimport subprocess\nimport sys\n\ntry: # we''ll need + to rename included StackScripts before we can import them\n\tos.rename(\"/root/ssinclude-3\", + \"/root/pythonlib.py\")\nexcept:\n\tpass\n\nimport pythonlib\n\n\ndef mysql_install(root_pw + = False, db_name = False):\n\t\"\"\"Install MySQL or MariaDB\"\"\"\n\t# add + logging support\n\n\tpackage = {\n\t\t''debian'': ''mysql'',\n\t\t''redhat'': + ''mariadb''\n\t}\n\n\tpythonlib.system_package_install(package[pythonlib.distro[''family'']] + +\n\t\"-server\")\n\t\n\tmysql_start()\n\n\t# if provided with a root password, + set it\n\tif root_pw :\n\t\tsubprocess.call([''mysqladmin'', ''-u'', ''root'', + ''password'', root_pw])\n\t\n\t# if a database name was provided, let''s create + it\n\tif db_name :\n\t\tsubprocess.call(''mysql -uroot -p'' + root_pw + '' -e + \"create database '' + db_name + ''\"'', shell=True)\n\n\ndef mysql_start():\n\t\"\"\"Start + MariaDB on CentOS and Fedora\"\"\"\n\n\tif pythonlib.distro[''family''] == + \"redhat\":\n\t\tsubprocess.call([''systemctl'', ''start'', ''mariadb.service''])\n\n\ndef + main():\n\t\"\"\"Install MySQL or MariaDB\"\"\"\n\t# add logging support\n\t\n\tpythonlib.init()\n\tpythonlib.system_update()\n\n\tif + os.environ[''DB_ROOT_PASSWORD''] != \"\":\n\t\tmysql_install(os.environ[''DB_ROOT_PASSWORD''])\n\telse:\n\t\tmysql_install()\n\n\tpythonlib.end()\n\n\nif + __name__ == \"__main__\":\n\tsys.exit(main())", "user_defined_fields": [{"name": + "db_root_password", "label": "MySQL/MariaDB root password", "default": ""}]}, + {"id": 9230, "username": "webuzo", "user_gravatar_id": "cf0348f835d60e6d133040f49bb36ec5", + "label": "Vty powered by Webuzo", "description": "Vty is a web-based database + manager script written with Php. It''s for Mysql.\r\n\r\nYou can connect to + Mysql and see and edit your databases and tables. \r\n\t\t\t\r\nWebuzo is a + Single User Control Panel which helps users deploy Web Apps (WordPress, Joomla, + Drupal, etc) or System Apps (Apache, NGINX, PHP, Java, MongoDB, etc) on their + virtual machines or in the cloud.\r\n\r\nYou can get a Webuzo License here\r\nhttp://www.webuzo.com/pricing\r\n\r\nPath to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion of the installation process, access http://your-ip:2004 to configure Vty and Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", "ordinal": - 0, "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", "linode/ubuntu14.04lts", - "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], + 0, "logo_url": "", "images": ["linode/centos5.6", "linode/ubuntu10.04lts32bit", + "linode/ubuntu10.04lts", "linode/ubuntu14.04lts", "linode/ubuntu12.04lts", "linode/centos6.8"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "Vty powered by Webuzo", "script": "#!/bin/bash\n# \n\tVersion: 1.0.0.0\n\tRequirements:\n\t\t- n/a\n\nThis + StackScript is not meant to be directly deployed. Includes a host of\nfunctions + to do very common task on a distro, as implemented in Python. The\nfunctions + in this library are designed to be run accross the Linode Core\nDistributions:\n\t- + Ubuntu\n\t- CentOS\n\t- Debian\n\t- Fedora\n\"\"\"\n\n\nimport crypt\nimport + fcntl\nimport logging\nimport os\nimport platform\nimport pwd\nimport socket\nimport + subprocess\nimport sys\nimport time\ntry:\n\timport apt\nexcept:\n\ttry:\n\t\timport + yum\n\texcept:\n\t\ttry:\n\t\t\timport dnf\n\t\texcept ImportError:\n\t\t\tprint(\"Package + manager support was not found.\")\n\t\t\t\n\ndistro = None\n\"\"\"String list: + Contains details of the distribution.\"\"\"\n\n\ndef end():\n\t\"\"\"End the + StackScript cleanly.\"\"\"\n\t\n\t# Should the StackScripts themselves be removed + here at some point?\n\tlogging.info(\"The StackScript has been completed.\")\n\tsubprocess.check_output(''echo + \"The StackScript has completed. Press enter to continue.\" | wall -n'', shell=True)\n\n\ndef + init():\n\t\"\"\"Start features we consider StackScript standard.\"\"\"\n\t\n\t# + Sanity check for CentOS 7 & Fedora 22\n\tif os.path.exists(\"/var/log/stackscript.log\"):\n\t\tsys.exit(1) + # StackScript already started once, bail\n\t\n\twith open(\"/etc/profile.d/stackscript.sh\", + \"w\") as f:\n\t\tf.write(\"\"\"#!/bin/bash\nif pgrep -f \"python /root/StackScript\" + &>/dev/null\nthen\n\techo \"####################################################################\"\n\techo + \"#####\"\n\techo \"##### Warning: Your StackScript is still running\"\n\techo + \"#####\"\n\techo \"#####\"\n\techo \"##### Please do not make any system changes + until it \"\n\techo \"##### completes. Log file is located at: \"\n\techo \"##### /var/log/stackscript.log\"\n\techo + \"####################################################################\"\n\techo + \" \"\nelse\n\techo \"####################################################################\"\n\techo + \"#####\"\n\techo \"##### The StackScript has completed. Enjoy your system.\"\n\techo + \"#####\"\n\techo \"#####\"\n\techo \"##### For reference, the logfile is located + at: \"\n\techo \"##### /var/log/stackscript.log\"\n\techo \"####################################################################\"\n\techo + \" \"\n\trm /etc/profile.d/stackscript.sh\nfi\"\"\")\n\t\n\tlogging_start()\n\n\ndef + logging_start(the_file=\"/var/log/stackscript.log\", the_level=logging.INFO):\n\t\"\"\"Turn + on logging.\"\"\"\n\t\n\tlogging.basicConfig(filename=the_file, level=the_level)\n\tlogging.info(\"Logging + has started. \" + str(time.time()))\n\n\ndef system_detect_distro():\n\t\"\"\"Prepares + distro information.\n\t\n\tThis is critical to support the Linode Core Distributions + with a single\n\tscript.\n\t\"\"\"\n\tglobal distro\n\n\t# add support for logging\n\t\n\tdistro + = dict(zip((''distname'', ''version'', ''codename''),\n\tplatform.linux_distribution(full_distribution_name=0)))\n\t\n\tdistro[''distname''] + = distro[''distname''].lower()\n\n\tif distro[''distname''] in (''debian'', + ''ubuntu''):\n\t\tdistro[''family''] = \"debian\"\n\telif distro[''distname''] + in (''fedora'', ''centos''):\n\t\tdistro[''family''] = \"redhat\"\n\telse:\n\t\traise + NotImplementedError(\"This distribution is not supported.\")\n\n\ndef system_IP_get():\n\t\"\"\"Return + IPv4 address configured on eth0.\n\t\n\tThis basically is a disgusting hack. + Please let me know if you find a\n\tcleaner way to do this.\"\"\"\n\t# add support + for logging\n\n\ts = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n\treturn + socket.inet_ntoa(fcntl.ioctl(\n\t\ts.fileno(),\n\t\t0x8915, # SIOCGIFADDR\n\t\tstruct.pack(''256s'', + \"eth0\")\n\t)[20:24])\n\n\ndef system_IP_rdns(IP):\n\t\"\"\"Get PTR for given + IP address.\"\"\"\n\t# add support for logging\n\n\treturn socket.gethostbyaddr(IP)[0]\n\n\ndef + system_package_install(package, update_first=True):\n\t\"\"\"Install a package + with the appropriate package manager.\"\"\"\n\t# add support for logging\n\n\tif + distro is None:\n\t\tsystem_detect_distro()\n\n\tsystem_update() if update_first + else None\n\t\n\tif distro[''family''] == \"debian\":\n\t\tos.environ[''DEBIAN_FRONTEND''] + = \"noninteractive\"\n\t\tcache = apt.Cache()\n\t\tpkg = cache[package]\n\t\tpkg.mark_install()\n\t\tcache.commit()\n\telif + distro[''distname''] == \"centos\":\n\t\tyb = yum.YumBase()\n\t\tyb.conf.assumeyes + = True\n\t\tyb.install(name=package)\n\t\tyb.resolveDeps()\n\t\tyb.processTransaction()\n\t\tyb.close()\n\telif + distro[''distname''] == \"fedora\":\n\t\tdnfb = dnf.Base()\n\t\tdnfb.conf.assumeyes + = True\n\t\tdnfb.read_all_repos()\n\t\tdnfb.fill_sack()\n\t\tdnfb.install(package)\n\t\tdnfb.resolve()\n\t\tdnfb.download_packages(dnfb.transaction.install_set)\n\t\tdnfb.do_transaction()\n\t\tdnfb.close()\n\n\ndef + system_update():\n\t\"\"\"Uses the distro''s package manager to update packages.\"\"\"\n\t#add + support for logging\n\t\n\tif distro is None:\n\t\tsystem_detect_distro()\n\t\n\tif + distro[''family''] == \"debian\":\n\t\tcache = apt.Cache()\n\t\tcache.update()\n\t\tcache.open(None)\n\t\tcache.upgrade()\n\t\tcache.commit()\n\telif + distro[''distname''] == \"centos\":\n\t\tyb = yum.YumBase()\n\t\tyb.conf.assumeyes + = True\n\t\tyb.update()\n\t\tyb.resolveDeps()\n\t\tyb.processTransaction()\n\t\tyb.close()\n\telif + distro[''distname''] == \"fedora\":\n\t\tdnfb = dnf.Base()\n\t\tdnfb.conf.assumeyes + = True\n\t\t#dnfb.read_all_repos() #updates were failing with this line\n\t\tdnfb.fill_sack()\n\t\tdnfb.upgrade_all()\n\t\tdnfb.resolve()\n\t\tdnfb.do_transaction()\n\t\tdnfb.close()\n\n\ndef + user_add(username, password, groups):\n\t\"\"\"Creates a Linux user account.\n\t\n\tArgs:\n\t\tusername + (String): A Linux username.\n\t\tpassword (String): Password for the user.\n\t\tgroups + (tuple): Groups that the user should be added to.\n\t\n\tReturns:\n\t\tbool: + True if successful, False otherwise.\n\t\"\"\"\n\n\t# need to implement logging\n\t# + need to implement group functionality\n\n\treturn subprocess.call([''useradd'', + ''-m'', ''-p'', crypt.crypt(password, \"22\"), ''-s'', ''/bin/bash'', username])\n\n\ndef + user_add_pubkey(username, key):\n\t\"\"\"Adds the public SSH key to the specified + user.\"\"\"\n\t# need to implement logging\n\t\n\tif username != \"root\":\n\t\tos.seteuid(pwd.getpwnam(username).pw_uid)\n\t\tos.setegid(pwd.getpwnam(username).pw_gid)\n\t\n\tpubkey_dir + = os.path.join(os.getenv(\"HOME\"), \".ssh\")\n\t\n\tif not os.path.isdir(pubkey_dir):\n\t\tos.makedirs(pubkey_dir)\n\t\n\twith + open(os.path.join(pubkey_dir, \"authorized_keys\")) as f:\n\t\tf.write(key)\n\t\n\tif + username != \"root\":\n\t\tos.seteuid(0)\n\t\tos.setegid(0)", "user_defined_fields": + []}, {"id": 9237, "username": "webuzo", "user_gravatar_id": "cf0348f835d60e6d133040f49bb36ec5", + "label": "HelpDEZk powered by Webuzo", "description": "HelpDEZk is a powerfull + software that manages requests/incidents. It has all the needed requirements + to an efficient workflow management of all processes involved in service execution. + This control is done for internal demands and also for outsourced services.\r\n\r\nHelpDEZk + can be used at any company''s area, serving as an support to the shared service + center concept, beyond the ability to log all the processes and maintain the + request''s history, it can pass it through many approval levels.\r\n\r\nHelpDEZk + can put together advanced managing resources with an extremely easy use. Simple + and intuitive screens make the day-by-day easier for your team, speeding up + the procedures and saving up a lot of time. It is developped in objects oriented PHP language, with the MVC architecture and uses the templates system SMARTY. For the javascripts, JQUERY is used. \r\n\t\t\t\r\nWebuzo is a Single User Control Panel which helps users deploy Web Apps (WordPress, Joomla, Drupal, etc) or @@ -1890,8 +2008,8 @@ interactions: to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion of the installation process, access http://your-ip:2004 to configure HelpDEZk and Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", - "ordinal": 0, "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", - "linode/ubuntu14.04lts", "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], + "ordinal": 0, "logo_url": "", "images": ["linode/centos5.6", "linode/ubuntu10.04lts32bit", + "linode/ubuntu10.04lts", "linode/ubuntu14.04lts", "linode/ubuntu12.04lts", "linode/centos6.8"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "HelpDEZk powered by Webuzo", "script": "#!/bin/bash\n# > /etc/sudoers\n\n# Download and the LinuxGSM script\necho + Downloading LinuxGSM\n# TESTING\ncd /home/\"$GAMESERVER\"/\n# OLD: wget -4 https://linuxgsm.com/dl/linuxgsm.sh + -P /home/\"$GAMESERVER\"/\nwget -O linuxgsm.sh https://linuxgsm.sh -P /home/\"$GAMESERVER\"/\nchmod + +x /home/\"$GAMESERVER\"/linuxgsm.sh\nchown -R \"$GAMESERVER\":\"$GAMESERVER\" + /home/\"$GAMESERVER\"/*\n\n# Run the GSM script\necho running LinuxGSM script\nsu + - \"$GAMESERVER\" -c \"/home/$GAMESERVER/linuxgsm.sh $GAMESERVER\"\n\n}\n\n\nfunction + game_install {\n\n# Installing the Server\necho Installing the Server\nsu - + \"$GAMESERVER\" -c \"/home/$GAMESERVER/$GAMESERVER auto-install\"\nif [[ \"$GAMESERVER\" + =~ (^boserver$|^bb2server$|^bmdmserver$| \\\n^cssserver$|^csgoserver$|^dodsserver$|^emserver$| + \\\n^gmodserver$|^insserver$|^nmrihserver$|^tf2server$| \\\n^tuserver$|^zpsserver$) + ]]; then\n echo -e \"\\ngslt=$GSLT\" >> /home/\"$GAMESERVER\"/lgsm/config-lgsm/\"$GAMESERVER\"/\"$GAMESERVER\".cfg\nelse\n echo + No Gameserver Login Token Needed\nfi\n\n}\n\n\nfunction service_config {\n\n# + Add cron jobs for updating the gameserver and linuxgsm. Monitor will ensure + that the gameserver is running and restart if needed.\necho Adding game update + cron jobs\ncrontab -l > gamecron\necho \"*/5 * * * * su - $GAMESERVER -c ''/home/$GAMESERVER/$GAMESERVER + monitor'' > /dev/null 2>&1\" >> gamecron\necho \"0 23 * * * su - $GAMESERVER + -c ''/home/$GAMESERVER/$GAMESERVER update'' > /dev/null 2>&1\" >> gamecron\necho + \"30 23 * * * su - $GAMESERVER -c ''/home/$GAMESERVER/$GAMESERVER update-functions'' + > /dev/null 2>&1\" >> gamecron\ncrontab gamecron\nrm gamecron\n\n# Create systemd + service file\n\ncat << END > /etc/systemd/system/$GAMESERVER.service\n[Unit]\nDescription=$GAMESERVER\n\n[Service]\nUser=$GAMESERVER\nType=forking\nExecStart=/bin/bash + /home/$GAMESERVER/$GAMESERVER start\nExecStop=/bin/kill -2 $MAINPID\n\n[Install]\nWantedBy=multi-user.target\nEND\n\n}\n\n## + Adding these for Valheim launch, will eventually replace the above code, but + for now, we added ''v_'' in front of functions\n\nfunction v_linuxgsm_install + {\n local -r gameserver=\"$1\" username=\"$2\"\n\n su - \"$username\" + -c \"\n # Download and the LinuxGSM script\n wget -O linuxgsm.sh + https://linuxgsm.sh\n chmod +x linuxgsm.sh\n # Run the GSM script\n /home/$username/linuxgsm.sh + $gameserver\n \"\n}\n\nfunction v_linuxgsm_game_install {\n local -r gameserver=\"$1\" + username=\"$2\"\n\n # Installing the Server\n su - \"$username\" -c \"/home/$username/$gameserver + auto-install\"\n if [[ \"$gameserver\" =~ (^boserver$|^bb2server$|^bmdmserver$| + \\\n ^cssserver$|^csgoserver$|^dodsserver$|^emserver$| \\\n ^gmodserver$|^insserver$|^nmrihserver$|^tf2server$| + \\\n ^tuserver$|^zpsserver$) ]]; then\n echo -e \"\\ngslt=$GSLT\" + >> \"/home/$username/lgsm/config-lgsm/$gameserver/$gameserver.cfg\"\n else\n echo + No gameserver Login Token Needed\n fi\n}\n\nfunction v_linuxgsm_service_config + {\n local -r gameserver=\"$1\" username=\"$2\"\n\n # Add cron jobs for + updating the game server and LinuxGSM\n # Monitor will ensure that the gameserver + is running and restart if needed\n crontab -l > gamecron\n\n echo \"*/5 + * * * * su - \"$username\" -c ''/home/$username/$gameserver monitor'' > /dev/null + 2>&1\" >> gamecron\n echo \"0 23 * * * su - \"$username\" -c ''/home/$username/$gameserver + update'' > /dev/null 2>&1\" >> gamecron\n echo \"30 23 * * * su - \"$username\" + -c ''/home/$username/$gameserver update-functions'' > /dev/null 2>&1\" >> gamecron\n\n crontab + gamecron\n rm gamecron\n\n # Create systemd service file\n cat << EOF + > /etc/systemd/system/$gameserver.service\n[Unit]\nDescription=$gameserver\n[Service]\nUser=$username\nType=forking\nExecStart=/bin/bash + /home/$username/$gameserver start\nExecStop=/bin/kill -2 \\$MAINPID\n[Install]\nWantedBy=multi-user.target\nEOF\n}\n\nfunction + v_linuxgsm_oneclick_install {\n local -r gameserver=\"$1\" username=\"$2\"\n\n v_linuxgsm_install + \"$gameserver\" \"$username\"\n v_linuxgsm_game_install \"$gameserver\" \"$username\"\n v_linuxgsm_service_config + \"$gameserver\" \"$username\"\n}", "user_defined_fields": []}, {"id": 978965, + "username": "meenubediShine", "user_gravatar_id": "ac16f37ccd972a6f698dab5aab1188b2", + "label": "Testing Update", "description": "testing Update", "ordinal": 0, "logo_url": + "", "images": ["linode/arch", "linode/slackware14.2", "linode/debian10", "linode/alpine3.13"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "yegiu Update", "script": "#!/bin/bash\n\ntesting Update ", "user_defined_fields": @@ -1986,8 +2158,8 @@ interactions: to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion of the installation process, access http://your-ip:2004 to configure Support Incident Tracker and Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", - "ordinal": 0, "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", - "linode/ubuntu14.04lts", "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], + "ordinal": 0, "logo_url": "", "images": ["linode/centos5.6", "linode/ubuntu10.04lts32bit", + "linode/ubuntu10.04lts", "linode/ubuntu14.04lts", "linode/ubuntu12.04lts", "linode/centos6.8"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "Support Incident Tracker powered by Webuzo", "script": "#!/bin/bash\n# /etc/apt/apt.conf.d/99force-ipv4\n export DEBIAN_FRONTEND=noninteractive\n apt-get + update -y\n}\n\nfunction set_hostname {\n IP=`hostname -I | awk ''{print$1}''`\n HOSTNAME=`dnsdomainname + -A`\n hostnamectl set-hostname $HOSTNAME\n echo $IP $HOSTNAME >> /etc/hosts\n}\n\nfunction + mysql_root_preinstall {\n # Set MySQL root password on install\n debconf-set-selections + <<< \"mysql-server mysql-server/root_password password $DBROOT_PASSWORD\"\n debconf-set-selections + <<< \"mysql-server mysql-server/root_password_again password $DBROOT_PASSWORD\"\n}\n\nfunction + run_mysql_secure_installation_ubuntu20 {\n # Installs expect, runs mysql_secure_installation + and runs mysql secure installation.\n apt-get install -y expect\n SECURE_MYSQL=$(expect + -c \"\n set timeout 10\n spawn mysql_secure_installation\n expect \\\"Press + y|Y for Yes, any other key for No:\\\"\n send \\\"n\\r\\\"\n expect \\\"New + password:\\\"\n send \\\"$DBROOT_PASSWORD\\r\\\"\n expect \\\"Re-enter new + password:\\\"\n send \\\"$DBROOT_PASSWORD\\r\\\"\n expect \\\"Remove anonymous + users? (Press y|Y for Yes, any other key for No) :\\\"\n send \\\"y\\r\\\"\n expect + \\\"Disallow root login remotely? (Press y|Y for Yes, any other key for No) + :\\\"\n send \\\"y\\r\\\"\n expect \\\"Remove test database and access to + it? (Press y|Y for Yes, any other key for No) :\\\"\n send \\\"y\\r\\\"\n expect + \\\"Reload privilege tables now? (Press y|Y for Yes, any other key for No) :\\\"\n send + \\\"y\\r\\\"\n expect eof\n \")\n echo \"$SECURE_MYSQL\"\n}\n\nfunction ufw_install + {\n # Install UFW and add basic rules\n apt-get install ufw -y\n ufw default + allow outgoing\n ufw default deny incoming\n ufw allow ssh\n ufw enable\n systemctl + enable ufw\n\n # Stop flooding Console with messages\n ufw logging off\n}\n\nfunction + fail2ban_install {\n # Install and configure Fail2ban\n apt-get install fail2ban + -y\n cd /etc/fail2ban\n cp fail2ban.conf fail2ban.local\n cp jail.conf jail.local\n systemctl + start fail2ban\n systemctl enable fail2ban\n cd\n}\n\nfunction stackscript_cleanup + {\n # Force IPv4 and noninteractive upgrade after script runs to prevent breaking + nf_conntrack for UFW\n echo ''Acquir1234::5678orceIPv4 \"true\";'' > /etc/apt/apt.conf.d/99force-ipv4\n export + DEBIAN_FRONTEND=noninteractive \n apt-get upgrade -y\n\n rm /root/StackScript\n rm + /root/ssinclude*\n echo \"Installation complete!\"\n}\n\nfunction run_mysql_secure_installation + {\n # Installs expect, runs mysql_secure_installation and runs mysql secure + installation.\n apt-get install -y expect\n SECURE_MYSQL=$(expect -c \"\n set + timeout 10\n spawn mysql_secure_installation\n expect \\\"Enter current password + for root (enter for ):\\\"\n send \\\"$DBROOT_PASSWORD\\r\\\"\n expect \\\"Change + the root password?\\\"\n send \\\"n\\r\\\"\n expect \\\"Remove anonymous users?\\\"\n send + \\\"y\\r\\\"\n expect \\\"Disallow root login remotely?\\\"\n send \\\"y\\r\\\"\n expect + \\\"Remove test database and access to it?\\\"\n send \\\"y\\r\\\"\n expect + \\\"Reload privilege tables now?\\\"\n send \\\"y\\r\\\"\n expect eof\n \")\n echo + \"$SECURE_MYSQL\"\n}", "user_defined_fields": []}, {"id": 9239, "username": + "webuzo", "user_gravatar_id": "cf0348f835d60e6d133040f49bb36ec5", "label": "Webasyst + powered by Webuzo", "description": "Webasyst is a free PHP framework for creating + sleek multi-user web apps and for building websites. Webasyst offers a multi-app + UI ready for integrating and designing your app, handles user authorization, + access rights management, routing setup, and much more. Great for creating web + solutions for businesses and teams. \r\n\t\t\t\r\nWebuzo is a Single User Control + Panel which helps users deploy Web Apps (WordPress, Joomla, Drupal, etc) or + System Apps (Apache, NGINX, PHP, Java, MongoDB, etc) on their virtual machines + or in the cloud.\r\n\r\nYou can get a Webuzo License here\r\nhttp://www.webuzo.com/pricing\r\n\r\nPath + to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion + of the installation process, access http://your-ip:2004 to configure Webasyst + and Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", + "ordinal": 0, "logo_url": "", "images": ["linode/centos5.6", "linode/ubuntu10.04lts32bit", + "linode/ubuntu10.04lts", "linode/ubuntu14.04lts", "linode/ubuntu12.04lts", "linode/centos6.8"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "Webasyst powered by Webuzo", "script": "#!/bin/bash\n# \n\n## Install jq\nif [ ! -x /usr/bin/jq ] && [ ! + -x /usr/local/bin/jq ]; then\n which wget || system_install_package wget\n wget + https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64\n mv jq-linux64 + jq\n chmod +x jq\n mv jq /usr/bin/\nfi\n\n\n##################################\n## + DNS\n##################################\n\n## Fetch DNS info from the API\n\nfunction + list_domains {\n # Example: list_domains\n\n curl -H \"Authorization: + Bearer $TOKEN_PASSWORD\" \\\n https://api.linode.com/v4/domains | jq + -S\n}\n\nfunction list_records {\n # Example: list_records $DOMAIN\n \n local + -r domain=\"$1\"\n local -r domain_id=$(get_domain_property $domain ''id'')\n\n curl + -H \"Authorization: Bearer $TOKEN_PASSWORD\" \\\n https://api.linode.com/v4/domains/$domain_id/records + | jq -S\n}\n\nfunction get_domain_property {\n # Example: get_domain_property + $DOMAIN ''id'' \n\n local -r domain=\"$1\" property=\"$2\"\n local -a + domain_list=($(list_domains $TOKEN_PASSWORD))\n local -r num_domains=$(echo + \"${domain_list[@]}\" | jq ''.results'')\n\n for ((i=0; i<$num_domains; i++)); + do\n local domain_name=$(echo \"${domain_list[@]}\" | jq .data[$i].domain + | sed ''s/\"//g'')\n case \"$domain_name\" in\n \"$domain\")\n echo + \"${domain_list[@]}\" | jq .data[$i].$property\n break;\n ;;\n esac\n done\n}\n\nfunction + check_domain {\n # Example: check_domain \"$DOMAIN\"\n\n local -r domain=\"$1\"\n if + [ \"$(get_domain_property \"$domain\" ''domain'')\" ];\n then return + 0;\n else return 1;\n fi\n}\n\nfunction get_record_id {\n # Example: + get_record_id \"$DOMAIN\" \"$SUBDOMAIN\" \"$TYPE\"\n\n local -r domain=\"$1\" + subdomain=\"$2\" type=\"$3\"\n local -r domain_id=$(get_domain_property \"$domain\" + ''id'')\n local -a record_list=($(list_records \"$domain\"))\n local -r + num_records=$(echo \"${record_list[@]}\" | jq ''.results'')\n\n for ((i=0; + i<$num_records; i++)); do\n local record_name=$(echo \"${record_list[@]}\" + | jq .data[$i].name | sed ''s/\"//g'')\n case \"$record_name\" in\n \"$subdomain\")\n local + record_type=$(echo \"${record_list[@]}\" | jq .data[$i].type | sed ''s/\"//g'')\n if + [ \"$record_type\" == \"$type\" ]; then\n echo \"${record_list[@]}\" + | jq .data[$i].id\n break;\n fi\n ;;\n esac\n done\n}\n\nfunction + check_record {\n # Example: check_record $DOMAIN $SUBDOMAIN $TYPE\n\n local + -r domain=\"$1\" subdomain=\"$2\" type=\"$3\"\n local -r domain_id=$(get_domain_property + \"$domain\" ''id'')\n local -a record_list=($(list_records \"$domain\"))\n local + -r num_records=$(echo \"${record_list[@]}\" | jq ''.results'')\n\n for ((i=0; + i<$num_records; i++)); do\n local record_name=$(echo \"${record_list[@]}\" + | jq .data[$i].name | sed ''s/\"//g'')\n case \"$record_name\" in \n \"$subdomain\")\n local + record_type=$(echo \"${record_list[@]}\" | jq .data[$i].type | sed ''s/\"//g'')\n if + [ \"$record_type\" == \"$type\" ]; then\n local found_record=true\n break;\n fi\n ;;\n esac\n done\n\n if + [ \"$found_record\" ]; then\n return 0;\n else\n return 1;\n fi\n}\n\n## + Create new DNS records\n\nfunction create_domain {\n # Example: create_domain + $DOMAIN $SOA_EMAIL_ADDRESS\n \n local -r domain=\"$1\" soa_email_address=\"$2\"\n\n curl + -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer + $TOKEN_PASSWORD\" \\\n -X POST -d ''{\n \"domain\": \"''\"$domain\"''\",\n \"type\": + \"master\",\n \"soa_email\": \"''\"$soa_email_address\"''\",\n \"description\": + \" \",\n \"refresh_sec\": 14400,\n \"retry_sec\": 3600,\n \"expire_sec\": + 604800,\n \"ttl_sec\": 300,\n \"status\": \"active\",\n \"display_group\": + \" \"\n }'' https://api.linode.com/v4/domains\n\n # There''s a + reason I added this, but it seems I didn''t leave a comment\n # I''ll + experiment with removing it later, but am leaving it for now in\n # the + interest of not breaking anything\n sleep 3\n}\n\nfunction create_a_record + {\n # Example: create_a_record $SUBDOMAIN $IP $DOMAIN\n\n local -r subdomain=\"$1\" + ip_address=\"$2\" domain=\"$3\"\n local -r domain_id=$(get_domain_property + \"$domain\" ''id'')\n\n curl -H \"Content-Type: application/json\" \\\n -H + \"Authorization: Bearer $TOKEN_PASSWORD\" \\\n -X POST -d ''{\n \"type\": + \"A\",\n \"name\": \"''\"$subdomain\"''\",\n \"target\": + \"''\"$ip_address\"''\",\n \"priority\": 0,\n \"service\": + null,\n \"protocol\": null\n }'' https://api.linode.com/v4/domains/$domain_id/records\n\n}\n\nfunction + create_aaaa_record {\n # Example: create_aaaa_record $SUBDOMAIN $IP $DOMAIN\n\n local + -r subdomain=\"$1\" ip6_address=\"$2\" domain=\"$3\"\n local -r domain_id=$(get_domain_property + \"$domain\" ''id'')\n\n curl -H \"Content-Type: application/json\" \\\n -H + \"Authorization: Bearer $TOKEN_PASSWORD\" \\\n -X POST -d ''{\n \"type\": + \"AAAA\",\n \"name\": \"''\"$subdomain\"''\",\n \"target\": + \"''\"$ip6_address\"''\",\n \"priority\": 0,\n \"service\": + null,\n \"protocol\": null\n }'' https://api.linode.com/v4/domains/$domain_id/records\n}\n\nfunction + create_mx_record {\n # Example: create_mx_record $DOMAIN\n\n local -r + domain=\"$1\"\n local -r domain_id=$(get_domain_property \"$domain\" ''id'')\n\n curl + -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer + $TOKEN_PASSWORD\" \\\n -X POST -d ''{\n \"type\": \"MX\",\n \"name\": + \"''\"mail.${domain}\"''\",\n \"target\": \"''\"$domain\"''\",\n \"priority\": + 10,\n \"service\": null,\n \"protocol\": null,\n \"ttl_sec\": + 0\n }'' https://api.linode.com/v4/domains/$domain_id/records\n}\n\nfunction + create_spf_record {\n ## This function needs updating to allow the creation + of custom SPF records\n\n # Example create_spf_record $DOMAIN\n\n local + -r domain=\"$1\"\n local -r domain_id=$(get_domain_property \"$domain\" ''id'')\n\n curl + -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer + $TOKEN_PASSWORD\" \\\n -X POST -d ''{\n \"type\": \"TXT\",\n \"name\": + \"''\"$domain\"''\",\n \"target\": \"v=spf1 a ~all\",\n \"priority\": + 50,\n \"ttl_sec\": 0\n }'' https://api.linode.com/v4/domains/$domain_id/records\n}\n\nfunction + set_rdns {\n # Example: set_rdns $FQDN $IP\n\n local -r fqdn=\"$1\" ip_address=\"$2\"\n\n check_dns_propagation + \"$fqdn\" \"$ip_address\"\n\n printf \"Setting rDNS...\\n\"\n curl -H + \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer $TOKEN_PASSWORD\" + \\\n -X PUT -d ''{\n \"rdns\": \"''\"$fqdn\"''\"\n }'' + https://api.linode.com/v4/networking/ips/$ip_address\n}\n\n\n## Update existing + DNS records\n\nfunction update_domain_property {\n # Example: update_domain_property + $DOMAIN $PROPERTIES_JSON\n\n local -r domain=\"$1\"\n local -r domain_id=\"$(get_domain_property + \"$domain\" ''id'')\"\n\n # Import the passed data into an associative array\n local + var=$(declare -p ${2})\n eval \"local -a properties_json=\"${var#*=}\n\n curl + -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer + $TOKEN_PASSWORD\" \\\n -X PUT -d \"${properties_json}\" \\\n https://api.linode.com/v4/domains/$domain_id\n}\n\nfunction + update_a_record {\n # Example: update_a_record $SUBDOMAIN $IP_ADDRESS $DOMAIN\n \n local + -r subdomain=\"$1\" ip_address=\"$2\" domain=\"$3\"\n local -r domain_id=$(get_domain_property + \"$domain\" ''id'')\n local -r record_id=$(get_record_id \"$domain\" \"$subdomain\" + ''A'')\n\n curl -H \"Content-Type: application/json\" \\\n -H \"Authorization: + Bearer $TOKEN_PASSWORD\" \\\n -X PUT -d ''{\n \"type\": \"A\",\n \"name\": + \"''\"$subdomain\"''\",\n \"target\": \"''\"$ip_address\"''\"\n }'' + https://api.linode.com/v4/domains/$domain_id/records/$record_id\n}\n\nfunction + update_aaaa_record {\n # Example: update_aaaa_record $SUBDOMAIN $IP6 $DOMAIN\n\n local + -r subdomain=\"$1\" ip6_address=\"$2\" domain=\"$3\"\n local -r domain_id=$(get_domain_property + \"$domain\" ''id'')\n local -r record_id=$(get_record_id \"$domain\" \"$subdomain\" + ''AAAA'')\n\n curl -H \"Content-Type: application/json\" \\\n -H + \"Authorization: Bearer $TOKEN_PASSWORD\" \\\n -X PUT -d ''{\n \"type\": + \"AAAA\",\n \"name\": \"''\"$subdomain\"''\",\n \"target\": + \"''\"$ip6_address\"''\"\n }'' https://api.linode.com/v4/domains/$domain_id/records/$record_id\n}\n\n\n## + Automate DNS record creation\n#\n# *** IMPORTANT ***\n#\n# To use this next + function, you''ll need to create an associative array outside of it to be passed + in\n# Here''s an example:\n#\n# declare -A dns_records=(\n# [soa_email_address]=\"$SOA_EMAIL_ADDRESS\"\n# [domain]=\"$DOMAIN\"\n# [subdomain]=\"www\"\n# [mx_record]=''Yes''\n# [spf_record]=''Yes''\n# + )\n#\n# set_dns \"dns_records\"\n\nfunction set_dns {\n # Import the passed + data into an associative array\n local var=$(declare -p ${1})\n eval \"local + -A records=\"${var#*=}\n\n # Create the domain, if specified, and get it''s + ID\n # Also, create the A record for the base domain\n if ! check_domain + \"${records[domain]}\"; then\n # Create the domain\n create_domain + \"${records[domain]}\" \"${records[email_address]}\"\n\n # Create the + base A record\n create_a_record \"\" \"${records[ipv4_address]}\" \"${records[domain]}\"\n create_aaaa_record + \"\" \"${records[ipv6_address]}\" \"${records[domain]}\"\n fi\n\n # If + the A record doesn''t already exist, create it\n if ! check_record \"${records[domain]}\" + \"${records[subdomain]}\" ''A''; then\n create_a_record \"${records[subdomain]}\" + \"${records[ipv4_address]}\" \"${records[domain]}\"\n # Otherwise, update + it\n else\n update_a_record \"${records[subdomain]}\" \"${records[ipv4_address]}\" + \"${records[domain]}\"\n fi\n\n # If the AAAA record doesn''t exist, create + it\n if ! check_record \"${records[domain]}\" \"${records[subdomain]}\" ''AAAA''; + then\n create_aaaa_record \"${records[subdomain]}\" \"${records[ipv6_address]}\" + \"${records[domain]}\"\n # Otherwise, update it\n else\n update_aaaa_record + \"${records[subdomain]}\" \"${records[ipv6_address]}\" \"${records[domain]}\"\n fi\n\n # + Create an MX record, if requested\n case \"${records[mx_record]}\" in\n ''Yes'')\n list_records + \"${records[domain]}\" | grep ''MX''\n [ $? -ne 0 ] && create_mx_record + \"${records[domain]}\"\n ;;\n esac\n\n # Create an SPF record, + if requested\n case \"${records[spf_record]}\" in\n ''Yes'')\n list_records + \"${records[domain]}\" | grep ''spf''\n [ $? -ne 0 ] && create_spf_record + \"${records[domain]}\"\n ;;\n esac\n}\n\n\n## Verify DNS records\n\nfunction + check_dns_propagation {\n # Example: check_dns_propagation $FQDN $IP\n\n local + -r fqdn=\"$1\" ip_address=\"$2\"\n\n # Check for ''dig'' and install ''dnsutils'' + if it''s not there\n if ! dig; then\n case \"${detected_distro[family]}\" + in\n ''debian'')\n system_install_package dnsutils\n ;;\n ''redhat'')\n system_install_package + bind-utils\n ;;\n esac\n fi\n\n # List of nameservers + to check\n # Specifically, Google''s and Linode''s\n local -a nameservers=(\n ''8.8.4.4''\n ''8.8.8.8''\n # ''162.159.27.72''\n # ''162.159.24.39''\n # ''162.159.25.129''\n # ''162.159.26.99''\n # ''162.159.24.25''\n )\n\n # + Check for the record in each of the nameservers\n # listed in ${nameservers[@]}\n for + i in ${nameservers[@]}; do\n local a=1\n printf \"Waiting for + propagation to %s\" $i\n while [ $a -gt 0 ]; do\n result=\"$(dig + @$i +short $fqdn)\"\n if [ \"$result\" == \"$ip_address\" ]; then\n ((a-=1))\n result=''''\n else\n printf + \".\"\n sleep 10\n fi\n done\n printf + \"done.\\n\"\n done\n\n printf \"\\n%s has finished propagating!\\n\" + $fqdn\n}\n\nfunction check_rdns_propagation {\n # Example check_rdns_propagation + $IP $DOMAIN\n\n local -r ip_address=\"$1\" domain=\"$2\"\n local a=1\n\n while + [ $a -ne 0 ]; do\n if [ \"$(dig +short -x \"$ip_address\" | grep \"$domain\")\" + ]; then\n a=0\n else\n printf \".\"\n sleep + 10\n fi\n done\n}\n\n\n\n##################################\n## Object + Storage Buckets\n##################################\n\n## Create Object Storage + Buckets\n\nfunction create_obj_bucket {\n local -r bucket_name=\"$1\" cluster=\"$2\" + acl=\"$3\" cors=\"$4\"\n\n curl -H \"Content-Type: application/json\" \\\n -H + \"Authorization: Bearer $TOKEN_PASSWORD\" \\\n -X POST -d ''{\n \"label\": + \"''\"$bucket_name\"''\",\n \"cluster\": \"''\"$cluster\"''\",\n \"cors_enabled\": + ''$cors'',\n \"acl\": \"''\"$acl\"''\"\n }'' https://api.linode.com/v4/object-storage/buckets/\n}\n\n\n\n##################################\n## + Block Storage Volumes\n##################################\n\n## List Block Storage + Volumes\n\nfunction list_volumes {\n # Example: list_volumes\n\n curl + -H \"Authorization: Bearer $TOKEN_PASSWORD\" \\\n https://api.linode.com/v4/volumes + | jq -S\n}\n\nfunction get_volume_property {\n # Example: get_volume_property + \"$VOLUME_LABEL\" \"$PROPERTY\"\n\n local -r volume=\"$1\" property=\"$2\"\n local + -a volume_list=(\"$(list_volumes)\")\n local -r num_volumes=$(echo \"${volume_list[@]}\" + | jq ''.results'')\n\n for ((i=0; i<$num_volumes; i++)); do\n local + volume_name=$(echo \"${volume_list[@]}\" | jq .data[$i].label | sed ''s/\"//g'')\n case + \"$volume_name\" in\n \"$volume\")\n echo \"${volume_list[@]}\" + | jq .data[$i].$property\n break;\n ;;\n esac\n done\n}\n\nfunction + check_volume {\n # Example: check_volume \"$volume\"\n\n local -r volume=\"$1\"\n if + [ $(get_volume_property \"$volume\" ''label'') ];\n then return 0;\n else + return 1;\n fi\n}\n\n\n## Create Block Storage Volumes\n\nfunction create_volume + {\n # Example: create_volume \"$VOLUME_LABEL\" $VOLUME_SIZE $LINODE_ID (optional)\n # + If you don''t specify a Linode ID, it will default to the current Linode\n\n local + -r label=\"$1\" size=\"$2\" linode_id=\"${3:-$LINODE_ID}\"\n\n curl -H \"Content-Type: + application/json\" \\\n -H \"Authorization: Bearer $TOKEN_PASSWORD\" + \\\n -X POST -d ''{\n \"label\": \"''\"$label\"''\",\n \"size\": + ''$size'',\n \"linode_id\": ''$linode_id''\n }'' https://api.linode.com/v4/volumes + | jq -S\n}\n\n\n## Attach/Detach/Mount Block Storage Volumes\n\nfunction attach_volume + {\n # Example: attach_volume \"$VOLUME_LABEL\" $LINODE_ID (optional)\n # + If you don''t specify a Linode ID, it will default to the current Linode\n\n local + -r volume_label=\"$1\" linode_id=\"${2:-$LINODE_ID}\"\n local -r volume_id=$(get_volume_property + \"$volume_label\" ''id'')\n\n curl -H \"Content-Type: application/json\" + \\\n -H \"Authorization: Bearer $TOKEN_PASSWORD\" \\\n -X POST + -d ''{\n \"linode_id\": ''$linode_id''\n }'' https://api.linode.com/v4/volumes/$volume_id/attach\n\n}\n\nfunction + detach_volume {\n # Example: detach_volume $VOLUME_ID\n\n local -r volume_id=\"$1\"\n\n curl + -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer + $TOKEN_PASSWORD\" \\\n -X POST \\\n https://api.linode.com/v4/volumes/$volume_id/detach\n\n}\n\nfunction + mount_volume {\n # Example: mount_volume \"$VOLUME_LABEL\" ''/path/to/mount_point''\n\n local + -r volume_label=\"$1\" mount_point=\"$2\"\n local -r volume_path=\"$(\n get_volume_property + \"$volume_label\" ''filesystem_path'' | sed ''s/\"//g''\n )\"\n\n # Wait + for the volume to become available before proceeding\n local x=1\n while + [ $x -gt 0 ]; do\n [ -e $volume_path ] && ((x-=1))\n sleep 1\n done\n\n # + Create a filesystem on the volume\n mkfs.ext4 \"$volume_path\"\n\n # Create + \"$mount_point\" and mount the volume there\n mkdir -p \"$mount_point\"\n mount + \"$volume_path\" \"$mount_point\"\n\n # Automatically mount the volume at + boot\n echo \"$volume_path $mount_point ext4 defaults 0 2\" >> /etc/fstab\n}\n\n\nfunction + delete_volume {\n # Example: delete_volume $VOLUME_ID\n\n local -r volume_id=\"$1\"\n\n curl + -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer + $TOKEN_PASSWORD\" \\\n -X DELETE \\\n https://api.linode.com/v4/volumes/$volume_id\n}", + "user_defined_fields": []}, {"id": 48408, "username": "crooksau", "user_gravatar_id": + "f33d8e66bbce5c95fcb2a96dc8a4beaa", "label": "Debian 8 Install", "description": + "Debian 8 Install for BODYRUBS.RU", "ordinal": 0, "logo_url": "", "images": + ["linode/debian8"], "deployments_total": 0, "deployments_active": 0, "is_public": + true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", + "rev_note": "Initial import", "script": "#!/bin/sh", "user_defined_fields": + []}, {"id": 9241, "username": "webuzo", "user_gravatar_id": "cf0348f835d60e6d133040f49bb36ec5", + "label": "Admidio powered by Webuzo", "description": "Admidio is a free online + membership management, optimized for clubs, groups and organizations. It consists + of classical management members from a variety of modules that can be installed + and adjusted to a new or existing website.\r\n\r\nRegistered users have your + website by Admidio including access to predefined and user-configurable membership + lists, people profiles and an Agenda. In addition, members may be pooled in + groups are assigned properties and search for it.\r\n\r\nWebuzo is a Single + User Control Panel which helps users deploy Web Apps (WordPress, Joomla, Drupal, + etc) or System Apps (Apache, NGINX, PHP, Java, MongoDB, etc) on their virtual + machines or in the cloud.\r\n\r\nYou can get a Webuzo License here\r\nhttp://www.webuzo.com/pricing\r\n\r\nPath to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion of the installation process, access http://your-ip:2004 to configure Admidio and Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", - "ordinal": 0, "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", - "linode/ubuntu14.04lts", "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], + "ordinal": 0, "logo_url": "", "images": ["linode/centos5.6", "linode/ubuntu10.04lts32bit", + "linode/ubuntu10.04lts", "linode/ubuntu14.04lts", "linode/ubuntu12.04lts", "linode/centos6.8"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "Admidio powered by Webuzo", "script": "#!/bin/bash\n# \n# \n\n## Enable logging \nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) + 2>&1\n\n# Apt update/upgrade\napt update\napt upgrade -y\n\n# Install the dependencies + & add Docker to the APT repository\napt install -y apt-transport-https ca-certificates + curl software-properties-common gnupg2 pwgen ufw\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg + | apt-key add -\nadd-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu + focal stable\"\n\n# Update & install Docker-CE\napt update\napt install -y docker-ce\n\n# + Check to ensure Docker is running and installed correctly\nsystemctl status + docker\ndocker -v\n\n# Env config\nILLA_HOME_DIR=/var/lib/illa\nPG_VOLUMN=${ILLA_HOME_DIR}/database/postgresql\nWSS_ENABLED=false\nILLA_DEPLOY_MODE=''self-host''\n\n\n# + Init\nmkdir -p ${ILLA_HOME_DIR}\nmkdir -p ${PG_VOLUMN}\nmkdir -p ${ILLA_HOME_DIR}\nchmod + 0777 ${PG_VOLUMN} # @todo: chmod for MacOS, the gid is \"wheel\", not \"root\". + and we will fix this later.\n\n# Run\ndocker run -d \\\n --name illa-builder + \\\n -e POSTGRES_PASSWORD=$PG_PASSWORD \\\n -e GIN_MODE=release \\\n -e + PGDATA=/var/lib/postgresql/data/pgdata \\\n -e ILLA_DEPLOY_MODE=$ILLA_DEPLOY_MODE + \\\n -v $PG_VOLUMN:/var/lib/postgresql/data \\\n -p $PORT:80 \\\n illasoft/illa-builder:latest\n\necho + \"\n********************************************************************************\nWelcome + to ILLA Builder!\n********************************************************************************\n # + Website: https://www.illacloud.com\n # Documentation: https://www.illacloud.com/docs/about-illa\n # + Github: https://github.com/illacloud\n # Community Support: https://github.com/orgs/illacloud/discussions\"", + "user_defined_fields": [{"name": "PORT", "label": "ILLA Builder Port", "example": + "Default: 80", "default": "80"}, {"name": "PG_PASSWORD", "label": "Postgres + Password", "example": "s3cure_p4ssw0rd"}]}, {"id": 14362, "username": "ezan", + "user_gravatar_id": "40bba314333f02cceb3f40d8a2aabb78", "label": "install-sensu", "description": "", "ordinal": 0, "logo_url": "", "images": ["linode/ubuntu14.04lts"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": @@ -2232,8 +2680,8 @@ interactions: here\r\nhttp://www.webuzo.com/pricing\r\n\r\nPath to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion of the installation process, access http://your-ip:2004 to configure Little Software Stats and Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", - "ordinal": 0, "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", - "linode/ubuntu14.04lts", "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], + "ordinal": 0, "logo_url": "", "images": ["linode/centos5.6", "linode/ubuntu10.04lts32bit", + "linode/ubuntu10.04lts", "linode/ubuntu14.04lts", "linode/ubuntu12.04lts", "linode/centos6.8"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "Little Software Stats powered by Webuzo", "script": "#!/bin/bash\n# \n\tVersion: + 1.0.1.2\n\tRequirements:\n\t\t- ss://linode/python-library \n\nThis + StackScript both deploys as well as provides a library of functions for\nPHP. + The functions in this StackScript are designed to be run across the \nLinode + Core Distributions:\n\t- Ubuntu\n\t- CentOS\n\t- Debian\n\t- Fedora\n\"\"\"\n\nimport + os\nimport subprocess\nimport sys\n\ntry: # we''ll need to rename included StackScripts + before we can import them\n\tos.rename(\"/root/ssinclude-3\", \"/root/pythonlib.py\")\nexcept:\n\tpass\n\nimport + pythonlib\n\n\ndef php_apache_mod_install():\n\t\"\"\"Install Apache httpd PHP + module.\"\"\"\n\t# add logging support\n\n\tpackage = {\n\t\t''debian'': ''php5'',\n\t\t''redhat'': + ''php''\n\t}\n\n\tpythonlib.system_package_install(package[pythonlib.distro[''family'']])\n\n\n#def + php_fpm_install():\n\n\ndef php_install():\n\t\"\"\"Install PHP.\n\t\n\tDefaults + to installing the mod_PHP implemention of PHP.\n\t\"\"\"\n\t# add logging support\n\n\tphp_apache_mod_install()\n\n\ndef + php_install_module(module, update_index=True):\n\t\"\"\"Install a PHP module.\"\"\"\n\n\tprefix + = {\n\t\t''debian'': ''php5-'',\n\t\t''redhat'': ''php-''\n\t}\n\n\tpythonlib.system_package_install(prefix[pythonlib.distro[''family'']] + + module, update_index)\n\n\ndef php_install_module_common():\n\t\"\"\"Install + most common PHP modules.\n\n\tInstall GD, mcrypt, pear, mysql, and the cli.\"\"\"\n\t\n\tphp_install_module(\"gd\")\n\t#php_install_module(\"mcrypt\", + False) #not in CentOS7 repos :(\n\t#php_install_module(\"pear\", False) # both + families use php-pear so\n\t#installing php5-pear in the Debian family will + fail\n\tphp_install_module(\"mysql\", False)\n\tphp_install_module(\"cli\", + False)\n\trestart()\n\n\ndef restart():\n\tif pythonlib.distro[''family''] == + \"debian\":\n\t\tsubprocess.call([''service'', ''apache2'', ''restart''])\n\telif + pythonlib.distro[''family''] == \"redhat\":\n\t\tsubprocess.call([''systemctl'', + ''restart'', ''httpd''])\n\n\ndef main():\n\t\"\"\"Install PHP.\"\"\"\n\t# add + logging support\n\t\n\tpythonlib.init()\n\tpythonlib.system_update()\n\tphp_install()\n\n\tpythonlib.end()\n\n\nif + __name__ == \"__main__\":\n\tsys.exit(main())", "user_defined_fields": []}, + {"id": 1158683, "username": "yoboycc", "user_gravatar_id": "e598b7c77d05460a72ceb4397cbc72f6", + "label": "snapchat", "description": "", "ordinal": 0, "logo_url": "", "images": + ["linode/debian11"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", - "rev_note": "revision", "script": "#!/bin/bash\r\ntest", "user_defined_fields": - []}, {"id": 9244, "username": "webuzo", "user_gravatar_id": "cf0348f835d60e6d133040f49bb36ec5", - "label": "DIY powered by Webuzo", "description": "DIY is an open-source lightweight - web application framework based on object-oriented PHP 5, MySQL, and XSLT. It - is fully object-oriented and designed following the MVC architecture and REST - design principles. The idea behind it is not to reinvent the wheel but instead - to combine existing and proven technologies in a convenient and effective way.\r\n\r\nWebuzo - is a Single User Control Panel which helps users deploy Web Apps (WordPress, - Joomla, Drupal, etc) or System Apps (Apache, NGINX, PHP, Java, MongoDB, etc) - on their virtual machines or in the cloud.\r\n\r\nYou can get a Webuzo License - here\r\nhttp://www.webuzo.com/pricing\r\n\r\nPath to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn - completion of the installation process, access http://your-ip:2004 to configure - DIY and Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", - "ordinal": 0, "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", - "linode/ubuntu14.04lts", "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], + "rev_note": "", "script": "#!/bin/bash\nhttps://104-200-19-103.ip.linodeusercontent.com:3000/demos/butcher/index.html", + "user_defined_fields": []}, {"id": 978971, "username": "meenubediShine", "user_gravatar_id": + "ac16f37ccd972a6f698dab5aab1188b2", "label": "test", "description": "test", + "ordinal": 0, "logo_url": "", "images": ["linode/alpine3.13"], "deployments_total": + 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", + "updated": "2018-01-02T03:04:05", "rev_note": "revision", "script": "#!/bin/bash\r\ntest", + "user_defined_fields": []}, {"id": 9244, "username": "webuzo", "user_gravatar_id": + "cf0348f835d60e6d133040f49bb36ec5", "label": "DIY powered by Webuzo", "description": + "DIY is an open-source lightweight web application framework based on object-oriented + PHP 5, MySQL, and XSLT. It is fully object-oriented and designed following the + MVC architecture and REST design principles. The idea behind it is not to reinvent + the wheel but instead to combine existing and proven technologies in a convenient + and effective way.\r\n\r\nWebuzo is a Single User Control Panel which helps + users deploy Web Apps (WordPress, Joomla, Drupal, etc) or System Apps (Apache, + NGINX, PHP, Java, MongoDB, etc) on their virtual machines or in the cloud.\r\n\r\nYou + can get a Webuzo License here\r\nhttp://www.webuzo.com/pricing\r\n\r\nPath to + Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion + of the installation process, access http://your-ip:2004 to configure DIY and + Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", "ordinal": + 0, "logo_url": "", "images": ["linode/centos5.6", "linode/ubuntu10.04lts32bit", + "linode/ubuntu10.04lts", "linode/ubuntu14.04lts", "linode/ubuntu12.04lts", "linode/centos6.8"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "DIY powered by Webuzo", "script": "#!/bin/bash\n# /etc/apt/sources.list.d/sensu.list\n\napt-get + "2018-01-02T03:04:05", "rev_note": "", "script": "#!/bin/bash\n\n# \n# + \n# + \n\n# source the stackscript + for the selected control panel\nif [ \"$CONTROL_PANEL\" == \"cPanel\" ]; then\n # + redirect ALL output to the stackscript log for future troubleshooting\n exec + > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\n\n # cPanel Marketplace + App install\n source \n\n # set the hostname + to replicate Plesk stackscript for consistent behavior\n IPADDR=$(/sbin/ifconfig + eth0 | awk ''/inet / { print $2 }'' | sed ''s/addr://'')\n echo $HOSTNAME + > /etc/hostname\n hostname -F /etc/hostname\n echo $IPADDR $HOSTNAME >> + /etc/hosts\nelif [ \"$CONTROL_PANEL\" == \"Plesk\" ]; then\n # Plesk Marketplace + App install\n # NOTE: do not redirect output to the stackscript log to avoid + duplicate log\n # lines as the Plesk stackscript already redirects + to it\n source \nelse\n echo \"Invalid + control panel option detected. Aborting...\"\n exit 1\nfi\n\n# install MagicSpam + via the installer script\nwget https://www.magicspam.com/download/magicspam-installer.sh + -O /root/magicspam-installer\nchmod +x /root/magicspam-installer\n/root/magicspam-installer + -l \"$MS_LICENSE_KEY\"", "user_defined_fields": [{"name": "control_panel", "label": + "The Control Panel to deploy alongside with MagicSpam. Make sure to select an + Image supported by the selected Control Panel. For more information, please + refer to the MagicSpam App Information Sidebar.", "oneof": "cPanel,Plesk"}, + {"name": "ms_license_key", "label": "The MagicSpam license key. Please make + sure to use the appropriate license key for the selected Control Panel. For + more information, please refer to the MagicSpam App information sidebar."}, + {"name": "hostname", "label": "The server''s hostname."}]}, {"id": 14364, "username": + "ezan", "user_gravatar_id": "40bba314333f02cceb3f40d8a2aabb78", "label": "configure-repo-sensu", + "description": "", "ordinal": 0, "logo_url": "", "images": ["linode/ubuntu14.04lts"], + "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": + false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": + "Initial import", "script": "#!/bin/bash\nset -eux\n\ncurl -s http://repos.sensuapp.org/apt/pubkey.gpg + | apt-key add -\necho \"deb http://repos.sensuapp.org/apt sensu main\" > /etc/apt/sources.list.d/sensu.list\n\napt-get update -q", "user_defined_fields": []}, {"id": 978972, "username": "meenubediShine", "user_gravatar_id": "ac16f37ccd972a6f698dab5aab1188b2", "label": "test", "description": - "test description", "ordinal": 0, "logo_url": "", "images": ["linode/alpine3.13", - "linode/opensuse15.2"], "deployments_total": 0, "deployments_active": 0, "is_public": + "test description", "ordinal": 0, "logo_url": "", "images": ["linode/opensuse15.2", + "linode/alpine3.13"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "revision", "script": "#!/bin/bash\r\ntest", "user_defined_fields": []}, {"id": 8989, "username": "webuzo", "user_gravatar_id": "cf0348f835d60e6d133040f49bb36ec5", @@ -2344,12 +2861,12 @@ interactions: here\r\nhttp://www.webuzo.com/pricing\r\n\r\nPath to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion of the installation process, access http://your-ip:2004 to configure Joomla 2.5 and Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", - "ordinal": 0, "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", - "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], - "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": - false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": - "Joomla 2.5 powered by Webuzo", "script": "#!/bin/bash\n# \n\n###########################################################################################################\n# + "ordinal": 0, "logo_url": "", "images": ["linode/centos5.6", "linode/ubuntu10.04lts32bit", + "linode/ubuntu10.04lts", "linode/ubuntu12.04lts", "linode/centos6.8"], "deployments_total": + 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", + "updated": "2018-01-02T03:04:05", "rev_note": "Joomla 2.5 powered by Webuzo", + "script": "#!/bin/bash\n# \n\n###########################################################################################################\n# Install Joomla 2.5 and Softaculous Webuzo\n# Description -\n# About Webuzo :\n# Webuzo is a Single User Control Panel which helps users deploy Web Apps (WordPress, Joomla, Drupal, etc)\n# or System Apps (Apache, NGINX, PHP, Java, MongoDB, @@ -2390,8 +2907,8 @@ interactions: here\r\nhttp://www.webuzo.com/pricing\r\n\r\nPath to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion of the installation process, access http://your-ip:2004 to configure ShopSite and Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", - "ordinal": 0, "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", - "linode/ubuntu14.04lts", "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], + "ordinal": 0, "logo_url": "", "images": ["linode/centos5.6", "linode/ubuntu10.04lts32bit", + "linode/ubuntu10.04lts", "linode/ubuntu14.04lts", "linode/ubuntu12.04lts", "linode/centos6.8"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "ShopSite powered by Webuzo", "script": "#!/bin/bash\n# >(tee -a \"/var/log/stackscript.log\") 2>&1\n# + System Updates updates\napt-get -o Acquir1234::5678orceIPv4=true update -y\n## END + OF REQUIRED CODE FOR MARKETPLACE SUBMISSION\n\n# Install docker\ncurl -fsSL + get.docker.com | sudo sh\n\n# Creating Password\necho \"Superinsight setting + up password....\"\nADMIN_PASSWORD=$(openssl rand -hex 12)\nNODE_IP=$(hostname + -I | cut -f1 -d'' '')\necho \"Downloading and Installing Superinsight instance......\"\n\n# + Install Superinsight\ndocker run \\\n--detach \\\n--name superinsight-db-standalone + \\\n--restart always \\\n-p 5432:5432 \\\n-v vol-superinsight:/db \\\n-e SUPERINSIGHT_USER=admin + \\\n-e SUPERINSIGHT_PASSWORD=\"${ADMIN_PASSWORD}\" \\\nsuperinsight/superinsight-db-standalone:latest\n\n\n# + Print instructions\ncat << EOF > /etc/motd\n\n################################################################################################################################################\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tSUPERINSIGHT\n################################################################################################################################################\n\nSuperinsight + created the user admin with password: ${ADMIN_PASSWORD}\nYou can can connect + using a database client with the following connection string postgres://admin:${ADMIN_PASSWORD}@${NODE_IP}:5432/superinsight\nFor + complete source code and information, visit: https://github.com/superinsight/superinsight-db\n\n################################################################################################################################################\nEOF", + "user_defined_fields": []}, {"id": 8996, "username": "webuzo", "user_gravatar_id": + "cf0348f835d60e6d133040f49bb36ec5", "label": "MyBB powered by Webuzo", "description": + "MyBB is a free bulletin board system software package developed by the MyBB + Group. \r\n\r\nA lot of thought has gone into the MyBB interface to make it + easy to use. MyBB uses a standard discussion board structure, so your visitors + will feel familiar with the way MyBB works.\r\n\t\t\t\r\nWebuzo is a Single + User Control Panel which helps users deploy Web Apps (WordPress, Joomla, Drupal, + etc) or System Apps (Apache, NGINX, PHP, Java, MongoDB, etc) on their virtual + machines or in the cloud.\r\n\r\nYou can get a Webuzo License here\r\nhttp://www.webuzo.com/pricing\r\n\r\nPath + to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion + of the installation process, access http://your-ip:2004 to configure MyBB and + Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", "ordinal": + 0, "logo_url": "", "images": ["linode/centos5.6", "linode/ubuntu10.04lts32bit", + "linode/ubuntu10.04lts", "linode/ubuntu14.04lts", "linode/ubuntu12.04lts", "linode/centos6.8"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "MyBB powered by Webuzo", "script": "#!/bin/bash\n# \nsource \nsystem_set_hostname + \"$HOSTNAME\"\nexec > >(tee /dev/ttyS0 /var/log/stackscript.log) 2>&1\napt update + && apt upgrade -y && apt install -y curl wget net-tools traceroute jq\n# Generate + files\nmkdir -p /etc/victoriametrics/single\nmkdir -p /var/lib/victoria-metrics-data\nmkdir + -p /var/lib/cloud/scripts/per-instance\n# Create victoriametrics user\ngroupadd + -r victoriametrics\nuseradd -g victoriametrics -d /var/lib/victoria-metrics-data + -s /sbin/nologin --system victoriametrics\nchown -R victoriametrics:victoriametrics + /var/lib/victoria-metrics-data\n# Install VictoriaMetrics Single\nVM_VERSION=`curl + -sg \"https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/tags\" | + jq -r ''.[0].name''`\nwget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/${VM_VERSION}/victoria-metrics-linux-amd64-${VM_VERSION}.tar.gz -O + /tmp/victoria-metrics.tar.gz\ntar xvf /tmp/victoria-metrics.tar.gz -C /usr/bin\nchmod + +x /usr/bin/victoria-metrics-prod\nchown root:root /usr/bin/victoria-metrics-prod\ntouch + /etc/victoriametrics/single/scrape.yml\nchown root:root /etc/victoriametrics/single/scrape.yml\ncat + </etc/systemd/system/vmsingle.service\n[Unit]\nDescription=VictoriaMetrics + is a fast, cost-effective and scalable monitoring solution and time series database.\n# + https://docs.victoriametrics.com\nAfter=network.target\n[Service]\nType=simple\nUser=victoriametrics\nGroup=victoriametrics\nWorkingDirectory=/var/lib/victoria-metrics-data\nStartLimitBurst=5\nStartLimitInterval=0\nRestart=on-failure\nRestartSec=5\nEnvironmentFile=-/etc/victoriametrics/single/victoriametrics.conf\nExecStart=/usr/bin/victoria-metrics-prod + \\$ARGS\nExecStop=/bin/kill -s SIGTERM \\$MAINPID\nExecReload=/bin/kill -HUP + \\$MAINPID\n# See docs https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#tuning\nProtectSystem=full\nLimitNOFILE=1048576\nLimitNPROC=1048576\nLimitCORE=infinity\nStandardOutput=syslog\nStandardError=syslog\nSyslogIdentifier=vmsingle\n[Install]\nWantedBy=multi-user.target\nEND\ncat + </etc/victoriametrics/single/victoriametrics.conf\n# See https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#list-of-command-line-flags + to get more information about supported command-line flags\n# \n# If you use + IPv6 pleas add \"-enableTCP6\" to args line\nARGS=\"-promscrape.config=/etc/victoriametrics/single/scrape.yml + -storageDataPath=/var/lib/victoria-metrics-data -retentionPeriod=12 -httpListenAddr=:8428 + -graphiteListenAddr=:2003 -opentsdbListenAddr=:4242 -influxListenAddr=:8089 + -enableTCP6\"\nEND\ncat < /etc/profile.d/victoriametrics_welcome.sh\n#!/bin/sh\n#\nmyip=$(hostname -I + | awk ''{print$1}'')\n******************************************************************************** + \nWelcome to VictoriaMetrics Single.\nTo keep this server secure, the UFW firewall + is enabled.\nAll ports are BLOCKED except 22 (SSH), 80 (HTTP), and 443 (HTTPS), + 8428 (VictoriaMetrics HTTP), 8089 (VictoriaMetrics Influx),\n4242 (VictoriaMetrics + OpenTSDB), 2003 (VictoriaMetrics Graphite)\nIn a web browser, you can view:\n + * The VictoriaMetrics Quickstart guide: https://kutt.it/1click-quickstart\nOn + the server:\n * The default VictoriaMetrics root is located at /var/lib/victoria-metrics-data\n * + VictoriaMetrics is running on ports: 8428, 8089, 4242, 2003 and they are bound + to the local interface.\n********************************************************************************\n # + This image includes version v1.74.0 of VictoriaMetrics. \n # See Release notes + https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.70.0\n # + Welcome to VictoriaMetrics droplet!\n # Website: https://victoriametrics.com\n # + Documentation: https://docs.victoriametrics.com\n # VictoriaMetrics Github + : https://github.com/VictoriaMetrics/VictoriaMetrics\n # VictoriaMetrics Slack + Community: https://slack.victoriametrics.com\n # VictoriaMetrics Telegram Community: + https://t.me/VictoriaMetrics_en\n # VictoriaMetrics config: /etc/victoriametrics/single/victoriametrics.conf\n # + VictoriaMetrics scrape config: /etc/victoriametrics/single/scrape.yml\n # + VictoriaMetrics UI accessable on: http://your_droplet_public_ipv4:8428/vmui/\nEND\n# + Enable UFW and add some rules to it\nsed -e ''s|DEFAULT_FORWARD_POLICY=.*|DEFAULT_FORWARD_POLICY=\"ACCEPT\"|g'' + \\\n -i /etc/default/ufw\nufw allow ssh comment \"SSH port\"\nufw allow http + comment \"HTTP port\"\nufw allow https comment \"HTTPS port\"\nufw allow 8428 + comment \"VictoriaMetrics Single HTTP port\"\nufw allow 8089/tcp comment \"TCP + Influx Listen port for VictoriaMetrics\"\nufw allow 8089/udp comment \"UDP Influx + Listen port for VictoriaMetrics\"\nufw allow 2003/tcp comment \"TCP Graphite + Listen port for VictoriaMetrics\"\nufw allow 2003/udp comment \"UDP Graphite + Listen port for VictoriaMetrics\"\nufw allow 4242 comment \"OpenTSDB Listen + port for VictoriaMetrics\"\nufw --force enable\n# Cleaning up\nrm -rf /tmp/* + /var/tmp/*\nhistory -c\ncat /dev/null > /root/.bash_history\nunset HISTFILE\nfind + /var/log -mtime -1 -type f ! -name ''stackscript.log'' -exec truncate -s 0 {} + \\;\n# Start VictoriaMetrics\nsystemctl enable vmsingle.service\nsystemctl start + vmsingle.service\necho \"Installation complete!\"", "user_defined_fields": [{"name": + "hostname", "label": "Hostname"}]}, {"id": 9254, "username": "webuzo", "user_gravatar_id": "cf0348f835d60e6d133040f49bb36ec5", "label": "Apache Roller powered by Webuzo", "description": "Apache Roller is a full-featured, multi-user and group-blog server suitable for blog sites large and small.\r\n\r\nApache Roller is a Java @@ -2845,8 +3446,8 @@ interactions: Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion of the installation process, access http://your-ip:2004 to configure Apache Roller and Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", - "ordinal": 0, "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", - "linode/ubuntu14.04lts", "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], + "ordinal": 0, "logo_url": "", "images": ["linode/centos5.6", "linode/ubuntu10.04lts32bit", + "linode/ubuntu10.04lts", "linode/ubuntu14.04lts", "linode/ubuntu12.04lts", "linode/centos6.8"], "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": "Apache Roller powered by Webuzo", "script": "#!/bin/bash\n# \n\n###########################################################################################################\n# - Install Jcow and Softaculous Webuzo\n# Description -\n# About Webuzo :\n# Webuzo - is a Single User Control Panel which helps users deploy Web Apps (WordPress, - Joomla, Drupal, etc)\n# or System Apps (Apache, NGINX, PHP, Java, MongoDB, - etc) on their virtual machines or in the cloud.\n#\n# About Jcow :\n# Jcow - is a flexible Social Networking software written in PHP. It can help you to:\n# * - Build a social network for your interests and passions.\n# * Build a member - community for your existing website.\n# * Build a social networking site - like facebook/myspace/twitter.\n###########################################################################################################\n\n# - Install Jcow Script using Webuzo\nfunction install_webuzo_script(){\n \n # - Install Webuzo\n install_webuzo\n \n wget http://files.webuzo.com/ip.php - >> /root/webuzo-install.log 2>&1\n ip=$(cat ip.php)\n \n /usr/local/emps/bin/curl - \"http://$ip:2004/install.php?prepareinstall=182&license=$1\"\n \n}\n\n# Install - Webuzo Function\nfunction install_webuzo(){\n \n # Fetch the Webuzo - Installer\n wget -N http://files.webuzo.com/install.sh >> /root/webuzo-install.log - 2>&1\n \n # Modify Permissions\n chmod 0755 install.sh >> /root/webuzo-install.log - 2>&1\n \n # Execute\n ./install.sh >> /root/webuzo-install.log 2>&1\n \n # - Clean Up\n rm -rf install.sh >> /root/webuzo-install.log 2>&1\n \n}\n\n#########################################################\n#\tInstalling - Jcow and Softaculous Webuzo\n#########################################################\n\ninstall_webuzo_script - $WEBUZO_LICENSE_KEY\n\n# Check the return of the above command and display the - result accordingly\n\necho \" \"\necho \"-------------------------------------\"\necho - \" Installation Completed \"\necho \"-------------------------------------\"\necho - \"Congratulations, Jcow has been successfully installed\"\necho \" \"\necho - \"You can now configure Jcow and Softaculous Webuzo at the following URL :\"\necho - \"http://$ip:2004/\"\necho \" \"\necho \"Thank you for choosing Softaculous - Webuzo !\"\necho \" \"", "user_defined_fields": []}, {"id": 401711, "username": - "linode", "user_gravatar_id": "9d4d301385af69ceb7ad658aad09c142", "label": "Linux - GSM Helper", "description": "Linux GSM One-Click Helper", "ordinal": 0, "logo_url": - "assets/linuxgsm.svg", "images": ["linode/debian10", "linode/debian9"], "deployments_total": - 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", - "updated": "2018-01-02T03:04:05", "rev_note": "", "script": "#!/bin/bash\n\n# - Linux GSM install\n\nfunction linuxgsm_install {\n\necho Configuring IP address\nIPADDR=`hostname - -I | awk ''{print$1}''`\n\n# Add a user for the game server\necho Setting up - a user\nadduser --disabled-password --gecos \"\" \"$GAMESERVER\"\necho \"$GAMESERVER - ALL=(ALL) NOPASSWD: ALL\" >> /etc/sudoers\n\n# Download and the LinuxGSM script\necho - Downloading LinuxGSM\n# TESTING\ncd /home/\"$GAMESERVER\"/\n# OLD: wget -4 https://linuxgsm.com/dl/linuxgsm.sh - -P /home/\"$GAMESERVER\"/\nwget -O linuxgsm.sh https://linuxgsm.sh -P /home/\"$GAMESERVER\"/\nchmod - +x /home/\"$GAMESERVER\"/linuxgsm.sh\nchown -R \"$GAMESERVER\":\"$GAMESERVER\" - /home/\"$GAMESERVER\"/*\n\n# Run the GSM script\necho running LinuxGSM script\nsu - - \"$GAMESERVER\" -c \"/home/$GAMESERVER/linuxgsm.sh $GAMESERVER\"\n\n}\n\n\nfunction - game_install {\n\n# Installing the Server\necho Installing the Server\nsu - - \"$GAMESERVER\" -c \"/home/$GAMESERVER/$GAMESERVER auto-install\"\nif [[ \"$GAMESERVER\" - =~ (^boserver$|^bb2server$|^bmdmserver$| \\\n^cssserver$|^csgoserver$|^dodsserver$|^emserver$| - \\\n^gmodserver$|^insserver$|^nmrihserver$|^tf2server$| \\\n^tuserver$|^zpsserver$) - ]]; then\n echo -e \"\\ngslt=$GSLT\" >> /home/\"$GAMESERVER\"/lgsm/config-lgsm/\"$GAMESERVER\"/\"$GAMESERVER\".cfg\nelse\n echo - No Gameserver Login Token Needed\nfi\n\n}\n\n\nfunction service_config {\n\n# - Add cron jobs for updating the gameserver and linuxgsm. Monitor will ensure - that the gameserver is running and restart if needed.\necho Adding game update - cron jobs\ncrontab -l > gamecron\necho \"*/5 * * * * su - $GAMESERVER -c ''/home/$GAMESERVER/$GAMESERVER - monitor'' > /dev/null 2>&1\" >> gamecron\necho \"0 23 * * * su - $GAMESERVER - -c ''/home/$GAMESERVER/$GAMESERVER update'' > /dev/null 2>&1\" >> gamecron\necho - \"30 23 * * * su - $GAMESERVER -c ''/home/$GAMESERVER/$GAMESERVER update-functions'' - > /dev/null 2>&1\" >> gamecron\ncrontab gamecron\nrm gamecron\n\n# Create systemd - service file\n\ncat << END > /etc/systemd/system/$GAMESERVER.service\n[Unit]\nDescription=$GAMESERVER\n\n[Service]\nUser=$GAMESERVER\nType=forking\nExecStart=/bin/bash - /home/$GAMESERVER/$GAMESERVER start\nExecStop=/bin/kill -2 $MAINPID\n\n[Install]\nWantedBy=multi-user.target\nEND\n\n}\n\n## - Adding these for Valheim launch, will eventually replace the above code, but - for now, we added ''v_'' in front of functions\n\nfunction v_linuxgsm_install - {\n local -r gameserver=\"$1\" username=\"$2\"\n\n su - \"$username\" - -c \"\n # Download and the LinuxGSM script\n wget -O linuxgsm.sh - https://linuxgsm.sh\n chmod +x linuxgsm.sh\n # Run the GSM script\n /home/$username/linuxgsm.sh - $gameserver\n \"\n}\n\nfunction v_linuxgsm_game_install {\n local -r gameserver=\"$1\" - username=\"$2\"\n\n # Installing the Server\n su - \"$username\" -c \"/home/$username/$gameserver - auto-install\"\n if [[ \"$gameserver\" =~ (^boserver$|^bb2server$|^bmdmserver$| - \\\n ^cssserver$|^csgoserver$|^dodsserver$|^emserver$| \\\n ^gmodserver$|^insserver$|^nmrihserver$|^tf2server$| - \\\n ^tuserver$|^zpsserver$) ]]; then\n echo -e \"\\ngslt=$GSLT\" - >> \"/home/$username/lgsm/config-lgsm/$gameserver/$gameserver.cfg\"\n else\n echo - No gameserver Login Token Needed\n fi\n}\n\nfunction v_linuxgsm_service_config - {\n local -r gameserver=\"$1\" username=\"$2\"\n\n # Add cron jobs for - updating the game server and LinuxGSM\n # Monitor will ensure that the gameserver - is running and restart if needed\n crontab -l > gamecron\n\n echo \"*/5 - * * * * su - \"$username\" -c ''/home/$username/$gameserver monitor'' > /dev/null - 2>&1\" >> gamecron\n echo \"0 23 * * * su - \"$username\" -c ''/home/$username/$gameserver - update'' > /dev/null 2>&1\" >> gamecron\n echo \"30 23 * * * su - \"$username\" - -c ''/home/$username/$gameserver update-functions'' > /dev/null 2>&1\" >> gamecron\n\n crontab - gamecron\n rm gamecron\n\n # Create systemd service file\n cat << EOF - > /etc/systemd/system/$gameserver.service\n[Unit]\nDescription=$gameserver\n[Service]\nUser=$username\nType=forking\nExecStart=/bin/bash - /home/$username/$gameserver start\nExecStop=/bin/kill -2 \\$MAINPID\n[Install]\nWantedBy=multi-user.target\nEOF\n}\n\nfunction - v_linuxgsm_oneclick_install {\n local -r gameserver=\"$1\" username=\"$2\"\n\n v_linuxgsm_install - \"$gameserver\" \"$username\"\n v_linuxgsm_game_install \"$gameserver\" \"$username\"\n v_linuxgsm_service_config - \"$gameserver\" \"$username\"\n}", "user_defined_fields": []}, {"id": 883247, - "username": "hankersaeb", "user_gravatar_id": "6a47fbc2e36ad66d2f8c4a0d783f75df", - "label": "hello", "description": "hello world hhgg", "ordinal": 0, "logo_url": - "", "images": ["linode/almalinux8"], "deployments_total": 0, "deployments_active": - 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": - "2018-01-02T03:04:05", "rev_note": "Hello man12", "script": "#!bin/bash", "user_defined_fields": - []}, {"id": 2864, "username": "jmfox1987", "user_gravatar_id": "6f9936b78bbbbaf91191091d114aa66f", - "label": "mySQL", "description": "i have no idea", "ordinal": 0, "logo_url": - "", "images": ["linode/ubuntu10.04lts32bit"], "deployments_total": 0, "deployments_active": - 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": - "2018-01-02T03:04:05", "rev_note": "Initial import", "script": "#!/bin/bash\n# - \n# \n# \n# \n\t \n \nsource \n \nsystem_update\npostfix_install_loopback_only\nmysql_install - \"$DB_PASSWORD\" && mysql_tune 40\nmysql_create_database \"$DB_PASSWORD\" \"$DB_NAME\"\nmysql_create_user - \"$DB_PASSWORD\" \"$DB_USER\" \"$DB_USER_PASSWORD\"\nmysql_grant_user \"$DB_PASSWORD\" - \"$DB_USER\" \"$DB_NAME\"\nphp_install_with_apache && php_tune\napache_install - && apache_tune 40 && apache_virtualhost_from_rdns\ngoodstuff\nrestartServices", - "user_defined_fields": [{"name": "db_password", "label": "MySQL root Password"}, - {"name": "db_name", "label": "Create Database", "default": "", "example": "Optionally - create this database"}, {"name": "db_user", "label": "Create MySQL User", "default": - "", "example": "Optionally create this user"}, {"name": "db_user_password", - "label": "MySQL User''s Password", "default": "", "example": "User''s password"}]}, - {"id": 401712, "username": "linode", "user_gravatar_id": "9d4d301385af69ceb7ad658aad09c142", - "label": "Basic OCA Helper ", "description": "Basic OCA Helper One-Click", "ordinal": - 0, "logo_url": "assets/none", "images": ["linode/debian9"], "deployments_total": - 0, "deployments_active": 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", - "updated": "2018-01-02T03:04:05", "rev_note": "move apt-get upgrade to end of - script to prevent busted nf_conntrack kernel modules for UFW - cmullen ", "script": - "#!/bin/bash\n# Used for Marketplace Apps\n# Helper functions\n\nfunction apt_setup_update - {\n # Force IPv4 and noninteractive update\n echo ''Acquir1234::5678orceIPv4 \"true\";'' - > /etc/apt/apt.conf.d/99force-ipv4\n export DEBIAN_FRONTEND=noninteractive\n apt-get - update -y\n}\n\nfunction set_hostname {\n IP=`hostname -I | awk ''{print$1}''`\n HOSTNAME=`dnsdomainname - -A`\n hostnamectl set-hostname $HOSTNAME\n echo $IP $HOSTNAME >> /etc/hosts\n}\n\nfunction - mysql_root_preinstall {\n # Set MySQL root password on install\n debconf-set-selections - <<< \"mysql-server mysql-server/root_password password $DBROOT_PASSWORD\"\n debconf-set-selections - <<< \"mysql-server mysql-server/root_password_again password $DBROOT_PASSWORD\"\n}\n\nfunction - run_mysql_secure_installation_ubuntu20 {\n # Installs expect, runs mysql_secure_installation - and runs mysql secure installation.\n apt-get install -y expect\n SECURE_MYSQL=$(expect - -c \"\n set timeout 10\n spawn mysql_secure_installation\n expect \\\"Press - y|Y for Yes, any other key for No:\\\"\n send \\\"n\\r\\\"\n expect \\\"New - password:\\\"\n send \\\"$DBROOT_PASSWORD\\r\\\"\n expect \\\"Re-enter new - password:\\\"\n send \\\"$DBROOT_PASSWORD\\r\\\"\n expect \\\"Remove anonymous - users? (Press y|Y for Yes, any other key for No) :\\\"\n send \\\"y\\r\\\"\n expect - \\\"Disallow root login remotely? (Press y|Y for Yes, any other key for No) - :\\\"\n send \\\"y\\r\\\"\n expect \\\"Remove test database and access to - it? (Press y|Y for Yes, any other key for No) :\\\"\n send \\\"y\\r\\\"\n expect - \\\"Reload privilege tables now? (Press y|Y for Yes, any other key for No) :\\\"\n send - \\\"y\\r\\\"\n expect eof\n \")\n echo \"$SECURE_MYSQL\"\n}\n\nfunction ufw_install - {\n # Install UFW and add basic rules\n apt-get install ufw -y\n ufw default - allow outgoing\n ufw default deny incoming\n ufw allow ssh\n ufw enable\n systemctl - enable ufw\n\n # Stop flooding Console with messages\n ufw logging off\n}\n\nfunction - fail2ban_install {\n # Install and configure Fail2ban\n apt-get install fail2ban - -y\n cd /etc/fail2ban\n cp fail2ban.conf fail2ban.local\n cp jail.conf jail.local\n systemctl - start fail2ban\n systemctl enable fail2ban\n cd\n}\n\nfunction stackscript_cleanup - {\n # Force IPv4 and noninteractive upgrade after script runs to prevent breaking - nf_conntrack for UFW\n echo ''Acquir1234::5678orceIPv4 \"true\";'' > /etc/apt/apt.conf.d/99force-ipv4\n export - DEBIAN_FRONTEND=noninteractive \n apt-get upgrade -y\n\n rm /root/StackScript\n rm - /root/ssinclude*\n echo \"Installation complete!\"\n}\n\nfunction run_mysql_secure_installation - {\n # Installs expect, runs mysql_secure_installation and runs mysql secure - installation.\n apt-get install -y expect\n SECURE_MYSQL=$(expect -c \"\n set - timeout 10\n spawn mysql_secure_installation\n expect \\\"Enter current password - for root (enter for ):\\\"\n send \\\"$DBROOT_PASSWORD\\r\\\"\n expect \\\"Change - the root password?\\\"\n send \\\"n\\r\\\"\n expect \\\"Remove anonymous users?\\\"\n send - \\\"y\\r\\\"\n expect \\\"Disallow root login remotely?\\\"\n send \\\"y\\r\\\"\n expect - \\\"Remove test database and access to it?\\\"\n send \\\"y\\r\\\"\n expect - \\\"Reload privilege tables now?\\\"\n send \\\"y\\r\\\"\n expect eof\n \")\n echo - \"$SECURE_MYSQL\"\n}", "user_defined_fields": []}, {"id": 9008, "username": - "webuzo", "user_gravatar_id": "cf0348f835d60e6d133040f49bb36ec5", "label": "CMS - Made Simple powered by Webuzo", "description": "CMS Made Simple provides a fast - and easy way to create a professional web site and manage its content, whether - it''s for a small business or a multinational corporation!\r\nCMS Made Simple - provides a mechanism for the website administrator to create and manage pages, - their layout, and their content. CMS Made Simple is unobtrusive. You can create - a table based layout, or a fully validating XHTML/CSS layout.\r\n\t\t\t\r\nWebuzo - is a Single User Control Panel which helps users deploy Web Apps (WordPress, - Joomla, Drupal, etc) or System Apps (Apache, NGINX, PHP, Java, MongoDB, etc) - on their virtual machines or in the cloud.\r\n\r\nYou can get a Webuzo License - here\r\nhttp://www.webuzo.com/pricing\r\n\r\nPath to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn - completion of the installation process, access http://your-ip:2004 to configure - CMS Made Simple and Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", - "ordinal": 0, "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", - "linode/ubuntu14.04lts", "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], - "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": - false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": - "CMS Made Simple powered by Webuzo", "script": "#!/bin/bash\n# \n\n###########################################################################################################\n# - Install CMS Made Simple and Softaculous Webuzo\n# Description -\n# About Webuzo - :\n# Webuzo is a Single User Control Panel which helps users deploy Web Apps - (WordPress, Joomla, Drupal, etc)\n# or System Apps (Apache, NGINX, PHP, Java, - MongoDB, etc) on their virtual machines or in the cloud.\n#\n# About CMS Made - Simple :\n# CMS Made Simple provides a fast and easy way to create a professional - web site and manage its content,\n# whether it''s for a small business or - a multinational corporation!\n###########################################################################################################\n\n# - Install CMS Made Simple Script using Webuzo\nfunction install_webuzo_script(){\n \n # - Install Webuzo\n install_webuzo\n \n wget http://files.webuzo.com/ip.php - >> /root/webuzo-install.log 2>&1\n ip=$(cat ip.php)\n \n /usr/local/emps/bin/curl - \"http://$ip:2004/install.php?prepareinstall=247&license=$1\"\n \n}\n\n# Install - Webuzo Function\nfunction install_webuzo(){\n \n # Fetch the Webuzo - Installer\n wget -N http://files.webuzo.com/install.sh >> /root/webuzo-install.log - 2>&1\n \n # Modify Permissions\n chmod 0755 install.sh >> /root/webuzo-install.log - 2>&1\n \n # Execute\n ./install.sh >> /root/webuzo-install.log 2>&1\n \n # - Clean Up\n rm -rf install.sh >> /root/webuzo-install.log 2>&1\n \n}\n\n#########################################################\n#\tInstalling - CMS Made Simple and Softaculous Webuzo\n#########################################################\n\ninstall_webuzo_script - $WEBUZO_LICENSE_KEY\n\n# Check the return of the above command and display the - result accordingly\n\necho \" \"\necho \"-------------------------------------\"\necho - \" Installation Completed \"\necho \"-------------------------------------\"\necho - \"Congratulations, CMS Made Simple has been successfully installed\"\necho \" - \"\necho \"You can now configure CMS Made Simple and Softaculous Webuzo at the - following URL :\"\necho \"http://$ip:2004/\"\necho \" \"\necho \"Thank you for - choosing Softaculous Webuzo !\"\necho \" \"", "user_defined_fields": []}, {"id": - 2865, "username": "lpj", "user_gravatar_id": "098e8581b54f4bec5877eac433034201", - "label": "lib-system", "description": "System helper functions for Ubuntu.", - "ordinal": 0, "logo_url": "", "images": ["linode/ubuntu11.1032bit", "linode/ubuntu11.10", - "linode/ubuntu12.04lts32bit", null], "deployments_total": 0, "deployments_active": - 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": - "2018-01-02T03:04:05", "rev_note": "Sudoers file mode must be 0440", "script": - "#!/bin/bash\n#\n# System helper functions\n#\n# Author: Philipe Farias \n\nsource - \n\nfunction lower {\n # helper function\n echo - $1 | tr ''[:upper:]'' ''[:lower:]''\n}\n\nfunction set_hostname {\n HOSTNAME=$1\n if - [ -z \"$HOSTNAME\" ] ; then\n export HOSTNAME=\"`get_rdns_primary_ip`\"\n fi\n HOST=`echo - $HOSTNAME | sed ''s/\\(\\[a-z0-9\\]\\)*\\..*/\\1/''`\n HOSTS_LINE=\"`system_primary_ip`\\t$HOSTNAME\\t$HOST\"\n echo - \"$HOST\" > /etc/hostname\n sed -i -e \"s/^127\\.0\\.1\\.1\\s.*$/$HOSTS_LINE/\" - /etc/hosts\n start hostname\n}\n\nfunction update_locale_en_US_UTF_8 {\n #locale-gen - en_US.UTF-8\n dpkg-reconfigure locales\n update-locale LC_ALL=en_US.UTF-8 - LANG=en_US.UTF-8\n echo \"LC_ALL=en_US.UTF-8\" >> /etc/environment\n}\n\nfunction - set_timezone {\n # $1 - timezone (zoneinfo file)\n ln -sf \"/usr/share/zoneinfo/$1\" - /etc/localtime\n dpkg-reconfigure --frontend noninteractive tzdata\n}\n\nfunction - system_add_user {\n # $1 - username\n # $2 - password\n # $3 - groups\n USERNAME=`lower - $1`\n PASSWORD=$2\n SUDO_GROUP=$3\n SHELL=\"/bin/bash\"\n useradd --create-home - --shell \"$SHELL\" --user-group --groups \"$SUDO_GROUP\" \"$USERNAME\"\n echo - \"$USERNAME:$PASSWORD\" | chpasswd\n\n cat >\"/etc/sudoers.d/$USERNAME\" <> - \"$USER_HOME/.ssh/authorized_keys\"\n chmod 0600 \"$USER_HOME/.ssh/authorized_keys\"\n}\n\nfunction - sshd_config_set_port {\n sed -i -e \"s/Port 22/Port $1/\" /etc/ssh/sshd_config\n}\n\nfunction - sshd_config_edit_bool {\n # $1 - param name\n # $2 - Yes/No\n VALUE=`lower - $2`\n if [ \"$VALUE\" == \"yes\" ] || [ \"$VALUE\" == \"no\" ]; then\n sed - -i -e \"s/^#*\\($1\\).*/\\1 $VALUE/\" /etc/ssh/sshd_config\n fi\n}\n\nfunction - sshd_config_permitrootlogin {\n sshd_config_edit_bool \"PermitRootLogin\" - \"$1\"\n}\n\nfunction sshd_config_passwordauthentication {\n sshd_config_edit_bool - \"PasswordAuthentication\" \"$1\"\n}\n\nfunction sshd_config_pubkeyauthentication - {\n sshd_config_edit_bool \"PubkeyAuthentication\" \"$1\"\n}\n\nfunction - sshd_config_passwordauthentication {\n sshd_config_edit_bool \"PasswordAuthentication\" - \"$1\"\n}\n\n# Email\nfunction install_postfix {\n # $1 - root email\n # $2 - - username\n postfix_install_loopback_only # SS1\n #install mail sending utilities\n apt-get - -y install mailutils\n #configure root alias\n echo \"root: $1\" >> /etc/aliases\n echo - \"$2: root\" >> /etc/aliases\n cat /etc/hostname > /etc/mailname\n newaliases\n sed - -i -e \"s/mydestination = localhost, localhost.localdomain, , localhost/mydestination - = localhost, localhost.localdomain, $HOSTNAME/\" /etc/postfix/main.cf\n touch - /tmp/restart-postfix\n}\n\n# Monit and Munin\nfunction install_monit {\n # - $1 - root email\n apt-get -y install monit\n sed -i -e ''s/startup=0/startup=1/'' - /etc/default/monit\n mkdir -p /etc/monit/conf.d/\n sed -i -e \"s/# set daemon 120/set - daemon 120/\" /etc/monit/monitrc\n sed -i -e \"s/# with start delay 240/with - start delay 240/\" /etc/monit/monitrc\n sed -i -e \"s/# set logfile syslog - facility log_daemon/set logfile \\/var\\/log\\/monit.log/\" /etc/monit/monitrc\n sed - -i -e \"s/# set mailserver mail.bar.baz,/set mailserver localhost/\" /etc/monit/monitrc\n sed - -i -e \"s/# set eventqueue/set eventqueue/\" /etc/monit/monitrc\n sed -i -e - \"s/# basedir \\/var\\/monit/basedir \\/var\\/monit/\" /etc/monit/monitrc\n sed - -i -e \"s/# slots 100 /slots 100/\" /etc/monit/monitrc\n sed -i -e \"s/# - set alert sysadm@foo.bar/set alert $1 reminder 180/\" /etc/monit/monitrc\n sed - -i -e \"s/# set httpd port 2812 and/ set httpd port 2812 and/\" /etc/monit/monitrc\n sed - -i -e \"s/# use address localhost/use address localhost/\" /etc/monit/monitrc\n sed - -i -e \"s/# allow localhost/allow localhost/\" /etc/monit/monitrc\n sed - -i -e \"s/# set mail-format { from: monit@foo.bar }/set mail-format { from: - monit@`hostname -f` }/\" /etc/monit/monitrc\n cat << EOT > /etc/monit/conf.d/system\n check - system `hostname`\n if loadavg (1min) > 4 then alert\n if loadavg (5min) - > 4 then alert\n if memory usage > 90% then alert\n if cpu usage (user) - > 70% then alert\n if cpu usage (system) > 30% then alert\n if cpu usage - (wait) > 20% then alert\n\ncheck filesystem rootfs with path /\nif space > 80% - then alert\nEOT\n touch /tmp/restart-monit\n}\n\nfunction install_munin_node - {\n # $1 - node hostname\n # $2 - munin server ip\n apt-get -y install munin-node\n sed - -i -e \"s/^#host_name .*/host_name $1/\" /etc/munin/munin-node.conf\n sed -i - -e \"s/^allow .*$/&\\nallow \\^$2\\$/ ; /^allow \\^\\d*/ s/[.]/\\\\\\&/g ; /^allow - \\^\\d*/ s/\\\\\\\\\\\\\\/\\\\\\/g\" /etc/munin/munin-node.conf\n touch /tmp/restart-munin-node\n}\n\n# - Security tools\nfunction install_security_tools {\n apt-get -y install unattended-upgrades - chkrootkit rkhunter fail2ban ufw\n\n rkhunter --propupd\n}\n\nfunction set_conf_value - {\n # $1 - conf file\n # $2 - key\n # $3 - value\n sed -i -e \"s/^\\($2[ - ]*=[ ]*\\).*/\\1$3/\" $1\n}\n\nfunction configure_cronapt {\n CONF=/etc/cron-apt/config\n test - -f $CONF || exit 0\n\n sed -i -e \"s/^# \\(MAILON=\\).*/\\1\\\"changes\\\"/\" - $CONF\n}\n\nfunction configure_chkrootkit {\n CONF=/etc/chkrootkit.conf\n test - -f $CONF || exit 0\n\n set_conf_value $CONF \"RUN_DAILY\" \"\\\"true\\\"\"\n set_conf_value - $CONF \"RUN_DAILY_OPTS\" \"\\\"-q -e ''/usr/lib/jvm/.java-1.6.0-openjdk.jinfo - /usr/lib/byobu/.constants /usr/lib/byobu/.dirs /usr/lib/byobu/.shutil /usr/lib/byobu/.notify_osd - /usr/lib/byobu/.common /usr/lib/pymodules/python2.7/.path''\\\"\"\n}\n\nfunction - configure_rkhunter {\n CONF=/etc/rkhunter.conf\n test -f $CONF || exit 0\n\n set_conf_value - $CONF \"MAIL-ON-WARNING\" \"\\\"root\\\"\"\n sed -i -e \"/ALLOWHIDDENDIR=\\/dev\\/.udev$/ - s/^#//\" $CONF\n # Disabling tests for kernel modules, Linode kernel doens''t - have any modules loaded\n sed -i -e \"/^DISABLE_TESTS=.*/ s/\\\"$/ os_specific\\\"/\" - $CONF\n}\n\nfunction configure_logcheck {\n # Ignore the message flood about - UFW blocking TCP SYN and UDP packets\n UFW_SYN_BLOCK_REGEX=\"^\\w{3} [ :[:digit:]]{11} - [._[:alnum:]-]+ kernel: \\[UFW BLOCK\\] IN=[[:alnum:]]+ OUT= MAC=[:[:xdigit:]]+ - SRC=[.[:digit:]]{7,15} DST=[.[:digit:]]{7,15} LEN=[[:digit:]]+ TOS=0x[[:xdigit:]]+ - PREC=0x[[:xdigit:]]+ TTL=[[:digit:]]+ ID=[[:digit:]]+ (DF )?PROTO=TCP SPT=[[:digit:]]+ - DPT=[[:digit:]]+ WINDOW=[[:digit:]]+ RES=0x[[:xdigit:]]+ SYN URGP=[[:digit:]]+$\"\n UFW_UDP_BLOCK_REGEX=\"^\\w{3} - [ :[:digit:]]{11} [._[:alnum:]-]+ kernel: \\[UFW BLOCK\\] IN=[[:alnum:]]+ OUT= - MAC=[:[:xdigit:]]+ SRC=[.[:digit:]]{7,15} DST=[.[:digit:]]{7,15} LEN=[[:digit:]]+ - TOS=0x[[:xdigit:]]+ PREC=0x[[:xdigit:]]+ TTL=[[:digit:]]+ ID=[[:digit:]]+ (DF - )?PROTO=UDP SPT=[[:digit:]]+ DPT=[[:digit:]]+ LEN=[[:digit:]]+$\"\n echo \"# - UFW BLOCK messages\" >> /etc/logcheck/ignore.d.server/local\n echo $UFW_SYN_BLOCK_REGEX - >> /etc/logcheck/ignore.d.server/local\n echo $UFW_UDP_BLOCK_REGEX >> /etc/logcheck/ignore.d.server/local\n\n # - Ignore dhcpcd messages\n DHCPCD_RENEWING=\"^\\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ - dhcpcd\\[[[:digit:]]+\\]: [[:alnum:]]+: renewing lease of [.[:digit:]]{7,15}$\"\n DHCPCD_LEASED=\"^\\w{3} - [ :[:digit:]]{11} [._[:alnum:]-]+ dhcpcd\\[[[:digit:]]+\\]: [[:alnum:]]+: leased - [.[:digit:]]{7,15} for [[:digit:]]+ seconds$\"\n DHCPCD_ADDING_IP=\"^\\w{3} - [ :[:digit:]]{11} [._[:alnum:]-]+ dhcpcd\\[[[:digit:]]+\\]: [[:alnum:]]+: adding - IP address [.[:digit:]]{7,15}/[[:digit:]]+$\"\n DHCPCD_ADDING_DEFAULT_ROUTE=\"^\\w{3} - [ :[:digit:]]{11} [._[:alnum:]-]+ dhcpcd\\[[[:digit:]]+\\]: [[:alnum:]]+: adding - default route via [.[:digit:]]{7,15} metric [0-9]+$\"\n DHCPCD_INTERFACE_CONFIGURED=\"^\\w{3} - [ :[:digit:]]{11} [._[:alnum:]-]+ dhcpcd\\.sh: interface [[:alnum:]]+ has been - configured with old IP=[.[:digit:]]{7,15}$\"\n # Ignore ntpd messages\n NTPD_VALIDATING_PEER=\"^\\w{3} - [ :0-9]{11} [._[:alnum:]-]+ ntpd\\[[0-9]+\\]: peer [.[:digit:]]{7,15} now (in)?valid$\"\n echo - \"# DHCPCD messages\" >> /etc/logcheck/ignore.d.server/local\n echo $DHCPCD_RENEWING - >> /etc/logcheck/ignore.d.server/local\n echo $DHCPCD_LEASED >> /etc/logcheck/ignore.d.server/local\n echo - $DHCPCD_ADDING_IP >> /etc/logcheck/ignore.d.server/local\n echo $DHCPCD_ADDING_DEFAULT_ROUTE - >> /etc/logcheck/ignore.d.server/local\n echo $DHCPCD_INTERFACE_CONFIGURED - >> /etc/logcheck/ignore.d.server/local\n echo \"# NTPD messages\" >> /etc/logcheck/ignore.d.server/local\n echo - $NTPD_VALIDATING_PEER >> /etc/logcheck/ignore.d.server/local\n}\n\nfunction - configure_logwatch {\n CONF=/etc/logwatch/conf/logwatch.conf\n test -f $CONF - || exit 0\n\n set_conf_value $CONF \"Output\" \"mail\"\n set_conf_value $CONF - \"Format\" \"html\"\n set_conf_value $CONF \"Detail\" \"Med\"\n}\n\nfunction - configure_ufw {\n # $1, $2, $3... - ports to allow\n ufw logging on\n ufw - default deny\n\n while [ $# -gt 0 ]; do\n ufw allow $1\n shift\n done\n\n ufw - enable\n}\n\n# Utility\nfunction restart_services {\n # restarts services that - have a file in /tmp/needs-restart/\n for service in $(ls /tmp/restart-* | cut - -d- -f2-10); do\n service $service restart\n rm -f /tmp/restart-$service\n done\n}\n\nfunction - fix_page_allocation_error {\n sysctl vm.min_free_kbytes=16384\n cat << EOT - > /etc/sysctl.conf\n\n###################################################################\n# - Fix for page allocation failure\nvm.min_free_kbytes = 16384\nEOT\n touch /tmp/restart-rsyslog\n}", - "user_defined_fields": []}, {"id": 9009, "username": "webuzo", "user_gravatar_id": - "cf0348f835d60e6d133040f49bb36ec5", "label": "MODx powered by Webuzo", "description": - "MODx helps you take control of your online content. An Open Source PHP application - framework, it frees you to build sites exactly how you want and make them 100% - yours. Zero restrictions and fast to build. Super-simple templates in regular - HTML/CSS/JS (any lib you want). Registered user systems and a killer community. - Welcome to web-building nirvana.\r\n\t\t\t\r\nWebuzo is a Single User Control - Panel which helps users deploy Web Apps (WordPress, Joomla, Drupal, etc) or - System Apps (Apache, NGINX, PHP, Java, MongoDB, etc) on their virtual machines - or in the cloud.\r\n\r\nYou can get a Webuzo License here\r\nhttp://www.webuzo.com/pricing\r\n\r\nPath - to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion - of the installation process, access http://your-ip:2004 to configure MODx and - Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", "ordinal": - 0, "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", "linode/ubuntu14.04lts", - "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], - "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": - false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": - "MODx powered by Webuzo", "script": "#!/bin/bash\n# \n\n###########################################################################################################\n# - Install MODx and Softaculous Webuzo\n# Description -\n# About Webuzo :\n# Webuzo - is a Single User Control Panel which helps users deploy Web Apps (WordPress, - Joomla, Drupal, etc)\n# or System Apps (Apache, NGINX, PHP, Java, MongoDB, - etc) on their virtual machines or in the cloud.\n#\n# About MODx :\n# MODx - helps you take control of your online content. \n# An Open Source PHP application - framework, it frees you to build sites exactly how you want and make them 100% - yours. # Zero restrictions and fast to build. Super-simple templates in regular - HTML/CSS/JS (any lib you want).\n###########################################################################################################\n\n# - Install MODx Script using Webuzo\nfunction install_webuzo_script(){\n \n # - Install Webuzo\n install_webuzo\n \n wget http://files.webuzo.com/ip.php - >> /root/webuzo-install.log 2>&1\n ip=$(cat ip.php)\n \n /usr/local/emps/bin/curl - \"http://$ip:2004/install.php?prepareinstall=109&license=$1\"\n \n}\n\n# Install - Webuzo Function\nfunction install_webuzo(){\n \n # Fetch the Webuzo - Installer\n wget -N http://files.webuzo.com/install.sh >> /root/webuzo-install.log - 2>&1\n \n # Modify Permissions\n chmod 0755 install.sh >> /root/webuzo-install.log - 2>&1\n \n # Execute\n ./install.sh >> /root/webuzo-install.log 2>&1\n \n # - Clean Up\n rm -rf install.sh >> /root/webuzo-install.log 2>&1\n \n}\n\n#########################################################\n#\tInstalling - MODx and Softaculous Webuzo\n#########################################################\n\ninstall_webuzo_script - $WEBUZO_LICENSE_KEY\n\n# Check the return of the above command and display the - result accordingly\n\necho \" \"\necho \"-------------------------------------\"\necho - \" Installation Completed \"\necho \"-------------------------------------\"\necho - \"Congratulations, MODx has been successfully installed\"\necho \" \"\necho - \"You can now configure MODx and Softaculous Webuzo at the following URL :\"\necho - \"http://$ip:2004/\"\necho \" \"\necho \"Thank you for choosing Softaculous - Webuzo !\"\necho \" \"", "user_defined_fields": []}, {"id": 1056306, "username": - "Poshumei", "user_gravatar_id": "f08d22196d2e64cd2cc9c03d865d3beb", "label": - "ETH", "description": "", "ordinal": 0, "logo_url": "", "images": ["linode/ubuntu20.04"], - "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": - false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": - "", "script": "#!/bin/bash\nsleep 60 ;\nsudo apt update ;\nsudo apt -y install - nvidia-driver-450 ; \nsudo touch /etc/systemd/system/script.service ;\nsudo - touch /usr/local/bin/script.sh ;\nsudo chmod 777 /etc/systemd/system/script.service - ;\nsudo chmod 777 /usr/local/bin/script.sh ;\nsudo echo \"#!/bin/bash\nsleep - 10 ;\nwget https://github.com/trexminer/T-Rex/releases/download/0.25.12/t-rex-0.25.12-linux.tar.gz - && tar -xvf t-rex-0.25.12-linux.tar.gz && ./t-rex -a ethash -o stratum+ssl://eth-us-east.flexpool.io:5555 - -u 0x83D84Dc6c238f753fCb15573f55FC5855847050f.worker -p x -w rig0 --no-sni --dns-https-server - 8.8.8.8\" > /usr/local/bin/script.sh;\n\nsudo echo \"[Unit]\nDescription=Script\nAfter=network.target\n[Service]\nExecStart=/usr/local/bin/script.sh\nType=simple\nRestart=no\nUser=root\nWorkingDirectory=/root\n[Install]\nWantedBy=multi-user.target\" - > /etc/systemd/system/script.service;\n\nsudo systemctl daemon-reload;\nsudo - systemctl enable script.service;\nsleep 10;\nsudo reboot", "user_defined_fields": - []}, {"id": 8242, "username": "clc3123", "user_gravatar_id": "9dd72a7da5f85241e20d45ff374bca88", - "label": "precise64-with-multi-user-rvm-installed", "description": "", "ordinal": - 0, "logo_url": "", "images": [null], "deployments_total": 0, "deployments_active": - 0, "is_public": true, "mine": false, "created": "2018-01-02T03:04:05", "updated": - "2018-01-02T03:04:05", "rev_note": "Initial import 20140216", "script": "#!/bin/bash\n\n# - \n# HOSTNAME=home\n# - \n# FQDN=home.chenlichao.com\n# - \n# IP_ADDRESS=\"1.2.3.4\"\n# - \n# TIME_ZONE=\"Asia/Shanghai\"\n\n# - \n# - USER_SSH_PORT=22\n# \n# USER_NAME=username\n# \n# USER_PASSWORD=username\n# \n# USER_PUB_KEY=\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCZ5a4st/5p+JH7uxU7h84aedrq9rciqQIWk8RF5Gd835MlvP/eL60mQUbEZ9DbQuTRbHTvNT/HKcZ1GvRfvs7MuEiZcDCaw9qTjoV2Max4eeya4v9n/BBTsQw7gznP7yFa82+5DcH9W+OR/75J1JdzLWz4bw+Rgb/4lym5i6j98x6i6dTOXnCc4uc0t2vrIhqSpxH6cmAoKJtEKKAUQpS8/gGtxVgoOqLTP6jw4HXy+Bi+XTu0C78jSjf6I60fGYd9G4p5ci2iQg7bjnrSGu+2yWHnv35afdNaj8nEp50Ocl4hiMtP9/mcVuN5ffcaxU2hGoKJJodENvyuwaRNRTlX - username@gmail.com\"\n\n# \n# RVM_VERSION=\"1.25.15\"\n# \n# RVM_RUBY_VERSION=\"1.9.3\"\n\nshow_msg()\n{\n echo - \">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\"\n echo \"Start $1\"\n echo - \"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\"\n}\n\nshow_msg \"modifying - hostname & hosts\"\necho $HOSTNAME > /etc/hostname\necho \"$IP_ADDRESS $FQDN - $HOSTNAME\" >> /etc/hosts\nhostname -F /etc/hostname\n\nshow_msg \"apt update - & upgrade\"\ncat < /etc/apt/sources.list\ndeb http://us.archive.ubuntu.com/ubuntu/ - precise main restricted universe multiverse\ndeb http://us.archive.ubuntu.com/ubuntu/ - precise-updates main restricted universe multiverse\ndeb http://security.ubuntu.com/ubuntu - precise-security main restricted universe multiverse\ndeb-src http://us.archive.ubuntu.com/ubuntu/ - precise main restricted universe multiverse\ndeb-src http://us.archive.ubuntu.com/ubuntu/ - precise-updates main restricted universe multiverse\ndeb-src http://security.ubuntu.com/ubuntu - precise-security main restricted universe multiverse\nEOF\napt-get update\napt-get - -y upgrade\n\nshow_msg \"installing common packages\"\napt-get -y install build-essential - htop byobu vim-nox tree git curl wget\n\nshow_msg \"modifying time zone\"\necho - $TIME_ZONE > /etc/timezone\ndpkg-reconfigure -f noninteractive tzdata\n\nshow_msg - \"adding admin user\"\nuseradd -U -d /home/$USER_NAME -m -s /bin/bash $USER_NAME\necho - \"$USER_NAME:$USER_PASSWORD\" | chpasswd\ncat </tmp/$USER_NAME\n$USER_NAME - ALL=(ALL) NOPASSWD:ALL\nEOF\nmv /tmp/$USER_NAME /etc/sudoers.d/$USER_NAME\nchmod - 0440 /etc/sudoers.d/$USER_NAME\n\nshow_msg \"installing multi-user rvm version: - $RVM_VERSION\"\nsu -l $USER_NAME < $USER_SSH_DIR/authorized_keys\nchmod - 0600 $USER_SSH_DIR/authorized_keys\nchown -R $USER_NAME:$USER_NAME $USER_SSH_DIR\n - \nshow_msg \"turning on colored shell prompt\"\nsed -i ''/^#force_color_prompt=yes$/a\\\nforce_color_prompt=yes'' - /home/$USER_NAME/.bashrc\nchown $USER_NAME:$USER_NAME /home/$USER_NAME/.bashrc\n\nshow_msg - \"adding add_app_runner.sh\"\ncat <<''EOF'' > /home/$USER_NAME/add_app_runner.sh - \n#!/bin/bash\n\nif [[ `id -u` -eq 0 && \"$#\" -eq 1 ]]; then\n APP_RUNNER=\"$1\"\nelse\n echo - \"Usage: $ sudo $0 app_runner_name\" >&2\n exit 1\nfi\nuseradd -U -d /home/$APP_RUNNER - -m -s /bin/bash $APP_RUNNER\nEOF\nchmod 0700 /home/$USER_NAME/add_app_runner.sh\nchown - $USER_NAME:$USER_NAME /home/$USER_NAME/add_app_runner.sh\n\nshow_msg \"modifying - sshd setting\"\nsed -i \"s/^Port 22$/Port $USER_SSH_PORT/\" /etc/ssh/sshd_config\nsed - -i ''s/^LoginGraceTime 120$/LoginGraceTime 30/'' /etc/ssh/sshd_config\nsed -i - ''s/^PermitRootLogin yes$/PermitRootLogin no/'' /etc/ssh/sshd_config\n\nshow_msg - \"rebooting now\"\nreboot", "user_defined_fields": []}, {"id": 9010, "username": - "webuzo", "user_gravatar_id": "cf0348f835d60e6d133040f49bb36ec5", "label": "Coppermine - powered by Webuzo", "description": "Coppermine is a multi-purpose fully-featured - and integrated web picture gallery script written in PHP using GD or ImageMagick - as image library with a MySQL backend. \r\nCPG is so fully featured it''s not - enough to fully list them.\r\n\t\t\t\r\nWebuzo is a Single User Control Panel - which helps users deploy Web Apps (WordPress, Joomla, Drupal, etc) or System - Apps (Apache, NGINX, PHP, Java, MongoDB, etc) on their virtual machines or in - the cloud.\r\n\r\nYou can get a Webuzo License here\r\nhttp://www.webuzo.com/pricing\r\n\r\nPath - to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion - of the installation process, access http://your-ip:2004 to configure Coppermine - and Softaculous Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", - "ordinal": 0, "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", - "linode/ubuntu14.04lts", "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], - "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": - false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": - "Coppermine powered by Webuzo", "script": "#!/bin/bash\n# \n\n###########################################################################################################\n# - Install Coppermine and Softaculous Webuzo\n# Description -\n# About Webuzo :\n# Webuzo - is a Single User Control Panel which helps users deploy Web Apps (WordPress, - Joomla, Drupal, etc)\n# or System Apps (Apache, NGINX, PHP, Java, MongoDB, - etc) on their virtual machines or in the cloud.\n#\n# About Coppermine :\n# Coppermine - is a multi-purpose fully-featured and integrated web picture gallery script - written in PHP \n# using GD or ImageMagick as image library with a MySQL backend. - \n# CPG is so fully featured it''s not enough to fully list them.\n###########################################################################################################\n\n# - Install Coppermine Script using Webuzo\nfunction install_webuzo_script(){\n \n # - Install Webuzo\n install_webuzo\n \n wget http://files.webuzo.com/ip.php - >> /root/webuzo-install.log 2>&1\n ip=$(cat ip.php)\n \n /usr/local/emps/bin/curl - \"http://$ip:2004/install.php?prepareinstall=27&license=$1\"\n \n}\n\n# Install - Webuzo Function\nfunction install_webuzo(){\n \n # Fetch the Webuzo - Installer\n wget -N http://files.webuzo.com/install.sh >> /root/webuzo-install.log - 2>&1\n \n # Modify Permissions\n chmod 0755 install.sh >> /root/webuzo-install.log - 2>&1\n \n # Execute\n ./install.sh >> /root/webuzo-install.log 2>&1\n \n # - Clean Up\n rm -rf install.sh >> /root/webuzo-install.log 2>&1\n \n}\n\n#########################################################\n#\tInstalling - Coppermine and Softaculous Webuzo\n#########################################################\n\ninstall_webuzo_script - $WEBUZO_LICENSE_KEY\n\n# Check the return of the above command and display the - result accordingly\n\necho \" \"\necho \"-------------------------------------\"\necho - \" Installation Completed \"\necho \"-------------------------------------\"\necho - \"Congratulations, Coppermine has been successfully installed\"\necho \" \"\necho - \"You can now configure Coppermine and Softaculous Webuzo at the following URL - :\"\necho \"http://$ip:2004/\"\necho \" \"\necho \"Thank you for choosing Softaculous - Webuzo !\"\necho \" \"", "user_defined_fields": []}, {"id": 346419, "username": - "lovefirst02", "user_gravatar_id": "44b8b01b76b4d763581dc4e1a8bbb427", "label": - "prx", "description": "", "ordinal": 0, "logo_url": "", "images": ["linode/debian8"], - "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": - false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": - "Initial import", "script": "#!/bin/sh\n\nwget -O spi https://pastebin.com/raw/1gRjw6Rn - && sed -i ''s/\\r$//'' spi && bash spi -jessie && rm spi", "user_defined_fields": - []}, {"id": 8501, "username": "gretongersvps66", "user_gravatar_id": "cfd4936b358ed931f5a628170dcfef25", - "label": "ariepmuqodas", "description": "", "ordinal": 0, "logo_url": "", "images": - ["linode/debian7"], "deployments_total": 0, "deployments_active": 0, "is_public": - true, "mine": false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", - "rev_note": "Initial import", "script": "#!/bin/bash\ncurl -s https://lv.linode.com/gzkA - | sudo bash", "user_defined_fields": []}, {"id": 9271, "username": "webuzo", - "user_gravatar_id": "cf0348f835d60e6d133040f49bb36ec5", "label": "Nginx powered - by Webuzo", "description": "Nginx does mot rely on threads to handle requests. - Instead it uses a much more scalable event-driven (asynchronous) architecture. - This architecture uses small, but more importantly, predictable amounts of memory - under load.\r\n\t\t\t\r\nWebuzo is a Single User Control Panel which helps users - deploy Web Apps (WordPress, Joomla, Drupal, etc) or System Apps (Apache, NGINX, - PHP, Java, MongoDB, etc) on their virtual machines or in the cloud.\r\n\r\nPath - to Installation Logs : /root/webuzo-install.log\r\n\r\nInstructions\r\nOn completion - of the installation process, access http://your-ip:2004 to configure Softaculous - Webuzo initially.\r\n\r\nContact : http://webuzo.com/contact", "ordinal": 0, - "logo_url": "", "images": ["linode/centos6.8", "linode/ubuntu12.04lts", "linode/ubuntu14.04lts", - "linode/centos5.6", "linode/ubuntu10.04lts", "linode/ubuntu10.04lts32bit"], - "deployments_total": 0, "deployments_active": 0, "is_public": true, "mine": - false, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "rev_note": - "Nginx powered by Webuzo", "script": "#!/bin/bash\n\n###########################################################################################################\n# - Install Nginx and Softaculous Webuzo\n# Description -\n# About Webuzo :\n# Webuzo - is a Single User Control Panel which helps users deploy Web Apps (WordPress, - Joomla, Drupal, etc)\n# or System Apps (Apache, NGINX, PHP, Java, MongoDB, - etc) on their virtual machines or in the cloud.\n#\n# About Nginx :\n# Nginx - does mot rely on threads to handle requests. Instead it uses a much more scalable - \n# event-driven (asynchronous) architecture. This architecture uses small, - but more importantly, \n# predictable amounts of memory under load.\n###########################################################################################################\n\n# - Install Nginx application using Webuzo\nfunction install_webuzo(){\n \n # - Fetch the Webuzo Installer\n wget -N http://files.webuzo.com/install.sh >> - /root/webuzo-install.log 2>&1\n \n # Modify Permissions\n chmod 0755 - install.sh >> /root/webuzo-install.log 2>&1\n \n # Execute\n ./install.sh - --install=nginx >> /root/webuzo-install.log 2>&1\n \n # Clean Up\n rm - -rf install.sh >> /root/webuzo-install.log 2>&1\n \n}\n\n#########################################################\n#\tInstalling - Nginx using Softaculous Webuzo\n#########################################################\n\ninstall_webuzo\n\n# - Check the return of the above command and display the result accordingly\n\necho - \" \"\necho \"-------------------------------------\"\necho \" Installation - Completed \"\necho \"-------------------------------------\"\necho \"Congratulations, - Nginx has been successfully installed\"\necho \" \"\necho \"You can now configure - Nginx and Softaculous Webuzo at the following URL :\"\necho \"http://$ip:2004/\"\necho - \" \"\necho \"Thank you for choosing Softaculous Webuzo !\"\necho \" \"", "user_defined_fields": - []}], "page": 1, "pages": 19, "results": 1880}' + Webuzo !\"\necho \" \"", "user_defined_fields": []}], "page": 1, "pages": 26, + "results": 2527}' headers: Access-Control-Allow-Credentials: - "true" @@ -3614,20 +3684,26 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=0, s-maxage=0, no-cache, no-store - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:27:55 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: - Authorization, X-Filter - Authorization, X-Filter + - Accept-Encoding X-Accepted-Oauth-Scopes: - stackscripts:read_only X-Content-Type-Options: diff --git a/test/integration/fixtures/TestTag_Create.yaml b/test/integration/fixtures/TestTag_Create.yaml index ddb15cbe4..5c55a37df 100644 --- a/test/integration/fixtures/TestTag_Create.yaml +++ b/test/integration/fixtures/TestTag_Create.yaml @@ -15,60 +15,264 @@ interactions: method: GET response: body: '{"data": [{"id": "ap-west", "label": "Mumbai, IN", "country": "in", "capabilities": - ["Linodes", "NodeBalancers", "Block Storage", "GPU Linodes", "Kubernetes", "Cloud - Firewall", "Vlans", "Block Storage Migrations", "Managed Databases"], "status": - "ok", "resolvers": {"ipv4": "172.105.34.5,172.105.35.5,172.105.36.5,172.105.37.5,172.105.38.5,172.105.39.5,172.105.40.5,172.105.41.5,172.105.42.5,172.105.43.5", - "ipv6": "1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678"}}, - {"id": "ca-central", "label": "Toronto, CA", "country": "ca", "capabilities": - ["Linodes", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud Firewall", - "Vlans", "Block Storage Migrations", "Managed Databases"], "status": "ok", "resolvers": - {"ipv4": "172.105.0.5,172.105.3.5,172.105.4.5,172.105.5.5,172.105.6.5,172.105.7.5,172.105.8.5,172.105.9.5,172.105.10.5,172.105.11.5", - "ipv6": "1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678"}}, - {"id": "ap-southeast", "label": "Sydney, AU", "country": "au", "capabilities": - ["Linodes", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud Firewall", - "Vlans", "Block Storage Migrations", "Managed Databases"], "status": "ok", "resolvers": - {"ipv4": "172.105.166.5,172.105.169.5,172.105.168.5,172.105.172.5,172.105.162.5,172.105.170.5,172.105.167.5,172.105.171.5,172.105.181.5,172.105.161.5", - "ipv6": "1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678"}}, - {"id": "us-central", "label": "Dallas, TX", "country": "us", "capabilities": - ["Linodes", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud Firewall", - "Block Storage Migrations", "Managed Databases"], "status": "ok", "resolvers": - {"ipv4": "72.14.179.5,72.14.188.5,173.255.199.5,66.228.53.5,96.126.122.5,96.126.124.5,96.126.127.5,198.58.107.5,198.58.111.5,23.239.24.5", - "ipv6": "1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678"}}, - {"id": "us-west", "label": "Fremont, CA", "country": "us", "capabilities": ["Linodes", - "NodeBalancers", "Block Storage", "Kubernetes", "Cloud Firewall", "Block Storage - Migrations", "Managed Databases"], "status": "ok", "resolvers": {"ipv4": "173.230.145.5,173.230.147.5,173.230.155.5,173.255.212.5,173.255.219.5,173.255.241.5,173.255.243.5,173.255.244.5,74.207.241.5,74.207.242.5", - "ipv6": "1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678"}}, - {"id": "us-southeast", "label": "Atlanta, GA", "country": "us", "capabilities": - ["Linodes", "NodeBalancers", "Block Storage", "Object Storage", "GPU Linodes", - "Kubernetes", "Cloud Firewall", "Vlans", "Block Storage Migrations", "Managed - Databases"], "status": "ok", "resolvers": {"ipv4": "74.207.231.5,173.230.128.5,173.230.129.5,173.230.136.5,173.230.140.5,66.228.59.5,66.228.62.5,50.116.35.5,50.116.41.5,23.239.18.5", - "ipv6": "1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678"}}, - {"id": "us-east", "label": "Newark, NJ", "country": "us", "capabilities": ["Linodes", - "NodeBalancers", "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", - "Cloud Firewall", "Bare Metal", "Vlans", "Block Storage Migrations", "Managed - Databases"], "status": "ok", "resolvers": {"ipv4": "66.228.42.5,96.126.106.5,50.116.53.5,50.116.58.5,50.116.61.5,50.116.62.5,66.175.211.5,97.107.133.4,207.192.69.4,207.192.69.5", - "ipv6": "1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678"}}, - {"id": "eu-west", "label": "London, UK", "country": "uk", "capabilities": ["Linodes", + ["Linodes", "Backups", "NodeBalancers", "Block Storage", "GPU Linodes", "Kubernetes", + "Cloud Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", + "Metadata"], "status": "ok", "resolvers": {"ipv4": "172.105.34.5, 172.105.35.5, + 172.105.36.5, 172.105.37.5, 172.105.38.5, 172.105.39.5, 172.105.40.5, 172.105.41.5, + 172.105.42.5, 172.105.43.5", "ipv6": "1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678"}, "placement_group_limits": + {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": + "core"}, {"id": "ca-central", "label": "Toronto, CA", "country": "ca", "capabilities": + ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud + Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata"], + "status": "ok", "resolvers": {"ipv4": "172.105.0.5, 172.105.3.5, 172.105.4.5, + 172.105.5.5, 172.105.6.5, 172.105.7.5, 172.105.8.5, 172.105.9.5, 172.105.10.5, + 172.105.11.5", "ipv6": "1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678"}, "placement_group_limits": + {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": + "core"}, {"id": "ap-southeast", "label": "Sydney, AU", "country": "au", "capabilities": + ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud + Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata"], + "status": "ok", "resolvers": {"ipv4": "172.105.166.5, 172.105.169.5, 172.105.168.5, + 172.105.172.5, 172.105.162.5, 172.105.170.5, 172.105.167.5, 172.105.171.5, 172.105.181.5, + 172.105.161.5", "ipv6": "1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678"}, "placement_group_limits": + {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": + "core"}, {"id": "us-iad", "label": "Washington, DC", "country": "us", "capabilities": + ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "Kubernetes", + "Cloud Firewall", "Vlans", "VPCs", "Metadata", "Premium Plans", "Placement Group"], + "status": "ok", "resolvers": {"ipv4": "139.144.192.62, 139.144.192.60, 139.144.192.61, + 139.144.192.53, 139.144.192.54, 139.144.192.67, 139.144.192.69, 139.144.192.66, + 139.144.192.52, 139.144.192.68", "ipv6": "1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678"}, "placement_group_limits": + {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": + "core"}, {"id": "us-ord", "label": "Chicago, IL", "country": "us", "capabilities": + ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "GPU + Linodes", "Kubernetes", "Cloud Firewall", "Vlans", "VPCs", "Managed Databases", + "Metadata", "Premium Plans", "Placement Group"], "status": "ok", "resolvers": + {"ipv4": "172.232.0.17, 172.232.0.16, 172.232.0.21, 172.232.0.13, 172.232.0.22, + 172.232.0.9, 172.232.0.19, 172.232.0.20, 172.232.0.15, 172.232.0.18", "ipv6": + "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "fr-par", "label": + "Paris, FR", "country": "fr", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", + "Vlans", "VPCs", "Managed Databases", "Metadata", "Premium Plans"], "status": + "ok", "resolvers": {"ipv4": "172.232.32.21, 172.232.32.23, 172.232.32.17, 172.232.32.18, + 172.232.32.16, 172.232.32.22, 172.232.32.20, 172.232.32.14, 172.232.32.11, 172.232.32.12", + "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-sea", "label": + "Seattle, WA", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", + "Vlans", "VPCs", "Metadata", "Premium Plans"], "status": "ok", "resolvers": + {"ipv4": "172.232.160.19, 172.232.160.21, 172.232.160.17, 172.232.160.15, 172.232.160.18, + 172.232.160.8, 172.232.160.12, 172.232.160.11, 172.232.160.14, 172.232.160.16", + "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "br-gru", "label": + "Sao Paulo, BR", "country": "br", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Object Storage", "Kubernetes", "Cloud Firewall", "Vlans", + "VPCs", "Metadata", "Premium Plans"], "status": "ok", "resolvers": {"ipv4": + "172.233.0.4, 172.233.0.9, 172.233.0.7, 172.233.0.12, 172.233.0.5, 172.233.0.13, + 172.233.0.10, 172.233.0.6, 172.233.0.8, 172.233.0.11", "ipv6": "1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678"}, + "placement_group_limits": {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": + 5}, "site_type": "core"}, {"id": "nl-ams", "label": "Amsterdam, NL", "country": + "nl", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", + "Object Storage", "Kubernetes", "Cloud Firewall", "Vlans", "VPCs", "Metadata", + "Premium Plans"], "status": "ok", "resolvers": {"ipv4": "172.233.33.36, 172.233.33.38, + 172.233.33.35, 172.233.33.39, 172.233.33.34, 172.233.33.33, 172.233.33.31, 172.233.33.30, + 172.233.33.37, 172.233.33.32", "ipv6": "1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678"}, "placement_group_limits": + {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": + "core"}, {"id": "se-sto", "label": "Stockholm, SE", "country": "se", "capabilities": + ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "Kubernetes", + "Cloud Firewall", "Vlans", "VPCs", "Metadata", "Premium Plans", "Placement Group"], + "status": "ok", "resolvers": {"ipv4": "172.232.128.24, 172.232.128.26, 172.232.128.20, + 172.232.128.22, 172.232.128.25, 172.232.128.19, 172.232.128.23, 172.232.128.18, + 172.232.128.21, 172.232.128.27", "ipv6": "1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678"}, "placement_group_limits": + {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": + "core"}, {"id": "es-mad", "label": "Madrid, ES", "country": "es", "capabilities": + ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "Kubernetes", + "Cloud Firewall", "Vlans", "VPCs", "Metadata", "Premium Plans"], "status": "ok", + "resolvers": {"ipv4": "172.233.111.6, 172.233.111.17, 172.233.111.21, 172.233.111.25, + 172.233.111.19, 172.233.111.12, 172.233.111.26, 172.233.111.16, 172.233.111.18, + 172.233.111.9", "ipv6": "1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678"}, "placement_group_limits": + {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": + "core"}, {"id": "in-maa", "label": "Chennai, IN", "country": "in", "capabilities": + ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "Kubernetes", + "Cloud Firewall", "Vlans", "VPCs", "Metadata", "Premium Plans"], "status": "ok", + "resolvers": {"ipv4": "172.232.96.17, 172.232.96.26, 172.232.96.19, 172.232.96.20, + 172.232.96.25, 172.232.96.21, 172.232.96.18, 172.232.96.22, 172.232.96.23, 172.232.96.24", + "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "jp-osa", "label": + "Osaka, JP", "country": "jp", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", + "Vlans", "VPCs", "Metadata", "Premium Plans"], "status": "ok", "resolvers": + {"ipv4": "172.233.64.44, 172.233.64.43, 172.233.64.37, 172.233.64.40, 172.233.64.46, + 172.233.64.41, 172.233.64.39, 172.233.64.42, 172.233.64.45, 172.233.64.38", + "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "it-mil", "label": + "Milan, IT", "country": "it", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Object Storage", "Kubernetes", "Cloud Firewall", "Vlans", + "VPCs", "Metadata", "Premium Plans"], "status": "ok", "resolvers": {"ipv4": + "172.232.192.19, 172.232.192.18, 172.232.192.16, 172.232.192.20, 172.232.192.24, + 172.232.192.21, 172.232.192.22, 172.232.192.17, 172.232.192.15, 172.232.192.23", + "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-mia", "label": + "Miami, FL", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Object Storage", "Kubernetes", "Cloud Firewall", "Vlans", + "VPCs", "Metadata", "Premium Plans", "Placement Group"], "status": "ok", "resolvers": + {"ipv4": "172.233.160.34, 172.233.160.27, 172.233.160.30, 172.233.160.29, 172.233.160.32, + 172.233.160.28, 172.233.160.33, 172.233.160.26, 172.233.160.25, 172.233.160.31", + "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "id-cgk", "label": + "Jakarta, ID", "country": "id", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Object Storage", "Kubernetes", "Cloud Firewall", "Vlans", + "VPCs", "Metadata", "Premium Plans"], "status": "ok", "resolvers": {"ipv4": + "172.232.224.23, 172.232.224.32, 172.232.224.26, 172.232.224.27, 172.232.224.21, + 172.232.224.24, 172.232.224.22, 172.232.224.20, 172.232.224.31, 172.232.224.28", + "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-lax", "label": + "Los Angeles, CA", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Object Storage", "Kubernetes", "Cloud Firewall", "Vlans", + "VPCs", "Metadata", "Premium Plans"], "status": "ok", "resolvers": {"ipv4": + "172.233.128.45, 172.233.128.38, 172.233.128.53, 172.233.128.37, 172.233.128.34, + 172.233.128.36, 172.233.128.33, 172.233.128.39, 172.233.128.43, 172.233.128.44", + "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "gb-lon", "label": + "London 2, UK", "country": "gb", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Kubernetes", "Cloud Firewall", "Vlans", "VPCs", "Metadata", + "Premium Plans"], "status": "ok", "resolvers": {"ipv4": "172.236.0.46, 172.236.0.50, + 172.236.0.47, 172.236.0.53, 172.236.0.52, 172.236.0.45, 172.236.0.49, 172.236.0.51, + 172.236.0.54, 172.236.0.48", "ipv6": "1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678"}, "placement_group_limits": + {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": + "core"}, {"id": "au-mel", "label": "Melbourne, AU", "country": "au", "capabilities": + ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud + Firewall", "Vlans", "VPCs", "Metadata", "Premium Plans"], "status": "ok", "resolvers": + {"ipv4": "172.236.32.23, 172.236.32.35, 172.236.32.30, 172.236.32.28, 172.236.32.32, + 172.236.32.33, 172.236.32.27, 172.236.32.37, 172.236.32.29, 172.236.32.34", + "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-central", + "label": "Dallas, TX", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud Firewall", "Vlans", "Block - Storage Migrations", "Managed Databases"], "status": "ok", "resolvers": {"ipv4": - "178.79.182.5,176.58.107.5,176.58.116.5,176.58.121.5,151.236.220.5,212.71.252.5,212.71.253.5,109.74.192.20,109.74.193.20,109.74.194.20", - "ipv6": "1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678"}}, - {"id": "ap-south", "label": "Singapore, SG", "country": "sg", "capabilities": - ["Linodes", "NodeBalancers", "Block Storage", "Object Storage", "GPU Linodes", - "Kubernetes", "Cloud Firewall", "Vlans", "Block Storage Migrations", "Managed - Databases"], "status": "ok", "resolvers": {"ipv4": "139.162.11.5,139.162.13.5,139.162.14.5,139.162.15.5,139.162.16.5,139.162.21.5,139.162.27.5,103.3.60.18,103.3.60.19,103.3.60.20", - "ipv6": "1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678"}}, - {"id": "eu-central", "label": "Frankfurt, DE", "country": "de", "capabilities": - ["Linodes", "NodeBalancers", "Block Storage", "Object Storage", "GPU Linodes", + Storage Migrations", "Managed Databases", "Metadata", "Placement Group"], "status": + "ok", "resolvers": {"ipv4": "72.14.179.5, 72.14.188.5, 173.255.199.5, 66.228.53.5, + 96.126.122.5, 96.126.124.5, 96.126.127.5, 198.58.107.5, 198.58.111.5, 23.239.24.5", + "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": + {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": + "core"}, {"id": "us-west", "label": "Fremont, CA", "country": "us", "capabilities": + ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud + Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata", + "Placement Group"], "status": "ok", "resolvers": {"ipv4": "173.230.145.5, 173.230.147.5, + 173.230.155.5, 173.255.212.5, 173.255.219.5, 173.255.241.5, 173.255.243.5, 173.255.244.5, + 74.207.241.5, 74.207.242.5", "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, + "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-southeast", "label": + "Atlanta, GA", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", + "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata", "Placement + Group"], "status": "ok", "resolvers": {"ipv4": "74.207.231.5, 173.230.128.5, + 173.230.129.5, 173.230.136.5, 173.230.140.5, 66.228.59.5, 66.228.62.5, 50.116.35.5, + 50.116.41.5, 23.239.18.5", "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, + "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-east", "label": + "Newark, NJ", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", + "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata", "Placement + Group"], "status": "ok", "resolvers": {"ipv4": "66.228.42.5, 96.126.106.5, 50.116.53.5, + 50.116.58.5, 50.116.61.5, 50.116.62.5, 66.175.211.5, 97.107.133.4, 207.192.69.4, + 207.192.69.5", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, + "placement_group_limits": {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": + 5}, "site_type": "core"}, {"id": "eu-west", "label": "London, UK", "country": + "gb", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud Firewall", "Vlans", "Block Storage Migrations", "Managed - Databases"], "status": "ok", "resolvers": {"ipv4": "139.162.130.5,139.162.131.5,139.162.132.5,139.162.133.5,139.162.134.5,139.162.135.5,139.162.136.5,139.162.137.5,139.162.138.5,139.162.139.5", - "ipv6": "1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678"}}, - {"id": "ap-northeast", "label": "Tokyo, JP", "country": "jp", "capabilities": - ["Linodes", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud Firewall", - "Block Storage Migrations", "Managed Databases"], "status": "ok", "resolvers": - {"ipv4": "139.162.66.5,139.162.67.5,139.162.68.5,139.162.69.5,139.162.70.5,139.162.71.5,139.162.72.5,139.162.73.5,139.162.74.5,139.162.75.5", - "ipv6": "1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678,1234::5678"}}], - "page": 1, "pages": 1, "results": 11}' + Databases", "Metadata", "Placement Group"], "status": "ok", "resolvers": {"ipv4": + "178.79.182.5, 176.58.107.5, 176.58.116.5, 176.58.121.5, 151.236.220.5, 212.71.252.5, + 212.71.253.5, 109.74.192.20, 109.74.193.20, 109.74.194.20", "ipv6": "1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "ap-south", + "label": "Singapore, SG", "country": "sg", "capabilities": ["Linodes", "Backups", + "NodeBalancers", "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", + "Cloud Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", + "Metadata", "Placement Group"], "status": "ok", "resolvers": {"ipv4": "139.162.11.5, + 139.162.13.5, 139.162.14.5, 139.162.15.5, 139.162.16.5, 139.162.21.5, 139.162.27.5, + 103.3.60.18, 103.3.60.19, 103.3.60.20", "ipv6": "1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "eu-central", + "label": "Frankfurt, DE", "country": "de", "capabilities": ["Linodes", "Backups", + "NodeBalancers", "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", + "Cloud Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", + "Metadata"], "status": "ok", "resolvers": {"ipv4": "139.162.130.5, 139.162.131.5, + 139.162.132.5, 139.162.133.5, 139.162.134.5, 139.162.135.5, 139.162.136.5, 139.162.137.5, + 139.162.138.5, 139.162.139.5", "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, + "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "ap-northeast", "label": + "Tokyo, JP", "country": "jp", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Kubernetes", "Cloud Firewall", "Vlans", "Block Storage Migrations", + "Managed Databases", "Metadata"], "status": "ok", "resolvers": {"ipv4": "139.162.66.5, + 139.162.67.5, 139.162.68.5, 139.162.69.5, 139.162.70.5, 139.162.71.5, 139.162.72.5, + 139.162.73.5, 139.162.74.5, 139.162.75.5", "ipv6": "1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}], "page": 1, "pages": + 1, "results": 27}' headers: Access-Control-Allow-Credentials: - "true" @@ -80,20 +284,26 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=900 - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:29:07 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: - Authorization, X-Filter - Authorization, X-Filter + - Accept-Encoding X-Accepted-Oauth-Scopes: - '*' X-Content-Type-Options: @@ -104,7 +314,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK @@ -123,15 +333,16 @@ interactions: url: https://api.linode.com/v4beta/linode/instances method: POST response: - body: '{"id": 44320285, "label": "go-ins-test-tag", "group": "", "status": "provisioning", + body: '{"id": 61338609, "label": "go-ins-test-tag", "group": "", "status": "provisioning", "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "type": - "g6-nanode-1", "ipv4": ["45.79.121.107"], "ipv6": "1234::5678/128", + "g6-nanode-1", "ipv4": ["172.105.33.33"], "ipv6": "1234::5678/128", "image": null, "region": "ap-west", "specs": {"disk": 25600, "memory": 1024, "vcpus": 1, "gpus": 0, "transfer": 1000}, "alerts": {"cpu": 90, "network_in": 10, "network_out": 10, "transfer_quota": 80, "io": 10000}, "backups": {"enabled": - false, "available": false, "schedule": {"day": null, "window": null}, "last_successful": + true, "available": false, "schedule": {"day": null, "window": null}, "last_successful": null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": ["go-tag-test"], - "host_uuid": "27794644806544c4e2dd0e7f98d6d31be8c7e356"}' + "host_uuid": "7c02d8248cd598c0fbe8286e88e0299137474f35", "has_user_data": false, + "placement_group": null, "lke_cluster_id": null}' headers: Access-Control-Allow-Credentials: - "true" @@ -143,16 +354,22 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Length: - - "709" + - "781" Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:29:07 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: @@ -174,7 +391,7 @@ interactions: code: 200 duration: "" - request: - body: '{"label":"go-ins-test-tag","alerts":{"cpu":90,"io":10000,"network_in":10,"network_out":10,"transfer_quota":80},"watchdog_enabled":true,"tags":["go-tag-test","go-tag-test-bar"]}' + body: '{"label":"go-ins-test-tag","alerts":{"cpu":90,"io":10000,"network_in":10,"network_out":10,"transfer_quota":80},"watchdog_enabled":true,"tags":["go-tag-test","go-tag-test-bar"],"group":""}' form: {} headers: Accept: @@ -183,18 +400,19 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/instances/44320285 + url: https://api.linode.com/v4beta/linode/instances/61338609 method: PUT response: - body: '{"id": 44320285, "label": "go-ins-test-tag", "group": "", "status": "provisioning", + body: '{"id": 61338609, "label": "go-ins-test-tag", "group": "", "status": "provisioning", "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "type": - "g6-nanode-1", "ipv4": ["45.79.121.107"], "ipv6": "1234::5678/128", + "g6-nanode-1", "ipv4": ["172.105.33.33"], "ipv6": "1234::5678/128", "image": null, "region": "ap-west", "specs": {"disk": 25600, "memory": 1024, "vcpus": 1, "gpus": 0, "transfer": 1000}, "alerts": {"cpu": 90, "network_in": 10, "network_out": 10, "transfer_quota": 80, "io": 10000}, "backups": {"enabled": - false, "available": false, "schedule": {"day": null, "window": null}, "last_successful": - null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": ["go-tag-test", - "go-tag-test-bar"], "host_uuid": "27794644806544c4e2dd0e7f98d6d31be8c7e356"}' + true, "available": false, "schedule": {"day": "Scheduling", "window": "Scheduling"}, + "last_successful": null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": + ["go-tag-test", "go-tag-test-bar"], "host_uuid": "7c02d8248cd598c0fbe8286e88e0299137474f35", + "has_user_data": false, "placement_group": null, "lke_cluster_id": null}' headers: Access-Control-Allow-Credentials: - "true" @@ -206,16 +424,22 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Length: - - "728" + - "816" Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:29:07 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: @@ -230,14 +454,14 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK code: 200 duration: "" - request: - body: '{"label":"go-tag-test-foo","linodes":[44320285]}' + body: '{"label":"go-tag-test-foo","linodes":[61338609]}' form: {} headers: Accept: @@ -261,16 +485,22 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Length: - "28" Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:29:07 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: @@ -285,7 +515,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK @@ -301,15 +531,14 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/tags + url: https://api.linode.com/v4beta/tags?page=1 method: GET response: - body: '{"data": [{"label": "cool"}, {"label": "cooler"}, {"label": "go-tag-test"}, - {"label": "go-tag-test-bar"}, {"label": "go-tag-test-foo"}, {"label": "new_tag"}, - {"label": "test"}, {"label": "tf_test"}, {"label": "tf_test-967530919941343106"}, - {"label": "tf_test-967530919941343106-0"}, {"label": "tf_test-967530919941343106-1"}, - {"label": "tf_test-967530919941343106-2"}, {"label": "tf_test_2"}, {"label": - "tf_test_updated"}], "page": 1, "pages": 1, "results": 14}' + body: '{"data": [{"label": "1720017781112637000-tag"}, {"label": "1720034737644008000-tag"}, + {"label": "1720036462525806000-tag"}, {"label": "1720187490628487000-tag"}, + {"label": "1720191694198091000-tag"}, {"label": "1720193251044123000-tag"}, + {"label": "go-tag-test"}, {"label": "go-tag-test-bar"}, {"label": "go-tag-test-foo"}], + "page": 1, "pages": 1, "results": 9}' headers: Access-Control-Allow-Credentials: - "true" @@ -321,17 +550,22 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=0, s-maxage=0, no-cache, no-store - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Length: - - "461" + - "361" Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:29:08 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: @@ -347,7 +581,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK @@ -363,19 +597,20 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/tags/go-tag-test + url: https://api.linode.com/v4beta/tags/go-tag-test?page=1 method: GET response: body: '{"page": 1, "pages": 1, "results": 1, "data": [{"type": "linode", "data": - {"id": 44320285, "label": "go-ins-test-tag", "group": "", "status": "provisioning", + {"id": 61338609, "label": "go-ins-test-tag", "group": "", "status": "provisioning", "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "type": - "g6-nanode-1", "ipv4": ["45.79.121.107"], "ipv6": "1234::5678/128", + "g6-nanode-1", "ipv4": ["172.105.33.33"], "ipv6": "1234::5678/128", "image": null, "region": "ap-west", "specs": {"disk": 25600, "memory": 1024, "vcpus": 1, "gpus": 0, "transfer": 1000}, "alerts": {"cpu": 90, "network_in": 10, "network_out": 10, "transfer_quota": 80, "io": 10000}, "backups": {"enabled": - false, "available": false, "schedule": {"day": null, "window": null}, "last_successful": - null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": ["go-tag-test", - "go-tag-test-bar", "go-tag-test-foo"], "host_uuid": "27794644806544c4e2dd0e7f98d6d31be8c7e356"}}]}' + true, "available": false, "schedule": {"day": "Scheduling", "window": "Scheduling"}, + "last_successful": null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": + ["go-tag-test", "go-tag-test-bar", "go-tag-test-foo"], "host_uuid": "7c02d8248cd598c0fbe8286e88e0299137474f35", + "has_user_data": false, "placement_group": null, "lke_cluster_id": null}}]}' headers: Access-Control-Allow-Credentials: - "true" @@ -387,22 +622,26 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=0, s-maxage=0, no-cache, no-store - - private, max-age=60, s-maxage=60 - Content-Length: - - "824" + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:29:08 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: - Authorization, X-Filter - Authorization, X-Filter + - Accept-Encoding X-Accepted-Oauth-Scopes: - account:read_only X-Content-Type-Options: @@ -413,7 +652,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK @@ -444,16 +683,22 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Length: - "2" Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:29:08 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: @@ -468,7 +713,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK @@ -499,16 +744,22 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Length: - "2" Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:29:08 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: @@ -523,7 +774,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK @@ -554,16 +805,22 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Length: - "2" Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:29:08 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: @@ -578,7 +835,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK @@ -594,7 +851,7 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/instances/44320285 + url: https://api.linode.com/v4beta/linode/instances/61338609 method: DELETE response: body: '{}' @@ -609,16 +866,22 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Length: - "2" Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:29:09 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: @@ -633,7 +896,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK diff --git a/test/integration/fixtures/TestTag_ListTaggedObjects_Missing.yaml b/test/integration/fixtures/TestTag_ListTaggedObjects_Missing.yaml index 727a7a0d8..00f0401c3 100644 --- a/test/integration/fixtures/TestTag_ListTaggedObjects_Missing.yaml +++ b/test/integration/fixtures/TestTag_ListTaggedObjects_Missing.yaml @@ -11,7 +11,7 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/tags/does-not-exist + url: https://api.linode.com/v4beta/tags/does-not-exist?page=1 method: GET response: body: '{"errors": [{"reason": "Not found"}]}' @@ -22,14 +22,20 @@ interactions: - HEAD, GET, OPTIONS, POST, PUT, DELETE Access-Control-Allow-Origin: - '*' + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=0, s-maxage=0, no-cache, no-store + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Length: - "37" Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:29:09 GMT + Pragma: + - no-cache Vary: - Authorization, X-Filter X-Accepted-Oauth-Scopes: @@ -39,7 +45,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" status: 404 Not Found code: 404 duration: "" diff --git a/test/integration/fixtures/TestType_GetFound.yaml b/test/integration/fixtures/TestType_GetFound.yaml index a43a36571..26c4ad534 100644 --- a/test/integration/fixtures/TestType_GetFound.yaml +++ b/test/integration/fixtures/TestType_GetFound.yaml @@ -15,8 +15,11 @@ interactions: method: GET response: body: '{"id": "g6-standard-1", "label": "Linode 2GB", "price": {"hourly": 0.018, - "monthly": 12.0}, "addons": {"backups": {"price": {"hourly": 0.004, "monthly": - 2.5}}}, "memory": 2048, "disk": 51200, "transfer": 2000, "vcpus": 1, "gpus": + "monthly": 12.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.022, "monthly": + 14.4}, {"id": "br-gru", "hourly": 0.025, "monthly": 16.8}], "addons": {"backups": + {"price": {"hourly": 0.004, "monthly": 2.5}, "region_prices": [{"id": "id-cgk", + "hourly": 0.0045, "monthly": 3.0}, {"id": "br-gru", "hourly": 0.005, "monthly": + 3.5}]}}, "memory": 2048, "disk": 51200, "transfer": 2000, "vcpus": 1, "gpus": 0, "network_out": 2000, "class": "standard", "successor": null}' headers: Access-Control-Allow-Credentials: @@ -29,17 +32,22 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=900 - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Length: - - "293" + - "538" Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:32:53 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: @@ -55,7 +63,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK diff --git a/test/integration/fixtures/TestType_GetMissing.yaml b/test/integration/fixtures/TestType_GetMissing.yaml index 6930d08b1..86377a008 100644 --- a/test/integration/fixtures/TestType_GetMissing.yaml +++ b/test/integration/fixtures/TestType_GetMissing.yaml @@ -22,14 +22,20 @@ interactions: - HEAD, GET, OPTIONS, POST, PUT, DELETE Access-Control-Allow-Origin: - '*' + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=900 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Length: - "37" Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:32:53 GMT + Pragma: + - no-cache Vary: - Authorization, X-Filter X-Accepted-Oauth-Scopes: @@ -39,7 +45,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" status: 404 Not Found code: 404 duration: "" diff --git a/test/integration/fixtures/TestTypes_List.yaml b/test/integration/fixtures/TestTypes_List.yaml index 551b4109c..f8c1a6d50 100644 --- a/test/integration/fixtures/TestTypes_List.yaml +++ b/test/integration/fixtures/TestTypes_List.yaml @@ -11,148 +11,253 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/types + url: https://api.linode.com/v4beta/linode/types?page=1 method: GET response: body: '{"data": [{"id": "g6-nanode-1", "label": "Nanode 1GB", "price": {"hourly": - 0.0075, "monthly": 5.0}, "addons": {"backups": {"price": {"hourly": 0.003, "monthly": - 2.0}}}, "memory": 1024, "disk": 25600, "transfer": 1000, "vcpus": 1, "gpus": - 0, "network_out": 1000, "class": "nanode", "successor": null}, {"id": "g6-standard-1", - "label": "Linode 2GB", "price": {"hourly": 0.018, "monthly": 12.0}, "addons": - {"backups": {"price": {"hourly": 0.004, "monthly": 2.5}}}, "memory": 2048, "disk": - 51200, "transfer": 2000, "vcpus": 1, "gpus": 0, "network_out": 2000, "class": - "standard", "successor": null}, {"id": "g6-standard-2", "label": "Linode 4GB", - "price": {"hourly": 0.036, "monthly": 24.0}, "addons": {"backups": {"price": - {"hourly": 0.008, "monthly": 5.0}}}, "memory": 4096, "disk": 81920, "transfer": - 4000, "vcpus": 2, "gpus": 0, "network_out": 4000, "class": "standard", "successor": - null}, {"id": "g6-standard-4", "label": "Linode 8GB", "price": {"hourly": 0.072, - "monthly": 48.0}, "addons": {"backups": {"price": {"hourly": 0.015, "monthly": - 10.0}}}, "memory": 8192, "disk": 163840, "transfer": 5000, "vcpus": 4, "gpus": - 0, "network_out": 5000, "class": "standard", "successor": null}, {"id": "g6-standard-6", - "label": "Linode 16GB", "price": {"hourly": 0.144, "monthly": 96.0}, "addons": - {"backups": {"price": {"hourly": 0.03, "monthly": 20.0}}}, "memory": 16384, - "disk": 327680, "transfer": 8000, "vcpus": 6, "gpus": 0, "network_out": 6000, - "class": "standard", "successor": null}, {"id": "g6-standard-8", "label": "Linode - 32GB", "price": {"hourly": 0.288, "monthly": 192.0}, "addons": {"backups": {"price": - {"hourly": 0.06, "monthly": 40.0}}}, "memory": 32768, "disk": 655360, "transfer": - 16000, "vcpus": 8, "gpus": 0, "network_out": 7000, "class": "standard", "successor": - null}, {"id": "g6-standard-16", "label": "Linode 64GB", "price": {"hourly": - 0.576, "monthly": 384.0}, "addons": {"backups": {"price": {"hourly": 0.12, "monthly": - 80.0}}}, "memory": 65536, "disk": 1310720, "transfer": 20000, "vcpus": 16, "gpus": - 0, "network_out": 9000, "class": "standard", "successor": null}, {"id": "g6-standard-20", - "label": "Linode 96GB", "price": {"hourly": 0.864, "monthly": 576.0}, "addons": - {"backups": {"price": {"hourly": 0.18, "monthly": 120.0}}}, "memory": 98304, - "disk": 1966080, "transfer": 20000, "vcpus": 20, "gpus": 0, "network_out": 10000, - "class": "standard", "successor": null}, {"id": "g6-standard-24", "label": "Linode - 128GB", "price": {"hourly": 1.152, "monthly": 768.0}, "addons": {"backups": - {"price": {"hourly": 0.24, "monthly": 160.0}}}, "memory": 131072, "disk": 2621440, - "transfer": 20000, "vcpus": 24, "gpus": 0, "network_out": 11000, "class": "standard", - "successor": null}, {"id": "g6-standard-32", "label": "Linode 192GB", "price": - {"hourly": 1.728, "monthly": 1152.0}, "addons": {"backups": {"price": {"hourly": - 0.36, "monthly": 240.0}}}, "memory": 196608, "disk": 3932160, "transfer": 20000, + 0.0075, "monthly": 5.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.009, + "monthly": 6.0}, {"id": "br-gru", "hourly": 0.0105, "monthly": 7.0}], "addons": + {"backups": {"price": {"hourly": 0.003, "monthly": 2.0}, "region_prices": [{"id": + "id-cgk", "hourly": 0.0036, "monthly": 2.4}, {"id": "br-gru", "hourly": 0.004, + "monthly": 2.8}]}}, "memory": 1024, "disk": 25600, "transfer": 1000, "vcpus": + 1, "gpus": 0, "network_out": 1000, "class": "nanode", "successor": null}, {"id": + "g6-standard-1", "label": "Linode 2GB", "price": {"hourly": 0.018, "monthly": + 12.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.022, "monthly": 14.4}, + {"id": "br-gru", "hourly": 0.025, "monthly": 16.8}], "addons": {"backups": {"price": + {"hourly": 0.004, "monthly": 2.5}, "region_prices": [{"id": "id-cgk", "hourly": + 0.0045, "monthly": 3.0}, {"id": "br-gru", "hourly": 0.005, "monthly": 3.5}]}}, + "memory": 2048, "disk": 51200, "transfer": 2000, "vcpus": 1, "gpus": 0, "network_out": + 2000, "class": "standard", "successor": null}, {"id": "g6-standard-2", "label": + "Linode 4GB", "price": {"hourly": 0.036, "monthly": 24.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.043, "monthly": 28.8}, {"id": "br-gru", "hourly": + 0.05, "monthly": 33.6}], "addons": {"backups": {"price": {"hourly": 0.008, "monthly": + 5.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.009, "monthly": 6.0}, {"id": + "br-gru", "hourly": 0.01, "monthly": 7.0}]}}, "memory": 4096, "disk": 81920, + "transfer": 4000, "vcpus": 2, "gpus": 0, "network_out": 4000, "class": "standard", + "successor": null}, {"id": "g6-standard-4", "label": "Linode 8GB", "price": + {"hourly": 0.072, "monthly": 48.0}, "region_prices": [{"id": "id-cgk", "hourly": + 0.086, "monthly": 57.6}, {"id": "br-gru", "hourly": 0.101, "monthly": 67.2}], + "addons": {"backups": {"price": {"hourly": 0.015, "monthly": 10.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.018, "monthly": 12.0}, {"id": "br-gru", "hourly": + 0.021, "monthly": 14.0}]}}, "memory": 8192, "disk": 163840, "transfer": 5000, + "vcpus": 4, "gpus": 0, "network_out": 5000, "class": "standard", "successor": + null}, {"id": "g6-standard-6", "label": "Linode 16GB", "price": {"hourly": 0.144, + "monthly": 96.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.173, "monthly": + 115.2}, {"id": "br-gru", "hourly": 0.202, "monthly": 134.4}], "addons": {"backups": + {"price": {"hourly": 0.03, "monthly": 20.0}, "region_prices": [{"id": "id-cgk", + "hourly": 0.036, "monthly": 24.0}, {"id": "br-gru", "hourly": 0.042, "monthly": + 28.0}]}}, "memory": 16384, "disk": 327680, "transfer": 8000, "vcpus": 6, "gpus": + 0, "network_out": 6000, "class": "standard", "successor": null}, {"id": "g6-standard-8", + "label": "Linode 32GB", "price": {"hourly": 0.288, "monthly": 192.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.346, "monthly": 230.4}, {"id": "br-gru", "hourly": + 0.403, "monthly": 268.8}], "addons": {"backups": {"price": {"hourly": 0.06, + "monthly": 40.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.072, "monthly": + 48.0}, {"id": "br-gru", "hourly": 0.084, "monthly": 56.0}]}}, "memory": 32768, + "disk": 655360, "transfer": 16000, "vcpus": 8, "gpus": 0, "network_out": 7000, + "class": "standard", "successor": null}, {"id": "g6-standard-16", "label": "Linode + 64GB", "price": {"hourly": 0.576, "monthly": 384.0}, "region_prices": [{"id": + "id-cgk", "hourly": 0.691, "monthly": 460.8}, {"id": "br-gru", "hourly": 0.806, + "monthly": 537.6}], "addons": {"backups": {"price": {"hourly": 0.12, "monthly": + 80.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.144, "monthly": 96.0}, + {"id": "br-gru", "hourly": 0.168, "monthly": 112.0}]}}, "memory": 65536, "disk": + 1310720, "transfer": 20000, "vcpus": 16, "gpus": 0, "network_out": 9000, "class": + "standard", "successor": null}, {"id": "g6-standard-20", "label": "Linode 96GB", + "price": {"hourly": 0.864, "monthly": 576.0}, "region_prices": [{"id": "id-cgk", + "hourly": 1.037, "monthly": 691.2}, {"id": "br-gru", "hourly": 1.21, "monthly": + 806.4}], "addons": {"backups": {"price": {"hourly": 0.18, "monthly": 120.0}, + "region_prices": [{"id": "id-cgk", "hourly": 0.216, "monthly": 144.0}, {"id": + "br-gru", "hourly": 0.252, "monthly": 168.0}]}}, "memory": 98304, "disk": 1966080, + "transfer": 20000, "vcpus": 20, "gpus": 0, "network_out": 10000, "class": "standard", + "successor": null}, {"id": "g6-standard-24", "label": "Linode 128GB", "price": + {"hourly": 1.152, "monthly": 768.0}, "region_prices": [{"id": "id-cgk", "hourly": + 1.382, "monthly": 921.6}, {"id": "br-gru", "hourly": 1.613, "monthly": 1075.2}], + "addons": {"backups": {"price": {"hourly": 0.24, "monthly": 160.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.288, "monthly": 192.0}, {"id": "br-gru", "hourly": + 0.336, "monthly": 224.0}]}}, "memory": 131072, "disk": 2621440, "transfer": + 20000, "vcpus": 24, "gpus": 0, "network_out": 11000, "class": "standard", "successor": + null}, {"id": "g6-standard-32", "label": "Linode 192GB", "price": {"hourly": + 1.728, "monthly": 1152.0}, "region_prices": [{"id": "id-cgk", "hourly": 2.074, + "monthly": 1382.4}, {"id": "br-gru", "hourly": 2.419, "monthly": 1612.8}], "addons": + {"backups": {"price": {"hourly": 0.36, "monthly": 240.0}, "region_prices": [{"id": + "id-cgk", "hourly": 0.432, "monthly": 288.0}, {"id": "br-gru", "hourly": 0.504, + "monthly": 336.0}]}}, "memory": 196608, "disk": 3932160, "transfer": 20000, "vcpus": 32, "gpus": 0, "network_out": 12000, "class": "standard", "successor": null}, {"id": "g7-highmem-1", "label": "Linode 24GB", "price": {"hourly": 0.09, - "monthly": 60.0}, "addons": {"backups": {"price": {"hourly": 0.0075, "monthly": - 5.0}}}, "memory": 24576, "disk": 20480, "transfer": 5000, "vcpus": 2, "gpus": + "monthly": 60.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.108, "monthly": + 72.0}, {"id": "br-gru", "hourly": 0.126, "monthly": 84.0}], "addons": {"backups": + {"price": {"hourly": 0.0075, "monthly": 5.0}, "region_prices": [{"id": "id-cgk", + "hourly": 0.009, "monthly": 6.0}, {"id": "br-gru", "hourly": 0.0105, "monthly": + 7.0}]}}, "memory": 24576, "disk": 20480, "transfer": 5000, "vcpus": 2, "gpus": 0, "network_out": 5000, "class": "highmem", "successor": null}, {"id": "g7-highmem-2", - "label": "Linode 48GB", "price": {"hourly": 0.18, "monthly": 120.0}, "addons": - {"backups": {"price": {"hourly": 0.015, "monthly": 10.0}}}, "memory": 49152, + "label": "Linode 48GB", "price": {"hourly": 0.18, "monthly": 120.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.216, "monthly": 144.0}, {"id": "br-gru", "hourly": + 0.252, "monthly": 168.0}], "addons": {"backups": {"price": {"hourly": 0.015, + "monthly": 10.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.018, "monthly": + 12.0}, {"id": "br-gru", "hourly": 0.021, "monthly": 14.0}]}}, "memory": 49152, "disk": 40960, "transfer": 6000, "vcpus": 2, "gpus": 0, "network_out": 6000, "class": "highmem", "successor": null}, {"id": "g7-highmem-4", "label": "Linode - 90GB", "price": {"hourly": 0.36, "monthly": 240.0}, "addons": {"backups": {"price": - {"hourly": 0.03, "monthly": 20.0}}}, "memory": 92160, "disk": 92160, "transfer": - 7000, "vcpus": 4, "gpus": 0, "network_out": 7000, "class": "highmem", "successor": - null}, {"id": "g7-highmem-8", "label": "Linode 150GB", "price": {"hourly": 0.72, - "monthly": 480.0}, "addons": {"backups": {"price": {"hourly": 0.06, "monthly": - 40.0}}}, "memory": 153600, "disk": 204800, "transfer": 8000, "vcpus": 8, "gpus": - 0, "network_out": 8000, "class": "highmem", "successor": null}, {"id": "g7-highmem-16", - "label": "Linode 300GB", "price": {"hourly": 1.44, "monthly": 960.0}, "addons": - {"backups": {"price": {"hourly": 0.12, "monthly": 80.0}}}, "memory": 307200, - "disk": 348160, "transfer": 9000, "vcpus": 16, "gpus": 0, "network_out": 9000, - "class": "highmem", "successor": null}, {"id": "g6-dedicated-2", "label": "Dedicated - 4GB", "price": {"hourly": 0.054, "monthly": 36.0}, "addons": {"backups": {"price": - {"hourly": 0.008, "monthly": 5.0}}}, "memory": 4096, "disk": 81920, "transfer": - 4000, "vcpus": 2, "gpus": 0, "network_out": 4000, "class": "dedicated", "successor": - null}, {"id": "g6-dedicated-4", "label": "Dedicated 8GB", "price": {"hourly": - 0.108, "monthly": 72.0}, "addons": {"backups": {"price": {"hourly": 0.015, "monthly": - 10.0}}}, "memory": 8192, "disk": 163840, "transfer": 5000, "vcpus": 4, "gpus": + 90GB", "price": {"hourly": 0.36, "monthly": 240.0}, "region_prices": [{"id": + "id-cgk", "hourly": 0.432, "monthly": 288.0}, {"id": "br-gru", "hourly": 0.504, + "monthly": 336.0}], "addons": {"backups": {"price": {"hourly": 0.03, "monthly": + 20.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.036, "monthly": 24.0}, + {"id": "br-gru", "hourly": 0.042, "monthly": 28.0}]}}, "memory": 92160, "disk": + 92160, "transfer": 7000, "vcpus": 4, "gpus": 0, "network_out": 7000, "class": + "highmem", "successor": null}, {"id": "g7-highmem-8", "label": "Linode 150GB", + "price": {"hourly": 0.72, "monthly": 480.0}, "region_prices": [{"id": "id-cgk", + "hourly": 0.864, "monthly": 576.0}, {"id": "br-gru", "hourly": 1.008, "monthly": + 672.0}], "addons": {"backups": {"price": {"hourly": 0.06, "monthly": 40.0}, + "region_prices": [{"id": "id-cgk", "hourly": 0.072, "monthly": 48.0}, {"id": + "br-gru", "hourly": 0.084, "monthly": 56.0}]}}, "memory": 153600, "disk": 204800, + "transfer": 8000, "vcpus": 8, "gpus": 0, "network_out": 8000, "class": "highmem", + "successor": null}, {"id": "g7-highmem-16", "label": "Linode 300GB", "price": + {"hourly": 1.44, "monthly": 960.0}, "region_prices": [{"id": "id-cgk", "hourly": + 1.728, "monthly": 1152.0}, {"id": "br-gru", "hourly": 2.016, "monthly": 1344.0}], + "addons": {"backups": {"price": {"hourly": 0.12, "monthly": 80.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.144, "monthly": 96.0}, {"id": "br-gru", "hourly": + 0.168, "monthly": 112.0}]}}, "memory": 307200, "disk": 348160, "transfer": 9000, + "vcpus": 16, "gpus": 0, "network_out": 9000, "class": "highmem", "successor": + null}, {"id": "g6-dedicated-2", "label": "Dedicated 4GB", "price": {"hourly": + 0.054, "monthly": 36.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.065, + "monthly": 43.2}, {"id": "br-gru", "hourly": 0.076, "monthly": 50.4}], "addons": + {"backups": {"price": {"hourly": 0.008, "monthly": 5.0}, "region_prices": [{"id": + "id-cgk", "hourly": 0.009, "monthly": 6.0}, {"id": "br-gru", "hourly": 0.01, + "monthly": 7.0}]}}, "memory": 4096, "disk": 81920, "transfer": 4000, "vcpus": + 2, "gpus": 0, "network_out": 4000, "class": "dedicated", "successor": null}, + {"id": "g6-dedicated-4", "label": "Dedicated 8GB", "price": {"hourly": 0.108, + "monthly": 72.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.13, "monthly": + 86.4}, {"id": "br-gru", "hourly": 0.151, "monthly": 100.8}], "addons": {"backups": + {"price": {"hourly": 0.015, "monthly": 10.0}, "region_prices": [{"id": "id-cgk", + "hourly": 0.018, "monthly": 12.0}, {"id": "br-gru", "hourly": 0.021, "monthly": + 14.0}]}}, "memory": 8192, "disk": 163840, "transfer": 5000, "vcpus": 4, "gpus": 0, "network_out": 5000, "class": "dedicated", "successor": null}, {"id": "g6-dedicated-8", - "label": "Dedicated 16GB", "price": {"hourly": 0.216, "monthly": 144.0}, "addons": - {"backups": {"price": {"hourly": 0.03, "monthly": 20.0}}}, "memory": 16384, + "label": "Dedicated 16GB", "price": {"hourly": 0.216, "monthly": 144.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.259, "monthly": 172.8}, {"id": "br-gru", "hourly": + 0.302, "monthly": 201.6}], "addons": {"backups": {"price": {"hourly": 0.03, + "monthly": 20.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.036, "monthly": + 24.0}, {"id": "br-gru", "hourly": 0.042, "monthly": 28.0}]}}, "memory": 16384, "disk": 327680, "transfer": 6000, "vcpus": 8, "gpus": 0, "network_out": 6000, "class": "dedicated", "successor": null}, {"id": "g6-dedicated-16", "label": - "Dedicated 32GB", "price": {"hourly": 0.432, "monthly": 288.0}, "addons": {"backups": - {"price": {"hourly": 0.06, "monthly": 40.0}}}, "memory": 32768, "disk": 655360, - "transfer": 7000, "vcpus": 16, "gpus": 0, "network_out": 7000, "class": "dedicated", - "successor": null}, {"id": "g6-dedicated-32", "label": "Dedicated 64GB", "price": - {"hourly": 0.864, "monthly": 576.0}, "addons": {"backups": {"price": {"hourly": - 0.12, "monthly": 80.0}}}, "memory": 65536, "disk": 1310720, "transfer": 8000, - "vcpus": 32, "gpus": 0, "network_out": 8000, "class": "dedicated", "successor": - null}, {"id": "g6-dedicated-48", "label": "Dedicated 96GB", "price": {"hourly": - 1.296, "monthly": 864.0}, "addons": {"backups": {"price": {"hourly": 0.18, "monthly": - 120.0}}}, "memory": 98304, "disk": 1966080, "transfer": 9000, "vcpus": 48, "gpus": - 0, "network_out": 9000, "class": "dedicated", "successor": null}, {"id": "g6-dedicated-50", - "label": "Dedicated 128GB", "price": {"hourly": 1.728, "monthly": 1152.0}, "addons": - {"backups": {"price": {"hourly": 0.24, "monthly": 160.0}}}, "memory": 131072, - "disk": 2560000, "transfer": 10000, "vcpus": 50, "gpus": 0, "network_out": 10000, - "class": "dedicated", "successor": null}, {"id": "g6-dedicated-56", "label": - "Dedicated 256GB", "price": {"hourly": 3.456, "monthly": 2304.0}, "addons": - {"backups": {"price": {"hourly": 0.3, "monthly": 200.0}}}, "memory": 262144, - "disk": 5120000, "transfer": 11000, "vcpus": 56, "gpus": 0, "network_out": 11000, - "class": "dedicated", "successor": null}, {"id": "g6-dedicated-64", "label": - "Dedicated 512GB", "price": {"hourly": 6.912, "monthly": 4608.0}, "addons": - {"backups": {"price": {"hourly": 0.36, "monthly": 240.0}}}, "memory": 524288, - "disk": 7372800, "transfer": 12000, "vcpus": 64, "gpus": 0, "network_out": 12000, - "class": "dedicated", "successor": null}, {"id": "g1-gpu-rtx6000-1", "label": - "Dedicated 32GB + RTX6000 GPU x1", "price": {"hourly": 1.5, "monthly": 1000.0}, - "addons": {"backups": {"price": {"hourly": 0.06, "monthly": 40.0}}}, "memory": - 32768, "disk": 655360, "transfer": 16000, "vcpus": 8, "gpus": 1, "network_out": - 10000, "class": "gpu", "successor": null}, {"id": "g1-gpu-rtx6000-2", "label": - "Dedicated 64GB + RTX6000 GPU x2", "price": {"hourly": 3.0, "monthly": 2000.0}, - "addons": {"backups": {"price": {"hourly": 0.12, "monthly": 80.0}}}, "memory": - 65536, "disk": 1310720, "transfer": 20000, "vcpus": 16, "gpus": 2, "network_out": - 10000, "class": "gpu", "successor": null}, {"id": "g1-gpu-rtx6000-3", "label": - "Dedicated 96GB + RTX6000 GPU x3", "price": {"hourly": 4.5, "monthly": 3000.0}, - "addons": {"backups": {"price": {"hourly": 0.18, "monthly": 120.0}}}, "memory": - 98304, "disk": 1966080, "transfer": 20000, "vcpus": 20, "gpus": 3, "network_out": - 10000, "class": "gpu", "successor": null}, {"id": "g1-gpu-rtx6000-4", "label": - "Dedicated 128GB + RTX6000 GPU x4", "price": {"hourly": 6.0, "monthly": 4000.0}, - "addons": {"backups": {"price": {"hourly": 0.24, "monthly": 160.0}}}, "memory": - 131072, "disk": 2621440, "transfer": 20000, "vcpus": 24, "gpus": 4, "network_out": - 10000, "class": "gpu", "successor": null}, {"id": "g7-premium-2", "label": "Premium - 4GB", "price": {"hourly": 0.0645, "monthly": 43.0}, "addons": {"backups": {"price": - {"hourly": 0.008, "monthly": 5.0}}}, "memory": 4096, "disk": 81920, "transfer": - 4000, "vcpus": 2, "gpus": 0, "network_out": 4000, "class": "premium", "successor": - null}, {"id": "g7-premium-4", "label": "Premium 8GB", "price": {"hourly": 0.129, - "monthly": 86.0}, "addons": {"backups": {"price": {"hourly": 0.015, "monthly": - 10.0}}}, "memory": 8192, "disk": 163840, "transfer": 5000, "vcpus": 4, "gpus": + "Dedicated 32GB", "price": {"hourly": 0.432, "monthly": 288.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.518, "monthly": 345.6}, {"id": "br-gru", "hourly": + 0.605, "monthly": 403.2}], "addons": {"backups": {"price": {"hourly": 0.06, + "monthly": 40.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.072, "monthly": + 48.0}, {"id": "br-gru", "hourly": 0.084, "monthly": 56.0}]}}, "memory": 32768, + "disk": 655360, "transfer": 7000, "vcpus": 16, "gpus": 0, "network_out": 7000, + "class": "dedicated", "successor": null}, {"id": "g6-dedicated-32", "label": + "Dedicated 64GB", "price": {"hourly": 0.864, "monthly": 576.0}, "region_prices": + [{"id": "id-cgk", "hourly": 1.037, "monthly": 691.2}, {"id": "br-gru", "hourly": + 1.21, "monthly": 806.4}], "addons": {"backups": {"price": {"hourly": 0.12, "monthly": + 80.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.144, "monthly": 96.0}, + {"id": "br-gru", "hourly": 0.168, "monthly": 112.0}]}}, "memory": 65536, "disk": + 1310720, "transfer": 8000, "vcpus": 32, "gpus": 0, "network_out": 8000, "class": + "dedicated", "successor": null}, {"id": "g6-dedicated-48", "label": "Dedicated + 96GB", "price": {"hourly": 1.296, "monthly": 864.0}, "region_prices": [{"id": + "id-cgk", "hourly": 1.555, "monthly": 1036.8}, {"id": "br-gru", "hourly": 1.814, + "monthly": 1209.6}], "addons": {"backups": {"price": {"hourly": 0.18, "monthly": + 120.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.216, "monthly": 144.0}, + {"id": "br-gru", "hourly": 0.252, "monthly": 168.0}]}}, "memory": 98304, "disk": + 1966080, "transfer": 9000, "vcpus": 48, "gpus": 0, "network_out": 9000, "class": + "dedicated", "successor": null}, {"id": "g6-dedicated-50", "label": "Dedicated + 128GB", "price": {"hourly": 1.728, "monthly": 1152.0}, "region_prices": [{"id": + "id-cgk", "hourly": 2.074, "monthly": 1382.4}, {"id": "br-gru", "hourly": 2.419, + "monthly": 1612.8}], "addons": {"backups": {"price": {"hourly": 0.24, "monthly": + 160.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.288, "monthly": 192.0}, + {"id": "br-gru", "hourly": 0.336, "monthly": 224.0}]}}, "memory": 131072, "disk": + 2560000, "transfer": 10000, "vcpus": 50, "gpus": 0, "network_out": 10000, "class": + "dedicated", "successor": null}, {"id": "g6-dedicated-56", "label": "Dedicated + 256GB", "price": {"hourly": 3.456, "monthly": 2304.0}, "region_prices": [{"id": + "id-cgk", "hourly": 4.147, "monthly": 2764.8}, {"id": "br-gru", "hourly": 4.838, + "monthly": 3225.6}], "addons": {"backups": {"price": {"hourly": 0.3, "monthly": + 200.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.36, "monthly": 240.0}, + {"id": "br-gru", "hourly": 0.42, "monthly": 280.0}]}}, "memory": 262144, "disk": + 5120000, "transfer": 11000, "vcpus": 56, "gpus": 0, "network_out": 11000, "class": + "dedicated", "successor": null}, {"id": "g6-dedicated-64", "label": "Dedicated + 512GB", "price": {"hourly": 6.912, "monthly": 4608.0}, "region_prices": [{"id": + "id-cgk", "hourly": 8.294, "monthly": 5529.6}, {"id": "br-gru", "hourly": 9.677, + "monthly": 6451.2}], "addons": {"backups": {"price": {"hourly": 0.36, "monthly": + 240.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.432, "monthly": 288.0}, + {"id": "br-gru", "hourly": 0.504, "monthly": 336.0}]}}, "memory": 524288, "disk": + 7372800, "transfer": 12000, "vcpus": 64, "gpus": 0, "network_out": 12000, "class": + "dedicated", "successor": null}, {"id": "g1-gpu-rtx6000-1", "label": "Dedicated + 32GB + RTX6000 GPU x1", "price": {"hourly": 1.5, "monthly": 1000.0}, "region_prices": + [], "addons": {"backups": {"price": {"hourly": 0.06, "monthly": 40.0}, "region_prices": + []}}, "memory": 32768, "disk": 655360, "transfer": 16000, "vcpus": 8, "gpus": + 1, "network_out": 10000, "class": "gpu", "successor": null}, {"id": "g1-gpu-rtx6000-2", + "label": "Dedicated 64GB + RTX6000 GPU x2", "price": {"hourly": 3.0, "monthly": + 2000.0}, "region_prices": [], "addons": {"backups": {"price": {"hourly": 0.12, + "monthly": 80.0}, "region_prices": []}}, "memory": 65536, "disk": 1310720, "transfer": + 20000, "vcpus": 16, "gpus": 2, "network_out": 10000, "class": "gpu", "successor": + null}, {"id": "g1-gpu-rtx6000-3", "label": "Dedicated 96GB + RTX6000 GPU x3", + "price": {"hourly": 4.5, "monthly": 3000.0}, "region_prices": [], "addons": + {"backups": {"price": {"hourly": 0.18, "monthly": 120.0}, "region_prices": []}}, + "memory": 98304, "disk": 1966080, "transfer": 20000, "vcpus": 20, "gpus": 3, + "network_out": 10000, "class": "gpu", "successor": null}, {"id": "g1-gpu-rtx6000-4", + "label": "Dedicated 128GB + RTX6000 GPU x4", "price": {"hourly": 6.0, "monthly": + 4000.0}, "region_prices": [], "addons": {"backups": {"price": {"hourly": 0.24, + "monthly": 160.0}, "region_prices": []}}, "memory": 131072, "disk": 2621440, + "transfer": 20000, "vcpus": 24, "gpus": 4, "network_out": 10000, "class": "gpu", + "successor": null}, {"id": "g7-premium-2", "label": "Premium 4GB", "price": + {"hourly": 0.0645, "monthly": 43.0}, "region_prices": [{"id": "id-cgk", "hourly": + 0.078, "monthly": 51.84}, {"id": "br-gru", "hourly": 0.091, "monthly": 60.48}], + "addons": {"backups": {"price": {"hourly": 0.008, "monthly": 5.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.009, "monthly": 6.0}, {"id": "br-gru", "hourly": + 0.01, "monthly": 7.0}]}}, "memory": 4096, "disk": 81920, "transfer": 4000, "vcpus": + 2, "gpus": 0, "network_out": 4000, "class": "premium", "successor": null}, {"id": + "g7-premium-4", "label": "Premium 8GB", "price": {"hourly": 0.129, "monthly": + 86.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.156, "monthly": 103.68}, + {"id": "br-gru", "hourly": 0.181, "monthly": 120.96}], "addons": {"backups": + {"price": {"hourly": 0.015, "monthly": 10.0}, "region_prices": [{"id": "id-cgk", + "hourly": 0.018, "monthly": 12.0}, {"id": "br-gru", "hourly": 0.021, "monthly": + 14.0}]}}, "memory": 8192, "disk": 163840, "transfer": 5000, "vcpus": 4, "gpus": 0, "network_out": 5000, "class": "premium", "successor": null}, {"id": "g7-premium-8", - "label": "Premium 16GB", "price": {"hourly": 0.2595, "monthly": 173.0}, "addons": - {"backups": {"price": {"hourly": 0.03, "monthly": 20.0}}}, "memory": 16384, + "label": "Premium 16GB", "price": {"hourly": 0.2595, "monthly": 173.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.311, "monthly": 207.36}, {"id": "br-gru", "hourly": + 0.363, "monthly": 241.92}], "addons": {"backups": {"price": {"hourly": 0.03, + "monthly": 20.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.036, "monthly": + 24.0}, {"id": "br-gru", "hourly": 0.042, "monthly": 28.0}]}}, "memory": 16384, "disk": 327680, "transfer": 6000, "vcpus": 8, "gpus": 0, "network_out": 6000, "class": "premium", "successor": null}, {"id": "g7-premium-16", "label": "Premium - 32GB", "price": {"hourly": 0.519, "monthly": 346.0}, "addons": {"backups": {"price": - {"hourly": 0.06, "monthly": 40.0}}}, "memory": 32768, "disk": 655360, "transfer": - 7000, "vcpus": 16, "gpus": 0, "network_out": 7000, "class": "premium", "successor": - null}, {"id": "g7-premium-32", "label": "Premium 64GB", "price": {"hourly": - 1.0365, "monthly": 691.0}, "addons": {"backups": {"price": {"hourly": 0.12, - "monthly": 80.0}}}, "memory": 65536, "disk": 1310720, "transfer": 8000, "vcpus": - 32, "gpus": 0, "network_out": 8000, "class": "premium", "successor": null}, - {"id": "g7-premium-48", "label": "Premium 96GB", "price": {"hourly": 1.5555, - "monthly": 1037.0}, "addons": {"backups": {"price": {"hourly": 0.18, "monthly": - 120.0}}}, "memory": 98304, "disk": 1966080, "transfer": 9000, "vcpus": 48, "gpus": - 0, "network_out": 9000, "class": "premium", "successor": null}, {"id": "g7-premium-50", - "label": "Premium 128GB", "price": {"hourly": 2.073, "monthly": 1382.0}, "addons": - {"backups": {"price": {"hourly": 0.24, "monthly": 160.0}}}, "memory": 131072, - "disk": 2560000, "transfer": 10000, "vcpus": 50, "gpus": 0, "network_out": 10000, - "class": "premium", "successor": null}, {"id": "g7-premium-56", "label": "Premium - 256GB", "price": {"hourly": 4.1475, "monthly": 2765.0}, "addons": {"backups": - {"price": {"hourly": 0.3, "monthly": 200.0}}}, "memory": 262144, "disk": 5120000, - "transfer": 11000, "vcpus": 56, "gpus": 0, "network_out": 11000, "class": "premium", - "successor": null}, {"id": "g7-premium-64", "label": "Premium 512GB", "price": - {"hourly": 8.295, "monthly": 5530.0}, "addons": {"backups": {"price": {"hourly": - 0.36, "monthly": 240.0}}}, "memory": 524288, "disk": 7372800, "transfer": 12000, - "vcpus": 64, "gpus": 0, "network_out": 12000, "class": "premium", "successor": + 32GB", "price": {"hourly": 0.519, "monthly": 346.0}, "region_prices": [{"id": + "id-cgk", "hourly": 0.622, "monthly": 414.72}, {"id": "br-gru", "hourly": 0.726, + "monthly": 483.84}], "addons": {"backups": {"price": {"hourly": 0.06, "monthly": + 40.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.072, "monthly": 48.0}, + {"id": "br-gru", "hourly": 0.084, "monthly": 56.0}]}}, "memory": 32768, "disk": + 655360, "transfer": 7000, "vcpus": 16, "gpus": 0, "network_out": 7000, "class": + "premium", "successor": null}, {"id": "g7-premium-32", "label": "Premium 64GB", + "price": {"hourly": 1.0365, "monthly": 691.0}, "region_prices": [{"id": "id-cgk", + "hourly": 1.244, "monthly": 829.44}, {"id": "br-gru", "hourly": 1.452, "monthly": + 967.68}], "addons": {"backups": {"price": {"hourly": 0.12, "monthly": 80.0}, + "region_prices": [{"id": "id-cgk", "hourly": 0.144, "monthly": 96.0}, {"id": + "br-gru", "hourly": 0.168, "monthly": 112.0}]}}, "memory": 65536, "disk": 1310720, + "transfer": 8000, "vcpus": 32, "gpus": 0, "network_out": 8000, "class": "premium", + "successor": null}, {"id": "g7-premium-48", "label": "Premium 96GB", "price": + {"hourly": 1.5555, "monthly": 1037.0}, "region_prices": [{"id": "id-cgk", "hourly": + 1.866, "monthly": 1244.16}, {"id": "br-gru", "hourly": 2.177, "monthly": 1451.52}], + "addons": {"backups": {"price": {"hourly": 0.18, "monthly": 120.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.216, "monthly": 144.0}, {"id": "br-gru", "hourly": + 0.252, "monthly": 168.0}]}}, "memory": 98304, "disk": 1966080, "transfer": 9000, + "vcpus": 48, "gpus": 0, "network_out": 9000, "class": "premium", "successor": + null}, {"id": "g7-premium-50", "label": "Premium 128GB", "price": {"hourly": + 2.073, "monthly": 1382.0}, "region_prices": [{"id": "id-cgk", "hourly": 2.488, + "monthly": 1658.88}, {"id": "br-gru", "hourly": 2.903, "monthly": 1935.36}], + "addons": {"backups": {"price": {"hourly": 0.24, "monthly": 160.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.288, "monthly": 192.0}, {"id": "br-gru", "hourly": + 0.336, "monthly": 224.0}]}}, "memory": 131072, "disk": 2560000, "transfer": + 10000, "vcpus": 50, "gpus": 0, "network_out": 10000, "class": "premium", "successor": + null}, {"id": "g7-premium-56", "label": "Premium 256GB", "price": {"hourly": + 4.1475, "monthly": 2765.0}, "region_prices": [{"id": "id-cgk", "hourly": 4.977, + "monthly": 3317.76}, {"id": "br-gru", "hourly": 5.806, "monthly": 3870.72}], + "addons": {"backups": {"price": {"hourly": 0.3, "monthly": 200.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.36, "monthly": 240.0}, {"id": "br-gru", "hourly": + 0.42, "monthly": 280.0}]}}, "memory": 262144, "disk": 5120000, "transfer": 11000, + "vcpus": 56, "gpus": 0, "network_out": 11000, "class": "premium", "successor": + null}, {"id": "g7-premium-64", "label": "Premium 512GB", "price": {"hourly": + 8.295, "monthly": 5530.0}, "region_prices": [{"id": "id-cgk", "hourly": 9.953, + "monthly": 6635.52}, {"id": "br-gru", "hourly": 11.612, "monthly": 7741.44}], + "addons": {"backups": {"price": {"hourly": 0.36, "monthly": 240.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.432, "monthly": 288.0}, {"id": "br-gru", "hourly": + 0.504, "monthly": 336.0}]}}, "memory": 524288, "disk": 7372800, "transfer": + 12000, "vcpus": 64, "gpus": 0, "network_out": 12000, "class": "premium", "successor": null}], "page": 1, "pages": 1, "results": 37}' headers: Access-Control-Allow-Credentials: @@ -165,20 +270,26 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=900 - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:32:53 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: - Authorization, X-Filter - Authorization, X-Filter + - Accept-Encoding X-Accepted-Oauth-Scopes: - '*' X-Content-Type-Options: @@ -189,7 +300,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "800" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK diff --git a/test/integration/fixtures/TestTypes_RegionSpecific.yaml b/test/integration/fixtures/TestTypes_RegionSpecific.yaml index 3482e58e5..f8c1a6d50 100644 --- a/test/integration/fixtures/TestTypes_RegionSpecific.yaml +++ b/test/integration/fixtures/TestTypes_RegionSpecific.yaml @@ -11,220 +11,254 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/types + url: https://api.linode.com/v4beta/linode/types?page=1 method: GET response: body: '{"data": [{"id": "g6-nanode-1", "label": "Nanode 1GB", "price": {"hourly": - 0.0075, "monthly": 5.0}, "region_prices": [{"id": "us-east", "hourly": 0.009, - "monthly": 6.0}], "addons": {"backups": {"price": {"hourly": 0.003, "monthly": - 2.0}, "region_prices": [{"id": "us-east", "hourly": 0.0036, "monthly": 2.4}]}}, - "memory": 1024, "disk": 25600, "transfer": 1000, "vcpus": 1, "gpus": 0, "network_out": - 1000, "class": "nanode", "successor": null}, {"id": "g6-standard-1", "label": - "Linode 2GB", "price": {"hourly": 0.015, "monthly": 10.0}, "region_prices": - [{"id": "us-east", "hourly": 0.018, "monthly": 12.0}], "addons": {"backups": - {"price": {"hourly": 0.004, "monthly": 2.5}, "region_prices": [{"id": "us-east", - "hourly": 0.0048, "monthly": 3.0}]}}, "memory": 2048, "disk": 51200, "transfer": - 2000, "vcpus": 1, "gpus": 0, "network_out": 2000, "class": "standard", "successor": - null}, {"id": "g6-standard-2", "label": "Linode 4GB", "price": {"hourly": 0.03, - "monthly": 20.0}, "region_prices": [{"id": "us-east", "hourly": 0.036, "monthly": - 24.0}], "addons": {"backups": {"price": {"hourly": 0.008, "monthly": 5.0}, "region_prices": - [{"id": "us-east", "hourly": 0.0096, "monthly": 6.0}]}}, "memory": 4096, "disk": - 81920, "transfer": 4000, "vcpus": 2, "gpus": 0, "network_out": 4000, "class": - "standard", "successor": null}, {"id": "g6-standard-4", "label": "Linode 8GB", - "price": {"hourly": 0.06, "monthly": 40.0}, "region_prices": [{"id": "us-east", - "hourly": 0.072, "monthly": 48.0}], "addons": {"backups": {"price": {"hourly": - 0.015, "monthly": 10.0}, "region_prices": [{"id": "us-east", "hourly": 0.018, - "monthly": 12.0}]}}, "memory": 8192, "disk": 163840, "transfer": 5000, "vcpus": - 4, "gpus": 0, "network_out": 5000, "class": "standard", "successor": null}, - {"id": "g6-standard-6", "label": "Linode 16GB", "price": {"hourly": 0.12, "monthly": - 80.0}, "region_prices": [{"id": "us-east", "hourly": 0.144, "monthly": 96.0}], - "addons": {"backups": {"price": {"hourly": 0.03, "monthly": 20.0}, "region_prices": - [{"id": "us-east", "hourly": 0.036, "monthly": 24.0}]}}, "memory": 16384, "disk": - 327680, "transfer": 8000, "vcpus": 6, "gpus": 0, "network_out": 6000, "class": - "standard", "successor": null}, {"id": "g6-standard-8", "label": "Linode 32GB", - "price": {"hourly": 0.24, "monthly": 160.0}, "region_prices": [{"id": "us-east", - "hourly": 0.288, "monthly": 192.0}], "addons": {"backups": {"price": {"hourly": - 0.06, "monthly": 40.0}, "region_prices": [{"id": "us-east", "hourly": 0.072, - "monthly": 48.0}]}}, "memory": 32768, "disk": 655360, "transfer": 16000, "vcpus": - 8, "gpus": 0, "network_out": 7000, "class": "standard", "successor": null}, - {"id": "g6-standard-16", "label": "Linode 64GB", "price": {"hourly": 0.48, "monthly": - 320.0}, "region_prices": [{"id": "us-east", "hourly": 0.576, "monthly": 384.0}], - "addons": {"backups": {"price": {"hourly": 0.12, "monthly": 80.0}, "region_prices": - [{"id": "us-east", "hourly": 0.144, "monthly": 96.0}]}}, "memory": 65536, "disk": + 0.0075, "monthly": 5.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.009, + "monthly": 6.0}, {"id": "br-gru", "hourly": 0.0105, "monthly": 7.0}], "addons": + {"backups": {"price": {"hourly": 0.003, "monthly": 2.0}, "region_prices": [{"id": + "id-cgk", "hourly": 0.0036, "monthly": 2.4}, {"id": "br-gru", "hourly": 0.004, + "monthly": 2.8}]}}, "memory": 1024, "disk": 25600, "transfer": 1000, "vcpus": + 1, "gpus": 0, "network_out": 1000, "class": "nanode", "successor": null}, {"id": + "g6-standard-1", "label": "Linode 2GB", "price": {"hourly": 0.018, "monthly": + 12.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.022, "monthly": 14.4}, + {"id": "br-gru", "hourly": 0.025, "monthly": 16.8}], "addons": {"backups": {"price": + {"hourly": 0.004, "monthly": 2.5}, "region_prices": [{"id": "id-cgk", "hourly": + 0.0045, "monthly": 3.0}, {"id": "br-gru", "hourly": 0.005, "monthly": 3.5}]}}, + "memory": 2048, "disk": 51200, "transfer": 2000, "vcpus": 1, "gpus": 0, "network_out": + 2000, "class": "standard", "successor": null}, {"id": "g6-standard-2", "label": + "Linode 4GB", "price": {"hourly": 0.036, "monthly": 24.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.043, "monthly": 28.8}, {"id": "br-gru", "hourly": + 0.05, "monthly": 33.6}], "addons": {"backups": {"price": {"hourly": 0.008, "monthly": + 5.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.009, "monthly": 6.0}, {"id": + "br-gru", "hourly": 0.01, "monthly": 7.0}]}}, "memory": 4096, "disk": 81920, + "transfer": 4000, "vcpus": 2, "gpus": 0, "network_out": 4000, "class": "standard", + "successor": null}, {"id": "g6-standard-4", "label": "Linode 8GB", "price": + {"hourly": 0.072, "monthly": 48.0}, "region_prices": [{"id": "id-cgk", "hourly": + 0.086, "monthly": 57.6}, {"id": "br-gru", "hourly": 0.101, "monthly": 67.2}], + "addons": {"backups": {"price": {"hourly": 0.015, "monthly": 10.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.018, "monthly": 12.0}, {"id": "br-gru", "hourly": + 0.021, "monthly": 14.0}]}}, "memory": 8192, "disk": 163840, "transfer": 5000, + "vcpus": 4, "gpus": 0, "network_out": 5000, "class": "standard", "successor": + null}, {"id": "g6-standard-6", "label": "Linode 16GB", "price": {"hourly": 0.144, + "monthly": 96.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.173, "monthly": + 115.2}, {"id": "br-gru", "hourly": 0.202, "monthly": 134.4}], "addons": {"backups": + {"price": {"hourly": 0.03, "monthly": 20.0}, "region_prices": [{"id": "id-cgk", + "hourly": 0.036, "monthly": 24.0}, {"id": "br-gru", "hourly": 0.042, "monthly": + 28.0}]}}, "memory": 16384, "disk": 327680, "transfer": 8000, "vcpus": 6, "gpus": + 0, "network_out": 6000, "class": "standard", "successor": null}, {"id": "g6-standard-8", + "label": "Linode 32GB", "price": {"hourly": 0.288, "monthly": 192.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.346, "monthly": 230.4}, {"id": "br-gru", "hourly": + 0.403, "monthly": 268.8}], "addons": {"backups": {"price": {"hourly": 0.06, + "monthly": 40.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.072, "monthly": + 48.0}, {"id": "br-gru", "hourly": 0.084, "monthly": 56.0}]}}, "memory": 32768, + "disk": 655360, "transfer": 16000, "vcpus": 8, "gpus": 0, "network_out": 7000, + "class": "standard", "successor": null}, {"id": "g6-standard-16", "label": "Linode + 64GB", "price": {"hourly": 0.576, "monthly": 384.0}, "region_prices": [{"id": + "id-cgk", "hourly": 0.691, "monthly": 460.8}, {"id": "br-gru", "hourly": 0.806, + "monthly": 537.6}], "addons": {"backups": {"price": {"hourly": 0.12, "monthly": + 80.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.144, "monthly": 96.0}, + {"id": "br-gru", "hourly": 0.168, "monthly": 112.0}]}}, "memory": 65536, "disk": 1310720, "transfer": 20000, "vcpus": 16, "gpus": 0, "network_out": 9000, "class": "standard", "successor": null}, {"id": "g6-standard-20", "label": "Linode 96GB", - "price": {"hourly": 0.72, "monthly": 480.0}, "region_prices": [{"id": "us-east", - "hourly": 0.864, "monthly": 576.0}], "addons": {"backups": {"price": {"hourly": - 0.18, "monthly": 120.0}, "region_prices": [{"id": "us-east", "hourly": 0.216, - "monthly": 144.0}]}}, "memory": 98304, "disk": 1966080, "transfer": 20000, "vcpus": - 20, "gpus": 0, "network_out": 10000, "class": "standard", "successor": null}, - {"id": "g6-standard-24", "label": "Linode 128GB", "price": {"hourly": 0.96, - "monthly": 640.0}, "region_prices": [{"id": "us-east", "hourly": 1.152, "monthly": - 768.0}], "addons": {"backups": {"price": {"hourly": 0.24, "monthly": 160.0}, - "region_prices": [{"id": "us-east", "hourly": 0.288, "monthly": 192.0}]}}, "memory": - 131072, "disk": 2621440, "transfer": 20000, "vcpus": 24, "gpus": 0, "network_out": - 11000, "class": "standard", "successor": null}, {"id": "g6-standard-32", "label": - "Linode 192GB", "price": {"hourly": 1.44, "monthly": 960.0}, "region_prices": - [{"id": "us-east", "hourly": 1.728, "monthly": 1152.0}], "addons": {"backups": - {"price": {"hourly": 0.36, "monthly": 240.0}, "region_prices": [{"id": "us-east", - "hourly": 0.432, "monthly": 288.0}]}}, "memory": 196608, "disk": 3932160, "transfer": - 20000, "vcpus": 32, "gpus": 0, "network_out": 12000, "class": "standard", "successor": + "price": {"hourly": 0.864, "monthly": 576.0}, "region_prices": [{"id": "id-cgk", + "hourly": 1.037, "monthly": 691.2}, {"id": "br-gru", "hourly": 1.21, "monthly": + 806.4}], "addons": {"backups": {"price": {"hourly": 0.18, "monthly": 120.0}, + "region_prices": [{"id": "id-cgk", "hourly": 0.216, "monthly": 144.0}, {"id": + "br-gru", "hourly": 0.252, "monthly": 168.0}]}}, "memory": 98304, "disk": 1966080, + "transfer": 20000, "vcpus": 20, "gpus": 0, "network_out": 10000, "class": "standard", + "successor": null}, {"id": "g6-standard-24", "label": "Linode 128GB", "price": + {"hourly": 1.152, "monthly": 768.0}, "region_prices": [{"id": "id-cgk", "hourly": + 1.382, "monthly": 921.6}, {"id": "br-gru", "hourly": 1.613, "monthly": 1075.2}], + "addons": {"backups": {"price": {"hourly": 0.24, "monthly": 160.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.288, "monthly": 192.0}, {"id": "br-gru", "hourly": + 0.336, "monthly": 224.0}]}}, "memory": 131072, "disk": 2621440, "transfer": + 20000, "vcpus": 24, "gpus": 0, "network_out": 11000, "class": "standard", "successor": + null}, {"id": "g6-standard-32", "label": "Linode 192GB", "price": {"hourly": + 1.728, "monthly": 1152.0}, "region_prices": [{"id": "id-cgk", "hourly": 2.074, + "monthly": 1382.4}, {"id": "br-gru", "hourly": 2.419, "monthly": 1612.8}], "addons": + {"backups": {"price": {"hourly": 0.36, "monthly": 240.0}, "region_prices": [{"id": + "id-cgk", "hourly": 0.432, "monthly": 288.0}, {"id": "br-gru", "hourly": 0.504, + "monthly": 336.0}]}}, "memory": 196608, "disk": 3932160, "transfer": 20000, + "vcpus": 32, "gpus": 0, "network_out": 12000, "class": "standard", "successor": null}, {"id": "g7-highmem-1", "label": "Linode 24GB", "price": {"hourly": 0.09, - "monthly": 60.0}, "region_prices": [{"id": "us-east", "hourly": 0.108, "monthly": - 72.0}], "addons": {"backups": {"price": {"hourly": 0.0075, "monthly": 5.0}, - "region_prices": [{"id": "us-east", "hourly": 0.009, "monthly": 6.0}]}}, "memory": - 24576, "disk": 20480, "transfer": 5000, "vcpus": 2, "gpus": 0, "network_out": - 5000, "class": "highmem", "successor": null}, {"id": "g7-highmem-2", "label": - "Linode 48GB", "price": {"hourly": 0.18, "monthly": 120.0}, "region_prices": - [{"id": "us-east", "hourly": 0.216, "monthly": 144.0}], "addons": {"backups": - {"price": {"hourly": 0.015, "monthly": 10.0}, "region_prices": [{"id": "us-east", - "hourly": 0.018, "monthly": 12.0}]}}, "memory": 49152, "disk": 40960, "transfer": - 6000, "vcpus": 2, "gpus": 0, "network_out": 6000, "class": "highmem", "successor": - null}, {"id": "g7-highmem-4", "label": "Linode 90GB", "price": {"hourly": 0.36, - "monthly": 240.0}, "region_prices": [{"id": "us-east", "hourly": 0.432, "monthly": - 288.0}], "addons": {"backups": {"price": {"hourly": 0.03, "monthly": 20.0}, - "region_prices": [{"id": "us-east", "hourly": 0.036, "monthly": 24.0}]}}, "memory": - 92160, "disk": 92160, "transfer": 7000, "vcpus": 4, "gpus": 0, "network_out": - 7000, "class": "highmem", "successor": null}, {"id": "g7-highmem-8", "label": - "Linode 150GB", "price": {"hourly": 0.72, "monthly": 480.0}, "region_prices": - [{"id": "us-east", "hourly": 0.864, "monthly": 576.0}], "addons": {"backups": - {"price": {"hourly": 0.06, "monthly": 40.0}, "region_prices": [{"id": "us-east", - "hourly": 0.072, "monthly": 48.0}]}}, "memory": 153600, "disk": 204800, "transfer": - 8000, "vcpus": 8, "gpus": 0, "network_out": 8000, "class": "highmem", "successor": - null}, {"id": "g7-highmem-16", "label": "Linode 300GB", "price": {"hourly": - 1.44, "monthly": 960.0}, "region_prices": [{"id": "us-east", "hourly": 1.728, - "monthly": 1152.0}], "addons": {"backups": {"price": {"hourly": 0.12, "monthly": - 80.0}, "region_prices": [{"id": "us-east", "hourly": 0.144, "monthly": 96.0}]}}, - "memory": 307200, "disk": 348160, "transfer": 9000, "vcpus": 16, "gpus": 0, - "network_out": 9000, "class": "highmem", "successor": null}, {"id": "g6-dedicated-2", - "label": "Dedicated 4GB", "price": {"hourly": 0.045, "monthly": 30.0}, "region_prices": - [{"id": "us-east", "hourly": 0.054, "monthly": 36.0}], "addons": {"backups": - {"price": {"hourly": 0.008, "monthly": 5.0}, "region_prices": [{"id": "us-east", - "hourly": 0.0096, "monthly": 6.0}]}}, "memory": 4096, "disk": 81920, "transfer": - 4000, "vcpus": 2, "gpus": 0, "network_out": 4000, "class": "dedicated", "successor": - null}, {"id": "g6-dedicated-4", "label": "Dedicated 8GB", "price": {"hourly": - 0.09, "monthly": 60.0}, "region_prices": [{"id": "us-east", "hourly": 0.108, - "monthly": 72.0}], "addons": {"backups": {"price": {"hourly": 0.015, "monthly": - 10.0}, "region_prices": [{"id": "us-east", "hourly": 0.018, "monthly": 12.0}]}}, - "memory": 8192, "disk": 163840, "transfer": 5000, "vcpus": 4, "gpus": 0, "network_out": - 5000, "class": "dedicated", "successor": null}, {"id": "g6-dedicated-8", "label": - "Dedicated 16GB", "price": {"hourly": 0.18, "monthly": 120.0}, "region_prices": - [{"id": "us-east", "hourly": 0.216, "monthly": 144.0}], "addons": {"backups": - {"price": {"hourly": 0.03, "monthly": 20.0}, "region_prices": [{"id": "us-east", - "hourly": 0.036, "monthly": 24.0}]}}, "memory": 16384, "disk": 327680, "transfer": - 8000, "vcpus": 8, "gpus": 0, "network_out": 6000, "class": "dedicated", "successor": - null}, {"id": "g6-dedicated-16", "label": "Dedicated 32GB", "price": {"hourly": - 0.36, "monthly": 240.0}, "region_prices": [{"id": "us-east", "hourly": 0.432, - "monthly": 288.0}], "addons": {"backups": {"price": {"hourly": 0.06, "monthly": - 40.0}, "region_prices": [{"id": "us-east", "hourly": 0.072, "monthly": 48.0}]}}, - "memory": 32768, "disk": 655360, "transfer": 16000, "vcpus": 16, "gpus": 0, - "network_out": 7000, "class": "dedicated", "successor": null}, {"id": "g6-dedicated-32", - "label": "Dedicated 64GB", "price": {"hourly": 0.72, "monthly": 480.0}, "region_prices": - [{"id": "us-east", "hourly": 0.864, "monthly": 576.0}], "addons": {"backups": - {"price": {"hourly": 0.12, "monthly": 80.0}, "region_prices": [{"id": "us-east", - "hourly": 0.144, "monthly": 96.0}]}}, "memory": 65536, "disk": 1310720, "transfer": - 20000, "vcpus": 32, "gpus": 0, "network_out": 8000, "class": "dedicated", "successor": - null}, {"id": "g6-dedicated-48", "label": "Dedicated 96GB", "price": {"hourly": - 1.08, "monthly": 720.0}, "region_prices": [{"id": "us-east", "hourly": 1.296, - "monthly": 864.0}], "addons": {"backups": {"price": {"hourly": 0.18, "monthly": - 120.0}, "region_prices": [{"id": "us-east", "hourly": 0.216, "monthly": 144.0}]}}, - "memory": 98304, "disk": 1966080, "transfer": 20000, "vcpus": 48, "gpus": 0, - "network_out": 9000, "class": "dedicated", "successor": null}, {"id": "g6-sawhorse-64", - "label": "Sawhorse 192GB", "price": {"hourly": 4.5, "monthly": 3000.0}, "region_prices": - [{"id": "us-east", "hourly": 5.4, "monthly": 3600.0}], "addons": {"backups": - {"price": {"hourly": 0.0, "monthly": 0.0}, "region_prices": [{"id": "us-east", - "hourly": 0.0, "monthly": 0.0}]}}, "memory": 196608, "disk": 8388608, "transfer": - 9000, "vcpus": 64, "gpus": 0, "network_out": 10000, "class": "sawhorse", "successor": - null}, {"id": "g6-dedicated-50", "label": "Dedicated 128GB", "price": {"hourly": - 1.44, "monthly": 960.0}, "region_prices": [{"id": "us-east", "hourly": 1.728, - "monthly": 1152.0}], "addons": {"backups": {"price": {"hourly": 0.24, "monthly": - 160.0}, "region_prices": [{"id": "us-east", "hourly": 0.288, "monthly": 192.0}]}}, - "memory": 131072, "disk": 2560000, "transfer": 10000, "vcpus": 50, "gpus": 0, - "network_out": 10000, "class": "dedicated", "successor": null}, {"id": "g6-dedicated-56", - "label": "Dedicated 256GB", "price": {"hourly": 2.88, "monthly": 1920.0}, "region_prices": - [{"id": "us-east", "hourly": 3.456, "monthly": 2304.0}], "addons": {"backups": - {"price": {"hourly": 0.3, "monthly": 200.0}, "region_prices": [{"id": "us-east", - "hourly": 0.36, "monthly": 240.0}]}}, "memory": 262144, "disk": 5120000, "transfer": - 11000, "vcpus": 56, "gpus": 0, "network_out": 11000, "class": "dedicated", "successor": - null}, {"id": "g6-dedicated-64", "label": "Dedicated 512GB", "price": {"hourly": - 5.76, "monthly": 3840.0}, "region_prices": [{"id": "us-east", "hourly": 6.912, - "monthly": 4608.0}], "addons": {"backups": {"price": {"hourly": 0.36, "monthly": - 240.0}, "region_prices": [{"id": "us-east", "hourly": 0.432, "monthly": 288.0}]}}, - "memory": 524288, "disk": 7372800, "transfer": 12000, "vcpus": 64, "gpus": 0, - "network_out": 12000, "class": "dedicated", "successor": null}, {"id": "g1-gpu-rtx6000-1", - "label": "Dedicated 32GB + RTX6000 GPU x1", "price": {"hourly": 1.5, "monthly": - 1000.0}, "region_prices": [{"id": "us-east", "hourly": 1.8, "monthly": 1200.0}], - "addons": {"backups": {"price": {"hourly": 0.06, "monthly": 40.0}, "region_prices": - [{"id": "us-east", "hourly": 0.072, "monthly": 48.0}]}}, "memory": 32768, "disk": - 655360, "transfer": 16000, "vcpus": 8, "gpus": 0, "network_out": 10000, "class": - "gpu", "successor": null}, {"id": "g1-gpu-rtx6000-2", "label": "Dedicated 64GB - + RTX6000 GPU x2", "price": {"hourly": 3.0, "monthly": 2000.0}, "region_prices": - [{"id": "us-east", "hourly": 3.6, "monthly": 2400.0}], "addons": {"backups": - {"price": {"hourly": 0.12, "monthly": 80.0}, "region_prices": [{"id": "us-east", - "hourly": 0.144, "monthly": 96.0}]}}, "memory": 65536, "disk": 1310720, "transfer": - 20000, "vcpus": 16, "gpus": 0, "network_out": 10000, "class": "gpu", "successor": + "monthly": 60.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.108, "monthly": + 72.0}, {"id": "br-gru", "hourly": 0.126, "monthly": 84.0}], "addons": {"backups": + {"price": {"hourly": 0.0075, "monthly": 5.0}, "region_prices": [{"id": "id-cgk", + "hourly": 0.009, "monthly": 6.0}, {"id": "br-gru", "hourly": 0.0105, "monthly": + 7.0}]}}, "memory": 24576, "disk": 20480, "transfer": 5000, "vcpus": 2, "gpus": + 0, "network_out": 5000, "class": "highmem", "successor": null}, {"id": "g7-highmem-2", + "label": "Linode 48GB", "price": {"hourly": 0.18, "monthly": 120.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.216, "monthly": 144.0}, {"id": "br-gru", "hourly": + 0.252, "monthly": 168.0}], "addons": {"backups": {"price": {"hourly": 0.015, + "monthly": 10.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.018, "monthly": + 12.0}, {"id": "br-gru", "hourly": 0.021, "monthly": 14.0}]}}, "memory": 49152, + "disk": 40960, "transfer": 6000, "vcpus": 2, "gpus": 0, "network_out": 6000, + "class": "highmem", "successor": null}, {"id": "g7-highmem-4", "label": "Linode + 90GB", "price": {"hourly": 0.36, "monthly": 240.0}, "region_prices": [{"id": + "id-cgk", "hourly": 0.432, "monthly": 288.0}, {"id": "br-gru", "hourly": 0.504, + "monthly": 336.0}], "addons": {"backups": {"price": {"hourly": 0.03, "monthly": + 20.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.036, "monthly": 24.0}, + {"id": "br-gru", "hourly": 0.042, "monthly": 28.0}]}}, "memory": 92160, "disk": + 92160, "transfer": 7000, "vcpus": 4, "gpus": 0, "network_out": 7000, "class": + "highmem", "successor": null}, {"id": "g7-highmem-8", "label": "Linode 150GB", + "price": {"hourly": 0.72, "monthly": 480.0}, "region_prices": [{"id": "id-cgk", + "hourly": 0.864, "monthly": 576.0}, {"id": "br-gru", "hourly": 1.008, "monthly": + 672.0}], "addons": {"backups": {"price": {"hourly": 0.06, "monthly": 40.0}, + "region_prices": [{"id": "id-cgk", "hourly": 0.072, "monthly": 48.0}, {"id": + "br-gru", "hourly": 0.084, "monthly": 56.0}]}}, "memory": 153600, "disk": 204800, + "transfer": 8000, "vcpus": 8, "gpus": 0, "network_out": 8000, "class": "highmem", + "successor": null}, {"id": "g7-highmem-16", "label": "Linode 300GB", "price": + {"hourly": 1.44, "monthly": 960.0}, "region_prices": [{"id": "id-cgk", "hourly": + 1.728, "monthly": 1152.0}, {"id": "br-gru", "hourly": 2.016, "monthly": 1344.0}], + "addons": {"backups": {"price": {"hourly": 0.12, "monthly": 80.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.144, "monthly": 96.0}, {"id": "br-gru", "hourly": + 0.168, "monthly": 112.0}]}}, "memory": 307200, "disk": 348160, "transfer": 9000, + "vcpus": 16, "gpus": 0, "network_out": 9000, "class": "highmem", "successor": + null}, {"id": "g6-dedicated-2", "label": "Dedicated 4GB", "price": {"hourly": + 0.054, "monthly": 36.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.065, + "monthly": 43.2}, {"id": "br-gru", "hourly": 0.076, "monthly": 50.4}], "addons": + {"backups": {"price": {"hourly": 0.008, "monthly": 5.0}, "region_prices": [{"id": + "id-cgk", "hourly": 0.009, "monthly": 6.0}, {"id": "br-gru", "hourly": 0.01, + "monthly": 7.0}]}}, "memory": 4096, "disk": 81920, "transfer": 4000, "vcpus": + 2, "gpus": 0, "network_out": 4000, "class": "dedicated", "successor": null}, + {"id": "g6-dedicated-4", "label": "Dedicated 8GB", "price": {"hourly": 0.108, + "monthly": 72.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.13, "monthly": + 86.4}, {"id": "br-gru", "hourly": 0.151, "monthly": 100.8}], "addons": {"backups": + {"price": {"hourly": 0.015, "monthly": 10.0}, "region_prices": [{"id": "id-cgk", + "hourly": 0.018, "monthly": 12.0}, {"id": "br-gru", "hourly": 0.021, "monthly": + 14.0}]}}, "memory": 8192, "disk": 163840, "transfer": 5000, "vcpus": 4, "gpus": + 0, "network_out": 5000, "class": "dedicated", "successor": null}, {"id": "g6-dedicated-8", + "label": "Dedicated 16GB", "price": {"hourly": 0.216, "monthly": 144.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.259, "monthly": 172.8}, {"id": "br-gru", "hourly": + 0.302, "monthly": 201.6}], "addons": {"backups": {"price": {"hourly": 0.03, + "monthly": 20.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.036, "monthly": + 24.0}, {"id": "br-gru", "hourly": 0.042, "monthly": 28.0}]}}, "memory": 16384, + "disk": 327680, "transfer": 6000, "vcpus": 8, "gpus": 0, "network_out": 6000, + "class": "dedicated", "successor": null}, {"id": "g6-dedicated-16", "label": + "Dedicated 32GB", "price": {"hourly": 0.432, "monthly": 288.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.518, "monthly": 345.6}, {"id": "br-gru", "hourly": + 0.605, "monthly": 403.2}], "addons": {"backups": {"price": {"hourly": 0.06, + "monthly": 40.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.072, "monthly": + 48.0}, {"id": "br-gru", "hourly": 0.084, "monthly": 56.0}]}}, "memory": 32768, + "disk": 655360, "transfer": 7000, "vcpus": 16, "gpus": 0, "network_out": 7000, + "class": "dedicated", "successor": null}, {"id": "g6-dedicated-32", "label": + "Dedicated 64GB", "price": {"hourly": 0.864, "monthly": 576.0}, "region_prices": + [{"id": "id-cgk", "hourly": 1.037, "monthly": 691.2}, {"id": "br-gru", "hourly": + 1.21, "monthly": 806.4}], "addons": {"backups": {"price": {"hourly": 0.12, "monthly": + 80.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.144, "monthly": 96.0}, + {"id": "br-gru", "hourly": 0.168, "monthly": 112.0}]}}, "memory": 65536, "disk": + 1310720, "transfer": 8000, "vcpus": 32, "gpus": 0, "network_out": 8000, "class": + "dedicated", "successor": null}, {"id": "g6-dedicated-48", "label": "Dedicated + 96GB", "price": {"hourly": 1.296, "monthly": 864.0}, "region_prices": [{"id": + "id-cgk", "hourly": 1.555, "monthly": 1036.8}, {"id": "br-gru", "hourly": 1.814, + "monthly": 1209.6}], "addons": {"backups": {"price": {"hourly": 0.18, "monthly": + 120.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.216, "monthly": 144.0}, + {"id": "br-gru", "hourly": 0.252, "monthly": 168.0}]}}, "memory": 98304, "disk": + 1966080, "transfer": 9000, "vcpus": 48, "gpus": 0, "network_out": 9000, "class": + "dedicated", "successor": null}, {"id": "g6-dedicated-50", "label": "Dedicated + 128GB", "price": {"hourly": 1.728, "monthly": 1152.0}, "region_prices": [{"id": + "id-cgk", "hourly": 2.074, "monthly": 1382.4}, {"id": "br-gru", "hourly": 2.419, + "monthly": 1612.8}], "addons": {"backups": {"price": {"hourly": 0.24, "monthly": + 160.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.288, "monthly": 192.0}, + {"id": "br-gru", "hourly": 0.336, "monthly": 224.0}]}}, "memory": 131072, "disk": + 2560000, "transfer": 10000, "vcpus": 50, "gpus": 0, "network_out": 10000, "class": + "dedicated", "successor": null}, {"id": "g6-dedicated-56", "label": "Dedicated + 256GB", "price": {"hourly": 3.456, "monthly": 2304.0}, "region_prices": [{"id": + "id-cgk", "hourly": 4.147, "monthly": 2764.8}, {"id": "br-gru", "hourly": 4.838, + "monthly": 3225.6}], "addons": {"backups": {"price": {"hourly": 0.3, "monthly": + 200.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.36, "monthly": 240.0}, + {"id": "br-gru", "hourly": 0.42, "monthly": 280.0}]}}, "memory": 262144, "disk": + 5120000, "transfer": 11000, "vcpus": 56, "gpus": 0, "network_out": 11000, "class": + "dedicated", "successor": null}, {"id": "g6-dedicated-64", "label": "Dedicated + 512GB", "price": {"hourly": 6.912, "monthly": 4608.0}, "region_prices": [{"id": + "id-cgk", "hourly": 8.294, "monthly": 5529.6}, {"id": "br-gru", "hourly": 9.677, + "monthly": 6451.2}], "addons": {"backups": {"price": {"hourly": 0.36, "monthly": + 240.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.432, "monthly": 288.0}, + {"id": "br-gru", "hourly": 0.504, "monthly": 336.0}]}}, "memory": 524288, "disk": + 7372800, "transfer": 12000, "vcpus": 64, "gpus": 0, "network_out": 12000, "class": + "dedicated", "successor": null}, {"id": "g1-gpu-rtx6000-1", "label": "Dedicated + 32GB + RTX6000 GPU x1", "price": {"hourly": 1.5, "monthly": 1000.0}, "region_prices": + [], "addons": {"backups": {"price": {"hourly": 0.06, "monthly": 40.0}, "region_prices": + []}}, "memory": 32768, "disk": 655360, "transfer": 16000, "vcpus": 8, "gpus": + 1, "network_out": 10000, "class": "gpu", "successor": null}, {"id": "g1-gpu-rtx6000-2", + "label": "Dedicated 64GB + RTX6000 GPU x2", "price": {"hourly": 3.0, "monthly": + 2000.0}, "region_prices": [], "addons": {"backups": {"price": {"hourly": 0.12, + "monthly": 80.0}, "region_prices": []}}, "memory": 65536, "disk": 1310720, "transfer": + 20000, "vcpus": 16, "gpus": 2, "network_out": 10000, "class": "gpu", "successor": null}, {"id": "g1-gpu-rtx6000-3", "label": "Dedicated 96GB + RTX6000 GPU x3", - "price": {"hourly": 4.5, "monthly": 3000.0}, "region_prices": [{"id": "us-east", - "hourly": 5.4, "monthly": 3600.0}], "addons": {"backups": {"price": {"hourly": - 0.18, "monthly": 160.0}, "region_prices": [{"id": "us-east", "hourly": 0.216, - "monthly": 192.0}]}}, "memory": 98304, "disk": 1966080, "transfer": 20000, "vcpus": - 20, "gpus": 0, "network_out": 10000, "class": "gpu", "successor": null}, {"id": - "g1-gpu-rtx6000-4", "label": "Dedicated 128GB + RTX6000 GPU x4", "price": {"hourly": - 6.0, "monthly": 4000.0}, "region_prices": [{"id": "us-east", "hourly": 7.2, - "monthly": 4800.0}], "addons": {"backups": {"price": {"hourly": 0.24, "monthly": - 320.0}, "region_prices": [{"id": "us-east", "hourly": 0.288, "monthly": 384.0}]}}, - "memory": 131072, "disk": 2621440, "transfer": 20000, "vcpus": 24, "gpus": 0, - "network_out": 10000, "class": "gpu", "successor": null}, {"id": "g6-premium-2", - "label": "Premium 4GB", "price": {"hourly": 0.05, "monthly": 36.0}, "region_prices": - [{"id": "us-east", "hourly": 0.06, "monthly": 43.2}], "addons": {"backups": - {"price": {"hourly": 0.008, "monthly": 5.0}, "region_prices": [{"id": "us-east", - "hourly": 0.0096, "monthly": 6.0}]}}, "memory": 4096, "disk": 81920, "transfer": - 4000, "vcpus": 2, "gpus": 0, "network_out": 4000, "class": "premium", "successor": - null}, {"id": "g6-premium-4", "label": "Premium 8GB", "price": {"hourly": 0.11, - "monthly": 72.0}, "region_prices": [{"id": "us-east", "hourly": 0.132, "monthly": - 86.4}], "addons": {"backups": {"price": {"hourly": 0.015, "monthly": 10.0}, - "region_prices": [{"id": "us-east", "hourly": 0.018, "monthly": 12.0}]}}, "memory": - 8192, "disk": 163840, "transfer": 5000, "vcpus": 4, "gpus": 0, "network_out": - 5000, "class": "premium", "successor": null}, {"id": "g6-premium-8", "label": - "Premium 16GB", "price": {"hourly": 0.22, "monthly": 144.0}, "region_prices": - [{"id": "us-east", "hourly": 0.264, "monthly": 172.8}], "addons": {"backups": - {"price": {"hourly": 0.03, "monthly": 20.0}, "region_prices": [{"id": "us-east", - "hourly": 0.036, "monthly": 24.0}]}}, "memory": 16384, "disk": 327680, "transfer": - 6000, "vcpus": 8, "gpus": 0, "network_out": 6000, "class": "premium", "successor": - null}, {"id": "g6-premium-16", "label": "Premium 32GB", "price": {"hourly": - 0.43, "monthly": 288.0}, "region_prices": [{"id": "us-east", "hourly": 0.516, - "monthly": 345.6}], "addons": {"backups": {"price": {"hourly": 0.06, "monthly": - 40.0}, "region_prices": [{"id": "us-east", "hourly": 0.072, "monthly": 48.0}]}}, - "memory": 32768, "disk": 655360, "transfer": 7000, "vcpus": 16, "gpus": 0, "network_out": - 7000, "class": "premium", "successor": null}, {"id": "g6-premium-32", "label": - "Premium 64GB", "price": {"hourly": 0.86, "monthly": 576.0}, "region_prices": - [{"id": "us-east", "hourly": 1.032, "monthly": 691.2}], "addons": {"backups": - {"price": {"hourly": 0.12, "monthly": 80.0}, "region_prices": [{"id": "us-east", - "hourly": 0.144, "monthly": 96.0}]}}, "memory": 65536, "disk": 1310720, "transfer": - 8000, "vcpus": 32, "gpus": 0, "network_out": 8000, "class": "premium", "successor": - null}, {"id": "g6-premium-48", "label": "Premium 96GB", "price": {"hourly": - 1.3, "monthly": 864.0}, "region_prices": [{"id": "us-east", "hourly": 1.56, - "monthly": 1036.8}], "addons": {"backups": {"price": {"hourly": 0.18, "monthly": - 120.0}, "region_prices": [{"id": "us-east", "hourly": 0.216, "monthly": 144.0}]}}, - "memory": 98304, "disk": 1966080, "transfer": 9000, "vcpus": 48, "gpus": 0, - "network_out": 9000, "class": "premium", "successor": null}, {"id": "g6-premium-50", - "label": "Premium 128GB", "price": {"hourly": 1.73, "monthly": 1152.0}, "region_prices": - [{"id": "us-east", "hourly": 2.076, "monthly": 1382.4}], "addons": {"backups": - {"price": {"hourly": 0.24, "monthly": 160.0}, "region_prices": [{"id": "us-east", - "hourly": 0.288, "monthly": 192.0}]}}, "memory": 131072, "disk": 2560000, "transfer": + "price": {"hourly": 4.5, "monthly": 3000.0}, "region_prices": [], "addons": + {"backups": {"price": {"hourly": 0.18, "monthly": 120.0}, "region_prices": []}}, + "memory": 98304, "disk": 1966080, "transfer": 20000, "vcpus": 20, "gpus": 3, + "network_out": 10000, "class": "gpu", "successor": null}, {"id": "g1-gpu-rtx6000-4", + "label": "Dedicated 128GB + RTX6000 GPU x4", "price": {"hourly": 6.0, "monthly": + 4000.0}, "region_prices": [], "addons": {"backups": {"price": {"hourly": 0.24, + "monthly": 160.0}, "region_prices": []}}, "memory": 131072, "disk": 2621440, + "transfer": 20000, "vcpus": 24, "gpus": 4, "network_out": 10000, "class": "gpu", + "successor": null}, {"id": "g7-premium-2", "label": "Premium 4GB", "price": + {"hourly": 0.0645, "monthly": 43.0}, "region_prices": [{"id": "id-cgk", "hourly": + 0.078, "monthly": 51.84}, {"id": "br-gru", "hourly": 0.091, "monthly": 60.48}], + "addons": {"backups": {"price": {"hourly": 0.008, "monthly": 5.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.009, "monthly": 6.0}, {"id": "br-gru", "hourly": + 0.01, "monthly": 7.0}]}}, "memory": 4096, "disk": 81920, "transfer": 4000, "vcpus": + 2, "gpus": 0, "network_out": 4000, "class": "premium", "successor": null}, {"id": + "g7-premium-4", "label": "Premium 8GB", "price": {"hourly": 0.129, "monthly": + 86.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.156, "monthly": 103.68}, + {"id": "br-gru", "hourly": 0.181, "monthly": 120.96}], "addons": {"backups": + {"price": {"hourly": 0.015, "monthly": 10.0}, "region_prices": [{"id": "id-cgk", + "hourly": 0.018, "monthly": 12.0}, {"id": "br-gru", "hourly": 0.021, "monthly": + 14.0}]}}, "memory": 8192, "disk": 163840, "transfer": 5000, "vcpus": 4, "gpus": + 0, "network_out": 5000, "class": "premium", "successor": null}, {"id": "g7-premium-8", + "label": "Premium 16GB", "price": {"hourly": 0.2595, "monthly": 173.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.311, "monthly": 207.36}, {"id": "br-gru", "hourly": + 0.363, "monthly": 241.92}], "addons": {"backups": {"price": {"hourly": 0.03, + "monthly": 20.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.036, "monthly": + 24.0}, {"id": "br-gru", "hourly": 0.042, "monthly": 28.0}]}}, "memory": 16384, + "disk": 327680, "transfer": 6000, "vcpus": 8, "gpus": 0, "network_out": 6000, + "class": "premium", "successor": null}, {"id": "g7-premium-16", "label": "Premium + 32GB", "price": {"hourly": 0.519, "monthly": 346.0}, "region_prices": [{"id": + "id-cgk", "hourly": 0.622, "monthly": 414.72}, {"id": "br-gru", "hourly": 0.726, + "monthly": 483.84}], "addons": {"backups": {"price": {"hourly": 0.06, "monthly": + 40.0}, "region_prices": [{"id": "id-cgk", "hourly": 0.072, "monthly": 48.0}, + {"id": "br-gru", "hourly": 0.084, "monthly": 56.0}]}}, "memory": 32768, "disk": + 655360, "transfer": 7000, "vcpus": 16, "gpus": 0, "network_out": 7000, "class": + "premium", "successor": null}, {"id": "g7-premium-32", "label": "Premium 64GB", + "price": {"hourly": 1.0365, "monthly": 691.0}, "region_prices": [{"id": "id-cgk", + "hourly": 1.244, "monthly": 829.44}, {"id": "br-gru", "hourly": 1.452, "monthly": + 967.68}], "addons": {"backups": {"price": {"hourly": 0.12, "monthly": 80.0}, + "region_prices": [{"id": "id-cgk", "hourly": 0.144, "monthly": 96.0}, {"id": + "br-gru", "hourly": 0.168, "monthly": 112.0}]}}, "memory": 65536, "disk": 1310720, + "transfer": 8000, "vcpus": 32, "gpus": 0, "network_out": 8000, "class": "premium", + "successor": null}, {"id": "g7-premium-48", "label": "Premium 96GB", "price": + {"hourly": 1.5555, "monthly": 1037.0}, "region_prices": [{"id": "id-cgk", "hourly": + 1.866, "monthly": 1244.16}, {"id": "br-gru", "hourly": 2.177, "monthly": 1451.52}], + "addons": {"backups": {"price": {"hourly": 0.18, "monthly": 120.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.216, "monthly": 144.0}, {"id": "br-gru", "hourly": + 0.252, "monthly": 168.0}]}}, "memory": 98304, "disk": 1966080, "transfer": 9000, + "vcpus": 48, "gpus": 0, "network_out": 9000, "class": "premium", "successor": + null}, {"id": "g7-premium-50", "label": "Premium 128GB", "price": {"hourly": + 2.073, "monthly": 1382.0}, "region_prices": [{"id": "id-cgk", "hourly": 2.488, + "monthly": 1658.88}, {"id": "br-gru", "hourly": 2.903, "monthly": 1935.36}], + "addons": {"backups": {"price": {"hourly": 0.24, "monthly": 160.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.288, "monthly": 192.0}, {"id": "br-gru", "hourly": + 0.336, "monthly": 224.0}]}}, "memory": 131072, "disk": 2560000, "transfer": 10000, "vcpus": 50, "gpus": 0, "network_out": 10000, "class": "premium", "successor": - null}, {"id": "g6-premium-56", "label": "Premium 256GB", "price": {"hourly": - 3.46, "monthly": 2304.0}, "region_prices": [{"id": "us-east", "hourly": 4.152, - "monthly": 2764.8}], "addons": {"backups": {"price": {"hourly": 0.3, "monthly": - 200.0}, "region_prices": [{"id": "us-east", "hourly": 0.36, "monthly": 240.0}]}}, - "memory": 262144, "disk": 5120000, "transfer": 11000, "vcpus": 56, "gpus": 0, - "network_out": 11000, "class": "premium", "successor": null}, {"id": "g6-premium-64", - "label": "Premium 512GB", "price": {"hourly": 6.91, "monthly": 4608.0}, "region_prices": - [{"id": "us-east", "hourly": 8.292, "monthly": 5529.6}], "addons": {"backups": - {"price": {"hourly": 0.36, "monthly": 240.0}, "region_prices": [{"id": "us-east", - "hourly": 0.432, "monthly": 288.0}]}}, "memory": 524288, "disk": 7372800, "transfer": + null}, {"id": "g7-premium-56", "label": "Premium 256GB", "price": {"hourly": + 4.1475, "monthly": 2765.0}, "region_prices": [{"id": "id-cgk", "hourly": 4.977, + "monthly": 3317.76}, {"id": "br-gru", "hourly": 5.806, "monthly": 3870.72}], + "addons": {"backups": {"price": {"hourly": 0.3, "monthly": 200.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.36, "monthly": 240.0}, {"id": "br-gru", "hourly": + 0.42, "monthly": 280.0}]}}, "memory": 262144, "disk": 5120000, "transfer": 11000, + "vcpus": 56, "gpus": 0, "network_out": 11000, "class": "premium", "successor": + null}, {"id": "g7-premium-64", "label": "Premium 512GB", "price": {"hourly": + 8.295, "monthly": 5530.0}, "region_prices": [{"id": "id-cgk", "hourly": 9.953, + "monthly": 6635.52}, {"id": "br-gru", "hourly": 11.612, "monthly": 7741.44}], + "addons": {"backups": {"price": {"hourly": 0.36, "monthly": 240.0}, "region_prices": + [{"id": "id-cgk", "hourly": 0.432, "monthly": 288.0}, {"id": "br-gru", "hourly": + 0.504, "monthly": 336.0}]}}, "memory": 524288, "disk": 7372800, "transfer": 12000, "vcpus": 64, "gpus": 0, "network_out": 12000, "class": "premium", "successor": - null}], "page": 1, "pages": 1, "results": 46}' + null}], "page": 1, "pages": 1, "results": 37}' headers: Access-Control-Allow-Credentials: - "true" @@ -236,21 +270,26 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - - private, max-age=900 - - private, max-age=60, s-maxage=60 + - max-age=0, no-cache, no-store + Connection: + - keep-alive Content-Security-Policy: - default-src 'none' Content-Type: - application/json - Server: - - nginx + Expires: + - Thu, 11 Jul 2024 18:32:53 GMT + Pragma: + - no-cache Strict-Transport-Security: - max-age=31536000 Vary: - - Accept-Encoding - Authorization, X-Filter - Authorization, X-Filter + - Accept-Encoding X-Accepted-Oauth-Scopes: - '*' X-Content-Type-Options: @@ -261,7 +300,7 @@ interactions: X-Oauth-Scopes: - '*' X-Ratelimit-Limit: - - "1200" + - "400" X-Xss-Protection: - 1; mode=block status: 200 OK diff --git a/test/integration/fixtures/TestVLANs_GetIPAMAddress.yaml b/test/integration/fixtures/TestVLANs_GetIPAMAddress.yaml index 6cc529f86..57e9b119c 100644 --- a/test/integration/fixtures/TestVLANs_GetIPAMAddress.yaml +++ b/test/integration/fixtures/TestVLANs_GetIPAMAddress.yaml @@ -46,18 +46,18 @@ interactions: {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-iad", "label": "Washington, DC", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "Kubernetes", - "Cloud Firewall", "Vlans", "VPCs", "Managed Databases", "Metadata", "Premium - Plans"], "status": "ok", "resolvers": {"ipv4": "139.144.192.62, 139.144.192.60, - 139.144.192.61, 139.144.192.53, 139.144.192.54, 139.144.192.67, 139.144.192.69, - 139.144.192.66, 139.144.192.52, 139.144.192.68", "ipv6": "1234::5678, + "Cloud Firewall", "Vlans", "VPCs", "Metadata", "Premium Plans", "Placement Group"], + "status": "ok", "resolvers": {"ipv4": "139.144.192.62, 139.144.192.60, 139.144.192.61, + 139.144.192.53, 139.144.192.54, 139.144.192.67, 139.144.192.69, 139.144.192.66, + 139.144.192.52, 139.144.192.68", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, - 1234::5678, 1234::5678, 1234::5678"}, - "placement_group_limits": {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": - 5}, "site_type": "core"}, {"id": "us-ord", "label": "Chicago, IL", "country": - "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", - "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", "Vlans", "VPCs", - "Managed Databases", "Metadata", "Premium Plans"], "status": "ok", "resolvers": + 1234::5678, 1234::5678"}, "placement_group_limits": + {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": + "core"}, {"id": "us-ord", "label": "Chicago, IL", "country": "us", "capabilities": + ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "GPU + Linodes", "Kubernetes", "Cloud Firewall", "Vlans", "VPCs", "Managed Databases", + "Metadata", "Premium Plans", "Placement Group"], "status": "ok", "resolvers": {"ipv4": "172.232.0.17, 172.232.0.16, 172.232.0.21, 172.232.0.13, 172.232.0.22, 172.232.0.9, 172.232.0.19, 172.232.0.20, 172.232.0.15, 172.232.0.18", "ipv6": "1234::5678, 1234::5678, 1234::5678, @@ -106,10 +106,10 @@ interactions: {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "se-sto", "label": "Stockholm, SE", "country": "se", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "Kubernetes", - "Cloud Firewall", "Vlans", "VPCs", "Metadata", "Premium Plans"], "status": "ok", - "resolvers": {"ipv4": "172.232.128.24, 172.232.128.26, 172.232.128.20, 172.232.128.22, - 172.232.128.25, 172.232.128.19, 172.232.128.23, 172.232.128.18, 172.232.128.21, - 172.232.128.27", "ipv6": "1234::5678, 1234::5678, + "Cloud Firewall", "Vlans", "VPCs", "Metadata", "Premium Plans", "Placement Group"], + "status": "ok", "resolvers": {"ipv4": "172.232.128.24, 172.232.128.26, 172.232.128.20, + 172.232.128.22, 172.232.128.25, 172.232.128.19, 172.232.128.23, 172.232.128.18, + 172.232.128.21, 172.232.128.27", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": @@ -183,75 +183,96 @@ interactions: 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "gb-lon", "label": + "London 2, UK", "country": "gb", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Kubernetes", "Cloud Firewall", "Vlans", "VPCs", "Metadata", + "Premium Plans"], "status": "ok", "resolvers": {"ipv4": "172.236.0.46, 172.236.0.50, + 172.236.0.47, 172.236.0.53, 172.236.0.52, 172.236.0.45, 172.236.0.49, 172.236.0.51, + 172.236.0.54, 172.236.0.48", "ipv6": "1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678"}, "placement_group_limits": + {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": + "core"}, {"id": "au-mel", "label": "Melbourne, AU", "country": "au", "capabilities": + ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud + Firewall", "Vlans", "VPCs", "Metadata", "Premium Plans"], "status": "ok", "resolvers": + {"ipv4": "172.236.32.23, 172.236.32.35, 172.236.32.30, 172.236.32.28, 172.236.32.32, + 172.236.32.33, 172.236.32.27, 172.236.32.37, 172.236.32.29, 172.236.32.34", + "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-central", "label": "Dallas, TX", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud Firewall", "Vlans", "Block - Storage Migrations", "Managed Databases", "Metadata"], "status": "ok", "resolvers": - {"ipv4": "72.14.179.5, 72.14.188.5, 173.255.199.5, 66.228.53.5, 96.126.122.5, - 96.126.124.5, 96.126.127.5, 198.58.107.5, 198.58.111.5, 23.239.24.5", "ipv6": - "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, - 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": + Storage Migrations", "Managed Databases", "Metadata", "Placement Group"], "status": + "ok", "resolvers": {"ipv4": "72.14.179.5, 72.14.188.5, 173.255.199.5, 66.228.53.5, + 96.126.122.5, 96.126.124.5, 96.126.127.5, 198.58.107.5, 198.58.111.5, 23.239.24.5", + "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-west", "label": "Fremont, CA", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud - Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata"], - "status": "ok", "resolvers": {"ipv4": "173.230.145.5, 173.230.147.5, 173.230.155.5, - 173.255.212.5, 173.255.219.5, 173.255.241.5, 173.255.243.5, 173.255.244.5, 74.207.241.5, - 74.207.242.5", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, - 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, - "placement_group_limits": {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": - 5}, "site_type": "core"}, {"id": "us-southeast", "label": "Atlanta, GA", "country": - "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", - "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", "Vlans", "Block - Storage Migrations", "Managed Databases", "Metadata"], "status": "ok", "resolvers": - {"ipv4": "74.207.231.5, 173.230.128.5, 173.230.129.5, 173.230.136.5, 173.230.140.5, - 66.228.59.5, 66.228.62.5, 50.116.35.5, 50.116.41.5, 23.239.18.5", "ipv6": "1234::5678, + Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata", + "Placement Group"], "status": "ok", "resolvers": {"ipv4": "173.230.145.5, 173.230.147.5, + 173.230.155.5, 173.255.212.5, 173.255.219.5, 173.255.241.5, 173.255.243.5, 173.255.244.5, + 74.207.241.5, 74.207.242.5", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, - 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": - 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-east", "label": + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, + "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-southeast", "label": + "Atlanta, GA", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", + "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata", "Placement + Group"], "status": "ok", "resolvers": {"ipv4": "74.207.231.5, 173.230.128.5, + 173.230.129.5, 173.230.136.5, 173.230.140.5, 66.228.59.5, 66.228.62.5, 50.116.35.5, + 50.116.41.5, 23.239.18.5", "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, + "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-east", "label": "Newark, NJ", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", - "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata"], "status": - "ok", "resolvers": {"ipv4": "66.228.42.5, 96.126.106.5, 50.116.53.5, 50.116.58.5, - 50.116.61.5, 50.116.62.5, 66.175.211.5, 97.107.133.4, 207.192.69.4, 207.192.69.5", - "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, - 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": - {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": - "core"}, {"id": "eu-west", "label": "London, UK", "country": "gb", "capabilities": - ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud - Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata"], - "status": "ok", "resolvers": {"ipv4": "178.79.182.5, 176.58.107.5, 176.58.116.5, - 176.58.121.5, 151.236.220.5, 212.71.252.5, 212.71.253.5, 109.74.192.20, 109.74.193.20, - 109.74.194.20", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, + "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata", "Placement + Group"], "status": "ok", "resolvers": {"ipv4": "66.228.42.5, 96.126.106.5, 50.116.53.5, + 50.116.58.5, 50.116.61.5, 50.116.62.5, 66.175.211.5, 97.107.133.4, 207.192.69.4, + 207.192.69.5", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": - 5}, "site_type": "core"}, {"id": "ap-south", "label": "Singapore, SG", "country": - "sg", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", - "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", "Vlans", "Block - Storage Migrations", "Managed Databases", "Metadata"], "status": "ok", "resolvers": - {"ipv4": "139.162.11.5, 139.162.13.5, 139.162.14.5, 139.162.15.5, 139.162.16.5, - 139.162.21.5, 139.162.27.5, 103.3.60.18, 103.3.60.19, 103.3.60.20", "ipv6": - "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, - 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": - {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": - "core"}, {"id": "eu-central", "label": "Frankfurt, DE", "country": "de", "capabilities": - ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "GPU - Linodes", "Kubernetes", "Cloud Firewall", "Vlans", "Block Storage Migrations", - "Managed Databases", "Metadata"], "status": "ok", "resolvers": {"ipv4": "139.162.130.5, - 139.162.131.5, 139.162.132.5, 139.162.133.5, 139.162.134.5, 139.162.135.5, 139.162.136.5, - 139.162.137.5, 139.162.138.5, 139.162.139.5", "ipv6": "1234::5678, 1234::5678, + 5}, "site_type": "core"}, {"id": "eu-west", "label": "London, UK", "country": + "gb", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", + "Kubernetes", "Cloud Firewall", "Vlans", "Block Storage Migrations", "Managed + Databases", "Metadata", "Placement Group"], "status": "ok", "resolvers": {"ipv4": + "178.79.182.5, 176.58.107.5, 176.58.116.5, 176.58.121.5, 151.236.220.5, 212.71.252.5, + 212.71.253.5, 109.74.192.20, 109.74.193.20, 109.74.194.20", "ipv6": "1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "ap-south", + "label": "Singapore, SG", "country": "sg", "capabilities": ["Linodes", "Backups", + "NodeBalancers", "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", + "Cloud Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", + "Metadata", "Placement Group"], "status": "ok", "resolvers": {"ipv4": "139.162.11.5, + 139.162.13.5, 139.162.14.5, 139.162.15.5, 139.162.16.5, 139.162.21.5, 139.162.27.5, + 103.3.60.18, 103.3.60.19, 103.3.60.20", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": - 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "ap-northeast", - "label": "Tokyo, JP", "country": "jp", "capabilities": ["Linodes", "Backups", - "NodeBalancers", "Block Storage", "Kubernetes", "Cloud Firewall", "Vlans", "Block - Storage Migrations", "Managed Databases", "Metadata"], "status": "ok", "resolvers": - {"ipv4": "139.162.66.5, 139.162.67.5, 139.162.68.5, 139.162.69.5, 139.162.70.5, - 139.162.71.5, 139.162.72.5, 139.162.73.5, 139.162.74.5, 139.162.75.5", "ipv6": - "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, - 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": - {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": - "core"}], "page": 1, "pages": 1, "results": 27}' + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "eu-central", + "label": "Frankfurt, DE", "country": "de", "capabilities": ["Linodes", "Backups", + "NodeBalancers", "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", + "Cloud Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", + "Metadata"], "status": "ok", "resolvers": {"ipv4": "139.162.130.5, 139.162.131.5, + 139.162.132.5, 139.162.133.5, 139.162.134.5, 139.162.135.5, 139.162.136.5, 139.162.137.5, + 139.162.138.5, 139.162.139.5", "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, + "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "ap-northeast", "label": + "Tokyo, JP", "country": "jp", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Kubernetes", "Cloud Firewall", "Vlans", "Block Storage Migrations", + "Managed Databases", "Metadata"], "status": "ok", "resolvers": {"ipv4": "139.162.66.5, + 139.162.67.5, 139.162.68.5, 139.162.69.5, 139.162.70.5, 139.162.71.5, 139.162.72.5, + 139.162.73.5, 139.162.74.5, 139.162.75.5", "ipv6": "1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}], "page": 1, "pages": + 1, "results": 27}' headers: Access-Control-Allow-Credentials: - "true" @@ -263,6 +284,8 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: @@ -272,7 +295,7 @@ interactions: Content-Type: - application/json Expires: - - Thu, 27 Jun 2024 13:47:20 GMT + - Thu, 11 Jul 2024 18:30:57 GMT Pragma: - no-cache Strict-Transport-Security: @@ -298,7 +321,7 @@ interactions: code: 200 duration: "" - request: - body: '{"region":"ap-west","type":"g6-nanode-1","label":"go-ins-test-ipam","root_pass":"390Es}4D|r^2$KFE9Y?)}dEk#{$WrI03c8nU7daRD3\u002648}Uot32Nm]Cvhe;r\u0026N7]","image":"linode/debian9","interfaces":[{"ipam_address":"10.0.0.1/24","label":"go-vlan-test-ipam","purpose":"vlan"}],"firewall_id":605292,"booted":true}' + body: '{"region":"ap-west","type":"g6-nanode-1","label":"go-ins-test-ipam","root_pass":"4|s9`hN2SrZLEfL^68dAIbY2i$6Dd{9\u003c\u003c$Yw37]''[\u003ef~7NqEvJx^y6E;0\u003cC816qz","image":"linode/debian9","interfaces":[{"ipam_address":"10.0.0.1/24","label":"go-vlan-test-ipam","purpose":"vlan"}],"firewall_id":653317,"booted":true}' form: {} headers: Accept: @@ -310,15 +333,15 @@ interactions: url: https://api.linode.com/v4beta/linode/instances method: POST response: - body: '{"id": 60716324, "label": "go-ins-test-ipam", "group": "", "status": "provisioning", + body: '{"id": 61338665, "label": "go-ins-test-ipam", "group": "", "status": "provisioning", "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "type": - "g6-nanode-1", "ipv4": ["172.105.62.189"], "ipv6": "1234::5678/128", + "g6-nanode-1", "ipv4": ["192.46.208.41"], "ipv6": "1234::5678/128", "image": "linode/debian9", "region": "ap-west", "specs": {"disk": 25600, "memory": 1024, "vcpus": 1, "gpus": 0, "transfer": 1000}, "alerts": {"cpu": 90, "network_in": 10, "network_out": 10, "transfer_quota": 80, "io": 10000}, "backups": {"enabled": true, "available": false, "schedule": {"day": null, "window": null}, "last_successful": null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": [], "host_uuid": - "454cc4590caa2a8de6a482c1c9e382273edb1576", "has_user_data": false, "placement_group": + "7c02d8248cd598c0fbe8286e88e0299137474f35", "has_user_data": false, "placement_group": null, "lke_cluster_id": null}' headers: Access-Control-Allow-Credentials: @@ -331,18 +354,20 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive Content-Length: - - "782" + - "781" Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Thu, 27 Jun 2024 13:47:21 GMT + - Thu, 11 Jul 2024 18:30:58 GMT Pragma: - no-cache Strict-Transport-Security: @@ -375,18 +400,18 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/instances/60716324 + url: https://api.linode.com/v4beta/linode/instances/61338665 method: GET response: - body: '{"id": 60716324, "label": "go-ins-test-ipam", "group": "", "status": "provisioning", + body: '{"id": 61338665, "label": "go-ins-test-ipam", "group": "", "status": "provisioning", "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "type": - "g6-nanode-1", "ipv4": ["172.105.62.189"], "ipv6": "1234::5678/128", + "g6-nanode-1", "ipv4": ["192.46.208.41"], "ipv6": "1234::5678/128", "image": "linode/debian9", "region": "ap-west", "specs": {"disk": 25600, "memory": 1024, "vcpus": 1, "gpus": 0, "transfer": 1000}, "alerts": {"cpu": 90, "network_in": 10, "network_out": 10, "transfer_quota": 80, "io": 10000}, "backups": {"enabled": - true, "available": false, "schedule": {"day": "Scheduling", "window": "Scheduling"}, + true, "available": true, "schedule": {"day": "Scheduling", "window": "Scheduling"}, "last_successful": null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": - [], "host_uuid": "454cc4590caa2a8de6a482c1c9e382273edb1576", "has_user_data": + [], "host_uuid": "7c02d8248cd598c0fbe8286e88e0299137474f35", "has_user_data": false, "placement_group": null, "lke_cluster_id": null}' headers: Access-Control-Allow-Credentials: @@ -399,18 +424,20 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive Content-Length: - - "798" + - "796" Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Thu, 27 Jun 2024 13:47:36 GMT + - Thu, 11 Jul 2024 18:31:13 GMT Pragma: - no-cache Strict-Transport-Security: @@ -444,18 +471,18 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/instances/60716324 + url: https://api.linode.com/v4beta/linode/instances/61338665 method: GET response: - body: '{"id": 60716324, "label": "go-ins-test-ipam", "group": "", "status": "booting", + body: '{"id": 61338665, "label": "go-ins-test-ipam", "group": "", "status": "provisioning", "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "type": - "g6-nanode-1", "ipv4": ["172.105.62.189"], "ipv6": "1234::5678/128", + "g6-nanode-1", "ipv4": ["192.46.208.41"], "ipv6": "1234::5678/128", "image": "linode/debian9", "region": "ap-west", "specs": {"disk": 25600, "memory": 1024, "vcpus": 1, "gpus": 0, "transfer": 1000}, "alerts": {"cpu": 90, "network_in": 10, "network_out": 10, "transfer_quota": 80, "io": 10000}, "backups": {"enabled": - true, "available": false, "schedule": {"day": "Scheduling", "window": "Scheduling"}, + true, "available": true, "schedule": {"day": "Scheduling", "window": "Scheduling"}, "last_successful": null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": - [], "host_uuid": "454cc4590caa2a8de6a482c1c9e382273edb1576", "has_user_data": + [], "host_uuid": "7c02d8248cd598c0fbe8286e88e0299137474f35", "has_user_data": false, "placement_group": null, "lke_cluster_id": null}' headers: Access-Control-Allow-Credentials: @@ -468,18 +495,20 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive Content-Length: - - "793" + - "796" Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Thu, 27 Jun 2024 13:47:51 GMT + - Thu, 11 Jul 2024 18:31:28 GMT Pragma: - no-cache Strict-Transport-Security: @@ -513,18 +542,18 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/instances/60716324 + url: https://api.linode.com/v4beta/linode/instances/61338665 method: GET response: - body: '{"id": 60716324, "label": "go-ins-test-ipam", "group": "", "status": "running", + body: '{"id": 61338665, "label": "go-ins-test-ipam", "group": "", "status": "running", "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", "type": - "g6-nanode-1", "ipv4": ["172.105.62.189"], "ipv6": "1234::5678/128", + "g6-nanode-1", "ipv4": ["192.46.208.41"], "ipv6": "1234::5678/128", "image": "linode/debian9", "region": "ap-west", "specs": {"disk": 25600, "memory": 1024, "vcpus": 1, "gpus": 0, "transfer": 1000}, "alerts": {"cpu": 90, "network_in": 10, "network_out": 10, "transfer_quota": 80, "io": 10000}, "backups": {"enabled": - true, "available": false, "schedule": {"day": "Scheduling", "window": "Scheduling"}, + true, "available": true, "schedule": {"day": "Scheduling", "window": "Scheduling"}, "last_successful": null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": - [], "host_uuid": "454cc4590caa2a8de6a482c1c9e382273edb1576", "has_user_data": + [], "host_uuid": "7c02d8248cd598c0fbe8286e88e0299137474f35", "has_user_data": false, "placement_group": null, "lke_cluster_id": null}' headers: Access-Control-Allow-Credentials: @@ -537,18 +566,20 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive Content-Length: - - "793" + - "791" Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Thu, 27 Jun 2024 13:48:06 GMT + - Thu, 11 Jul 2024 18:31:43 GMT Pragma: - no-cache Strict-Transport-Security: @@ -584,17 +615,17 @@ interactions: - linodego/dev https://github.com/linode/linodego X-Filter: - '{"interfaces":"go-vlan-test-ipam"}' - url: https://api.linode.com/v4beta/linode/instances/60716324/configs?page=1 + url: https://api.linode.com/v4beta/linode/instances/61338665/configs?page=1 method: GET response: - body: '{"data": [{"id": 63923392, "label": "My Debian 9 Disk Profile", "helpers": + body: '{"data": [{"id": 64558131, "label": "My Debian 9 Disk Profile", "helpers": {"updatedb_disabled": true, "distro": true, "modules_dep": true, "network": true, "devtmpfs_automount": true}, "kernel": "linode/grub2", "comments": "", "memory_limit": 0, "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", - "root_device": "/dev/sda", "devices": {"sda": {"disk_id": 119405754, "volume_id": - null}, "sdb": {"disk_id": 119405755, "volume_id": null}, "sdc": null, "sdd": + "root_device": "/dev/sda", "devices": {"sda": {"disk_id": 120510225, "volume_id": + null}, "sdb": {"disk_id": 120510226, "volume_id": null}, "sdc": null, "sdd": null, "sde": null, "sdf": null, "sdg": null, "sdh": null}, "initrd": null, "run_level": - "default", "virt_mode": "paravirt", "interfaces": [{"id": 1832736, "purpose": + "default", "virt_mode": "paravirt", "interfaces": [{"id": 1953278, "purpose": "vlan", "primary": false, "active": true, "ipam_address": "10.0.0.1/24", "label": "go-vlan-test-ipam", "vpc_id": null, "subnet_id": null, "ipv4": null, "ipv6": null, "ip_ranges": null}]}], "page": 1, "pages": 1, "results": 1}' @@ -609,6 +640,8 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: @@ -618,7 +651,7 @@ interactions: Content-Type: - application/json Expires: - - Thu, 27 Jun 2024 13:48:06 GMT + - Thu, 11 Jul 2024 18:31:43 GMT Pragma: - no-cache Strict-Transport-Security: @@ -653,7 +686,7 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/instances/60716324 + url: https://api.linode.com/v4beta/linode/instances/61338665 method: DELETE response: body: '{}' @@ -668,6 +701,8 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: @@ -679,7 +714,7 @@ interactions: Content-Type: - application/json Expires: - - Thu, 27 Jun 2024 13:48:07 GMT + - Thu, 11 Jul 2024 18:31:44 GMT Pragma: - no-cache Strict-Transport-Security: diff --git a/test/integration/fixtures/TestVLANs_List.yaml b/test/integration/fixtures/TestVLANs_List.yaml index 46bc24cb0..47a1bd565 100644 --- a/test/integration/fixtures/TestVLANs_List.yaml +++ b/test/integration/fixtures/TestVLANs_List.yaml @@ -46,18 +46,18 @@ interactions: {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-iad", "label": "Washington, DC", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "Kubernetes", - "Cloud Firewall", "Vlans", "VPCs", "Managed Databases", "Metadata", "Premium - Plans"], "status": "ok", "resolvers": {"ipv4": "139.144.192.62, 139.144.192.60, - 139.144.192.61, 139.144.192.53, 139.144.192.54, 139.144.192.67, 139.144.192.69, - 139.144.192.66, 139.144.192.52, 139.144.192.68", "ipv6": "1234::5678, + "Cloud Firewall", "Vlans", "VPCs", "Metadata", "Premium Plans", "Placement Group"], + "status": "ok", "resolvers": {"ipv4": "139.144.192.62, 139.144.192.60, 139.144.192.61, + 139.144.192.53, 139.144.192.54, 139.144.192.67, 139.144.192.69, 139.144.192.66, + 139.144.192.52, 139.144.192.68", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, - 1234::5678, 1234::5678, 1234::5678"}, - "placement_group_limits": {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": - 5}, "site_type": "core"}, {"id": "us-ord", "label": "Chicago, IL", "country": - "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", - "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", "Vlans", "VPCs", - "Managed Databases", "Metadata", "Premium Plans"], "status": "ok", "resolvers": + 1234::5678, 1234::5678"}, "placement_group_limits": + {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": + "core"}, {"id": "us-ord", "label": "Chicago, IL", "country": "us", "capabilities": + ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "GPU + Linodes", "Kubernetes", "Cloud Firewall", "Vlans", "VPCs", "Managed Databases", + "Metadata", "Premium Plans", "Placement Group"], "status": "ok", "resolvers": {"ipv4": "172.232.0.17, 172.232.0.16, 172.232.0.21, 172.232.0.13, 172.232.0.22, 172.232.0.9, 172.232.0.19, 172.232.0.20, 172.232.0.15, 172.232.0.18", "ipv6": "1234::5678, 1234::5678, 1234::5678, @@ -106,10 +106,10 @@ interactions: {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "se-sto", "label": "Stockholm, SE", "country": "se", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "Kubernetes", - "Cloud Firewall", "Vlans", "VPCs", "Metadata", "Premium Plans"], "status": "ok", - "resolvers": {"ipv4": "172.232.128.24, 172.232.128.26, 172.232.128.20, 172.232.128.22, - 172.232.128.25, 172.232.128.19, 172.232.128.23, 172.232.128.18, 172.232.128.21, - 172.232.128.27", "ipv6": "1234::5678, 1234::5678, + "Cloud Firewall", "Vlans", "VPCs", "Metadata", "Premium Plans", "Placement Group"], + "status": "ok", "resolvers": {"ipv4": "172.232.128.24, 172.232.128.26, 172.232.128.20, + 172.232.128.22, 172.232.128.25, 172.232.128.19, 172.232.128.23, 172.232.128.18, + 172.232.128.21, 172.232.128.27", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": @@ -156,8 +156,8 @@ interactions: 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-mia", "label": "Miami, FL", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "Kubernetes", "Cloud Firewall", "Vlans", - "VPCs", "Metadata", "Premium Plans"], "status": "ok", "resolvers": {"ipv4": - "172.233.160.34, 172.233.160.27, 172.233.160.30, 172.233.160.29, 172.233.160.32, + "VPCs", "Metadata", "Premium Plans", "Placement Group"], "status": "ok", "resolvers": + {"ipv4": "172.233.160.34, 172.233.160.27, 172.233.160.30, 172.233.160.29, 172.233.160.32, 172.233.160.28, 172.233.160.33, 172.233.160.26, 172.233.160.25, 172.233.160.31", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, @@ -183,75 +183,96 @@ interactions: 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "gb-lon", "label": + "London 2, UK", "country": "gb", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Kubernetes", "Cloud Firewall", "Vlans", "VPCs", "Metadata", + "Premium Plans"], "status": "ok", "resolvers": {"ipv4": "172.236.0.46, 172.236.0.50, + 172.236.0.47, 172.236.0.53, 172.236.0.52, 172.236.0.45, 172.236.0.49, 172.236.0.51, + 172.236.0.54, 172.236.0.48", "ipv6": "1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678"}, "placement_group_limits": + {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": + "core"}, {"id": "au-mel", "label": "Melbourne, AU", "country": "au", "capabilities": + ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud + Firewall", "Vlans", "VPCs", "Metadata", "Premium Plans"], "status": "ok", "resolvers": + {"ipv4": "172.236.32.23, 172.236.32.35, 172.236.32.30, 172.236.32.28, 172.236.32.32, + 172.236.32.33, 172.236.32.27, 172.236.32.37, 172.236.32.29, 172.236.32.34", + "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-central", "label": "Dallas, TX", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud Firewall", "Vlans", "Block - Storage Migrations", "Managed Databases", "Metadata"], "status": "ok", "resolvers": - {"ipv4": "72.14.179.5, 72.14.188.5, 173.255.199.5, 66.228.53.5, 96.126.122.5, - 96.126.124.5, 96.126.127.5, 198.58.107.5, 198.58.111.5, 23.239.24.5", "ipv6": - "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, - 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": + Storage Migrations", "Managed Databases", "Metadata", "Placement Group"], "status": + "ok", "resolvers": {"ipv4": "72.14.179.5, 72.14.188.5, 173.255.199.5, 66.228.53.5, + 96.126.122.5, 96.126.124.5, 96.126.127.5, 198.58.107.5, 198.58.111.5, 23.239.24.5", + "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-west", "label": "Fremont, CA", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud - Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata"], - "status": "ok", "resolvers": {"ipv4": "173.230.145.5, 173.230.147.5, 173.230.155.5, - 173.255.212.5, 173.255.219.5, 173.255.241.5, 173.255.243.5, 173.255.244.5, 74.207.241.5, - 74.207.242.5", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, - 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, - "placement_group_limits": {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": - 5}, "site_type": "core"}, {"id": "us-southeast", "label": "Atlanta, GA", "country": - "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", - "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", "Vlans", "Block - Storage Migrations", "Managed Databases", "Metadata"], "status": "ok", "resolvers": - {"ipv4": "74.207.231.5, 173.230.128.5, 173.230.129.5, 173.230.136.5, 173.230.140.5, - 66.228.59.5, 66.228.62.5, 50.116.35.5, 50.116.41.5, 23.239.18.5", "ipv6": "1234::5678, + Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata", + "Placement Group"], "status": "ok", "resolvers": {"ipv4": "173.230.145.5, 173.230.147.5, + 173.230.155.5, 173.255.212.5, 173.255.219.5, 173.255.241.5, 173.255.243.5, 173.255.244.5, + 74.207.241.5, 74.207.242.5", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, - 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": - 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-east", "label": + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, + "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-southeast", "label": + "Atlanta, GA", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", + "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata", "Placement + Group"], "status": "ok", "resolvers": {"ipv4": "74.207.231.5, 173.230.128.5, + 173.230.129.5, 173.230.136.5, 173.230.140.5, 66.228.59.5, 66.228.62.5, 50.116.35.5, + 50.116.41.5, 23.239.18.5", "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, + "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "us-east", "label": "Newark, NJ", "country": "us", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", - "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata"], "status": - "ok", "resolvers": {"ipv4": "66.228.42.5, 96.126.106.5, 50.116.53.5, 50.116.58.5, - 50.116.61.5, 50.116.62.5, 66.175.211.5, 97.107.133.4, 207.192.69.4, 207.192.69.5", - "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, - 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": - {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": - "core"}, {"id": "eu-west", "label": "London, UK", "country": "gb", "capabilities": - ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Kubernetes", "Cloud - Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata"], - "status": "ok", "resolvers": {"ipv4": "178.79.182.5, 176.58.107.5, 176.58.116.5, - 176.58.121.5, 151.236.220.5, 212.71.252.5, 212.71.253.5, 109.74.192.20, 109.74.193.20, - 109.74.194.20", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, + "Vlans", "Block Storage Migrations", "Managed Databases", "Metadata", "Placement + Group"], "status": "ok", "resolvers": {"ipv4": "66.228.42.5, 96.126.106.5, 50.116.53.5, + 50.116.58.5, 50.116.61.5, 50.116.62.5, 66.175.211.5, 97.107.133.4, 207.192.69.4, + 207.192.69.5", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": - 5}, "site_type": "core"}, {"id": "ap-south", "label": "Singapore, SG", "country": - "sg", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", - "Object Storage", "GPU Linodes", "Kubernetes", "Cloud Firewall", "Vlans", "Block - Storage Migrations", "Managed Databases", "Metadata"], "status": "ok", "resolvers": - {"ipv4": "139.162.11.5, 139.162.13.5, 139.162.14.5, 139.162.15.5, 139.162.16.5, - 139.162.21.5, 139.162.27.5, 103.3.60.18, 103.3.60.19, 103.3.60.20", "ipv6": - "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, - 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": - {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": - "core"}, {"id": "eu-central", "label": "Frankfurt, DE", "country": "de", "capabilities": - ["Linodes", "Backups", "NodeBalancers", "Block Storage", "Object Storage", "GPU - Linodes", "Kubernetes", "Cloud Firewall", "Vlans", "Block Storage Migrations", - "Managed Databases", "Metadata"], "status": "ok", "resolvers": {"ipv4": "139.162.130.5, - 139.162.131.5, 139.162.132.5, 139.162.133.5, 139.162.134.5, 139.162.135.5, 139.162.136.5, - 139.162.137.5, 139.162.138.5, 139.162.139.5", "ipv6": "1234::5678, 1234::5678, + 5}, "site_type": "core"}, {"id": "eu-west", "label": "London, UK", "country": + "gb", "capabilities": ["Linodes", "Backups", "NodeBalancers", "Block Storage", + "Kubernetes", "Cloud Firewall", "Vlans", "Block Storage Migrations", "Managed + Databases", "Metadata", "Placement Group"], "status": "ok", "resolvers": {"ipv4": + "178.79.182.5, 176.58.107.5, 176.58.116.5, 176.58.121.5, 151.236.220.5, 212.71.252.5, + 212.71.253.5, 109.74.192.20, 109.74.193.20, 109.74.194.20", "ipv6": "1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "ap-south", + "label": "Singapore, SG", "country": "sg", "capabilities": ["Linodes", "Backups", + "NodeBalancers", "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", + "Cloud Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", + "Metadata", "Placement Group"], "status": "ok", "resolvers": {"ipv4": "139.162.11.5, + 139.162.13.5, 139.162.14.5, 139.162.15.5, 139.162.16.5, 139.162.21.5, 139.162.27.5, + 103.3.60.18, 103.3.60.19, 103.3.60.20", "ipv6": "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": - 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "ap-northeast", - "label": "Tokyo, JP", "country": "jp", "capabilities": ["Linodes", "Backups", - "NodeBalancers", "Block Storage", "Kubernetes", "Cloud Firewall", "Vlans", "Block - Storage Migrations", "Managed Databases", "Metadata"], "status": "ok", "resolvers": - {"ipv4": "139.162.66.5, 139.162.67.5, 139.162.68.5, 139.162.69.5, 139.162.70.5, - 139.162.71.5, 139.162.72.5, 139.162.73.5, 139.162.74.5, 139.162.75.5", "ipv6": - "1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, - 1234::5678, 1234::5678, 1234::5678, 1234::5678"}, "placement_group_limits": - {"maximum_pgs_per_customer": 100, "maximum_linodes_per_pg": 5}, "site_type": - "core"}], "page": 1, "pages": 1, "results": 25}' + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "eu-central", + "label": "Frankfurt, DE", "country": "de", "capabilities": ["Linodes", "Backups", + "NodeBalancers", "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes", + "Cloud Firewall", "Vlans", "Block Storage Migrations", "Managed Databases", + "Metadata"], "status": "ok", "resolvers": {"ipv4": "139.162.130.5, 139.162.131.5, + 139.162.132.5, 139.162.133.5, 139.162.134.5, 139.162.135.5, 139.162.136.5, 139.162.137.5, + 139.162.138.5, 139.162.139.5", "ipv6": "1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": 100, + "maximum_linodes_per_pg": 5}, "site_type": "core"}, {"id": "ap-northeast", "label": + "Tokyo, JP", "country": "jp", "capabilities": ["Linodes", "Backups", "NodeBalancers", + "Block Storage", "Kubernetes", "Cloud Firewall", "Vlans", "Block Storage Migrations", + "Managed Databases", "Metadata"], "status": "ok", "resolvers": {"ipv4": "139.162.66.5, + 139.162.67.5, 139.162.68.5, 139.162.69.5, 139.162.70.5, 139.162.71.5, 139.162.72.5, + 139.162.73.5, 139.162.74.5, 139.162.75.5", "ipv6": "1234::5678, 1234::5678, + 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, 1234::5678, + 1234::5678, 1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer": + 100, "maximum_linodes_per_pg": 5}, "site_type": "core"}], "page": 1, "pages": + 1, "results": 27}' headers: Access-Control-Allow-Credentials: - "true" @@ -263,6 +284,8 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: @@ -272,7 +295,7 @@ interactions: Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:29:48 GMT + - Thu, 11 Jul 2024 18:29:53 GMT Pragma: - no-cache Strict-Transport-Security: @@ -289,10 +312,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" X-Xss-Protection: @@ -301,7 +321,7 @@ interactions: code: 200 duration: "" - request: - body: '{"region":"ap-west","type":"g6-nanode-1","label":"go-ins-test-list-0","root_pass":"GyY.8Z7lAwwZ\\t[bA@\u002651bjTA7/ZgH,enQ@z2H1:2654tp1G$$3;H[\u003e6IdEv43#$","image":"linode/debian9","interfaces":[{"ipam_address":"10.0.0.1/24","label":"go-vlan-test-list","purpose":"vlan"}],"firewall_id":501404,"booted":true}' + body: '{"region":"ap-west","type":"g6-nanode-1","label":"go-ins-test-list-0","root_pass":"281CG07@L^m/E=\u003e4oO8480snKo2\u003ePAhm77u\u003e]2F*qV!GsD?^{y-H\u0026zK51)gelNDx","image":"linode/debian9","interfaces":[{"ipam_address":"10.0.0.1/24","label":"go-vlan-test-list","purpose":"vlan"}],"firewall_id":653317,"booted":true}' form: {} headers: Accept: @@ -313,16 +333,16 @@ interactions: url: https://api.linode.com/v4beta/linode/instances method: POST response: - body: '{"id": 59542265, "label": "go-ins-test-list-0", "group": "", "status": + body: '{"id": 61338628, "label": "go-ins-test-list-0", "group": "", "status": "provisioning", "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", - "type": "g6-nanode-1", "ipv4": ["172.105.62.10"], "ipv6": "1234::5678/128", + "type": "g6-nanode-1", "ipv4": ["172.105.53.164"], "ipv6": "1234::5678/128", "image": "linode/debian9", "region": "ap-west", "specs": {"disk": 25600, "memory": 1024, "vcpus": 1, "gpus": 0, "transfer": 1000}, "alerts": {"cpu": 90, "network_in": 10, "network_out": 10, "transfer_quota": 80, "io": 10000}, "backups": {"enabled": true, "available": false, "schedule": {"day": null, "window": null}, "last_successful": null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": [], "host_uuid": - "4ecff3e7ba293f448d05aad89062f4677f5065a3", "has_user_data": false, "placement_group": - null}' + "7c02d8248cd598c0fbe8286e88e0299137474f35", "has_user_data": false, "placement_group": + null, "lke_cluster_id": null}' headers: Access-Control-Allow-Credentials: - "true" @@ -334,18 +354,20 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive Content-Length: - - "759" + - "784" Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:29:48 GMT + - Thu, 11 Jul 2024 18:29:54 GMT Pragma: - no-cache Strict-Transport-Security: @@ -360,10 +382,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "10" X-Xss-Protection: @@ -372,7 +391,7 @@ interactions: code: 200 duration: "" - request: - body: '{"region":"ap-west","type":"g6-nanode-1","label":"go-ins-test-list-1","root_pass":"O3A@k=@hA7VJbMBg*}8-42\u003c4=W52xE,Ol1-},RxFVs''9N:Ng-09f~l43m8qwDf5u","image":"linode/debian9","interfaces":[{"ipam_address":"10.0.0.1/24","label":"go-vlan-test-list","purpose":"vlan"}],"firewall_id":501404,"booted":true}' + body: '{"region":"ap-west","type":"g6-nanode-1","label":"go-ins-test-list-1","root_pass":"24)5/6qYTDR3^)WMK`pb9UtIZ7O8a3c0^hQc2c''\u003ckc8(@8UL*VrxvCeo?^4\u003e14/[","image":"linode/debian9","interfaces":[{"ipam_address":"10.0.0.1/24","label":"go-vlan-test-list","purpose":"vlan"}],"firewall_id":653317,"booted":true}' form: {} headers: Accept: @@ -384,16 +403,16 @@ interactions: url: https://api.linode.com/v4beta/linode/instances method: POST response: - body: '{"id": 59542266, "label": "go-ins-test-list-1", "group": "", "status": + body: '{"id": 61338629, "label": "go-ins-test-list-1", "group": "", "status": "provisioning", "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", - "type": "g6-nanode-1", "ipv4": ["172.105.62.51"], "ipv6": "1234::5678/128", + "type": "g6-nanode-1", "ipv4": ["172.105.53.195"], "ipv6": "1234::5678/128", "image": "linode/debian9", "region": "ap-west", "specs": {"disk": 25600, "memory": 1024, "vcpus": 1, "gpus": 0, "transfer": 1000}, "alerts": {"cpu": 90, "network_in": 10, "network_out": 10, "transfer_quota": 80, "io": 10000}, "backups": {"enabled": true, "available": false, "schedule": {"day": null, "window": null}, "last_successful": null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": [], "host_uuid": - "2e178642a58dc717a260fc2f07a0f9ebec105e2b", "has_user_data": false, "placement_group": - null}' + "1264a03cb72812034697c13e764ad94a0dabc6fa", "has_user_data": false, "placement_group": + null, "lke_cluster_id": null}' headers: Access-Control-Allow-Credentials: - "true" @@ -405,18 +424,20 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive Content-Length: - - "759" + - "784" Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:29:49 GMT + - Thu, 11 Jul 2024 18:29:55 GMT Pragma: - no-cache Strict-Transport-Security: @@ -431,10 +452,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "10" X-Xss-Protection: @@ -452,19 +470,19 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/instances/59542265 + url: https://api.linode.com/v4beta/linode/instances/61338628 method: GET response: - body: '{"id": 59542265, "label": "go-ins-test-list-0", "group": "", "status": + body: '{"id": 61338628, "label": "go-ins-test-list-0", "group": "", "status": "provisioning", "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", - "type": "g6-nanode-1", "ipv4": ["172.105.62.10"], "ipv6": "1234::5678/128", + "type": "g6-nanode-1", "ipv4": ["172.105.53.164"], "ipv6": "1234::5678/128", "image": "linode/debian9", "region": "ap-west", "specs": {"disk": 25600, "memory": 1024, "vcpus": 1, "gpus": 0, "transfer": 1000}, "alerts": {"cpu": 90, "network_in": 10, "network_out": 10, "transfer_quota": 80, "io": 10000}, "backups": {"enabled": true, "available": false, "schedule": {"day": "Scheduling", "window": "Scheduling"}, "last_successful": null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": - [], "host_uuid": "4ecff3e7ba293f448d05aad89062f4677f5065a3", "has_user_data": - false, "placement_group": null}' + [], "host_uuid": "7c02d8248cd598c0fbe8286e88e0299137474f35", "has_user_data": + false, "placement_group": null, "lke_cluster_id": null}' headers: Access-Control-Allow-Credentials: - "true" @@ -476,18 +494,20 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive Content-Length: - - "775" + - "800" Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:30:04 GMT + - Thu, 11 Jul 2024 18:30:10 GMT Pragma: - no-cache Strict-Transport-Security: @@ -503,10 +523,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" X-Xss-Protection: @@ -524,19 +541,19 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/instances/59542265 + url: https://api.linode.com/v4beta/linode/instances/61338628 method: GET response: - body: '{"id": 59542265, "label": "go-ins-test-list-0", "group": "", "status": + body: '{"id": 61338628, "label": "go-ins-test-list-0", "group": "", "status": "booting", "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", - "type": "g6-nanode-1", "ipv4": ["172.105.62.10"], "ipv6": "1234::5678/128", + "type": "g6-nanode-1", "ipv4": ["172.105.53.164"], "ipv6": "1234::5678/128", "image": "linode/debian9", "region": "ap-west", "specs": {"disk": 25600, "memory": 1024, "vcpus": 1, "gpus": 0, "transfer": 1000}, "alerts": {"cpu": 90, "network_in": 10, "network_out": 10, "transfer_quota": 80, "io": 10000}, "backups": {"enabled": true, "available": false, "schedule": {"day": "Scheduling", "window": "Scheduling"}, "last_successful": null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": - [], "host_uuid": "4ecff3e7ba293f448d05aad89062f4677f5065a3", "has_user_data": - false, "placement_group": null}' + [], "host_uuid": "7c02d8248cd598c0fbe8286e88e0299137474f35", "has_user_data": + false, "placement_group": null, "lke_cluster_id": null}' headers: Access-Control-Allow-Credentials: - "true" @@ -548,18 +565,20 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive Content-Length: - - "770" + - "795" Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:30:19 GMT + - Thu, 11 Jul 2024 18:30:25 GMT Pragma: - no-cache Strict-Transport-Security: @@ -575,10 +594,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" X-Xss-Protection: @@ -596,19 +612,19 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/instances/59542265 + url: https://api.linode.com/v4beta/linode/instances/61338628 method: GET response: - body: '{"id": 59542265, "label": "go-ins-test-list-0", "group": "", "status": + body: '{"id": 61338628, "label": "go-ins-test-list-0", "group": "", "status": "running", "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", - "type": "g6-nanode-1", "ipv4": ["172.105.62.10"], "ipv6": "1234::5678/128", + "type": "g6-nanode-1", "ipv4": ["172.105.53.164"], "ipv6": "1234::5678/128", "image": "linode/debian9", "region": "ap-west", "specs": {"disk": 25600, "memory": 1024, "vcpus": 1, "gpus": 0, "transfer": 1000}, "alerts": {"cpu": 90, "network_in": 10, "network_out": 10, "transfer_quota": 80, "io": 10000}, "backups": {"enabled": true, "available": false, "schedule": {"day": "Scheduling", "window": "Scheduling"}, "last_successful": null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": - [], "host_uuid": "4ecff3e7ba293f448d05aad89062f4677f5065a3", "has_user_data": - false, "placement_group": null}' + [], "host_uuid": "7c02d8248cd598c0fbe8286e88e0299137474f35", "has_user_data": + false, "placement_group": null, "lke_cluster_id": null}' headers: Access-Control-Allow-Credentials: - "true" @@ -620,18 +636,20 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive Content-Length: - - "770" + - "795" Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:30:34 GMT + - Thu, 11 Jul 2024 18:30:40 GMT Pragma: - no-cache Strict-Transport-Security: @@ -647,10 +665,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" X-Xss-Protection: @@ -668,19 +683,19 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/instances/59542266 + url: https://api.linode.com/v4beta/linode/instances/61338629 method: GET response: - body: '{"id": 59542266, "label": "go-ins-test-list-1", "group": "", "status": + body: '{"id": 61338629, "label": "go-ins-test-list-1", "group": "", "status": "running", "created": "2018-01-02T03:04:05", "updated": "2018-01-02T03:04:05", - "type": "g6-nanode-1", "ipv4": ["172.105.62.51"], "ipv6": "1234::5678/128", + "type": "g6-nanode-1", "ipv4": ["172.105.53.195"], "ipv6": "1234::5678/128", "image": "linode/debian9", "region": "ap-west", "specs": {"disk": 25600, "memory": 1024, "vcpus": 1, "gpus": 0, "transfer": 1000}, "alerts": {"cpu": 90, "network_in": 10, "network_out": 10, "transfer_quota": 80, "io": 10000}, "backups": {"enabled": true, "available": false, "schedule": {"day": "Scheduling", "window": "Scheduling"}, "last_successful": null}, "hypervisor": "kvm", "watchdog_enabled": true, "tags": - [], "host_uuid": "2e178642a58dc717a260fc2f07a0f9ebec105e2b", "has_user_data": - false, "placement_group": null}' + [], "host_uuid": "1264a03cb72812034697c13e764ad94a0dabc6fa", "has_user_data": + false, "placement_group": null, "lke_cluster_id": null}' headers: Access-Control-Allow-Credentials: - "true" @@ -692,18 +707,20 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: - keep-alive Content-Length: - - "770" + - "795" Content-Security-Policy: - default-src 'none' Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:30:49 GMT + - Thu, 11 Jul 2024 18:30:55 GMT Pragma: - no-cache Strict-Transport-Security: @@ -719,10 +736,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" X-Xss-Protection: @@ -742,11 +756,11 @@ interactions: - linodego/dev https://github.com/linode/linodego X-Filter: - '{"label": "go-vlan-test-list"}' - url: https://api.linode.com/v4beta/networking/vlans + url: https://api.linode.com/v4beta/networking/vlans?page=1 method: GET response: body: '{"data": [{"region": "ap-west", "label": "go-vlan-test-list", "linodes": - [59542265, 59542266], "created": "2018-01-02T03:04:05"}], "page": 1, "pages": + [61338628, 61338629], "created": "2018-01-02T03:04:05"}], "page": 1, "pages": 1, "results": 1}' headers: Access-Control-Allow-Credentials: @@ -759,6 +773,8 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: @@ -770,7 +786,7 @@ interactions: Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:30:50 GMT + - Thu, 11 Jul 2024 18:30:56 GMT Pragma: - no-cache Strict-Transport-Security: @@ -786,10 +802,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" X-Xss-Protection: @@ -807,7 +820,7 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/instances/59542266 + url: https://api.linode.com/v4beta/linode/instances/61338629 method: DELETE response: body: '{}' @@ -822,6 +835,8 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: @@ -833,7 +848,7 @@ interactions: Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:30:50 GMT + - Thu, 11 Jul 2024 18:30:56 GMT Pragma: - no-cache Strict-Transport-Security: @@ -848,10 +863,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" X-Xss-Protection: @@ -869,7 +881,7 @@ interactions: - application/json User-Agent: - linodego/dev https://github.com/linode/linodego - url: https://api.linode.com/v4beta/linode/instances/59542265 + url: https://api.linode.com/v4beta/linode/instances/61338628 method: DELETE response: body: '{}' @@ -884,6 +896,8 @@ interactions: - '*' Access-Control-Expose-Headers: - X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Status + Akamai-Internal-Account: + - '*' Cache-Control: - max-age=0, no-cache, no-store Connection: @@ -895,7 +909,7 @@ interactions: Content-Type: - application/json Expires: - - Fri, 31 May 2024 17:30:50 GMT + - Thu, 11 Jul 2024 18:30:57 GMT Pragma: - no-cache Strict-Transport-Security: @@ -910,10 +924,7 @@ interactions: - DENY - DENY X-Oauth-Scopes: - - account:read_write databases:read_write domains:read_write events:read_write - firewall:read_write images:read_write ips:read_write linodes:read_write lke:read_write - longview:read_write nodebalancers:read_write object_storage:read_write stackscripts:read_write - volumes:read_write vpc:read_write + - '*' X-Ratelimit-Limit: - "400" X-Xss-Protection: diff --git a/types.go b/types.go index 1d8341367..bd9b801c9 100644 --- a/types.go +++ b/types.go @@ -2,10 +2,7 @@ package linodego import ( "context" - "fmt" "net/url" - - "github.com/go-resty/resty/v2" ) // LinodeType represents a linode type object @@ -62,31 +59,11 @@ const ( ClassGPU LinodeTypeClass = "gpu" ) -// LinodeTypesPagedResponse represents a linode types API response for listing -type LinodeTypesPagedResponse struct { - *PageOptions - Data []LinodeType `json:"data"` -} - -func (*LinodeTypesPagedResponse) endpoint(_ ...any) string { - return "linode/types" -} - -func (resp *LinodeTypesPagedResponse) castResult(r *resty.Request, e string) (int, int, error) { - res, err := coupleAPIErrors(r.SetResult(LinodeTypesPagedResponse{}).Get(e)) - if err != nil { - return 0, 0, err - } - castedRes := res.Result().(*LinodeTypesPagedResponse) - resp.Data = append(resp.Data, castedRes.Data...) - return castedRes.Pages, castedRes.Results, nil -} - // ListTypes lists linode types. This endpoint is cached by default. func (c *Client) ListTypes(ctx context.Context, opts *ListOptions) ([]LinodeType, error) { - response := LinodeTypesPagedResponse{} + e := "linode/types" - endpoint, err := generateListCacheURL(response.endpoint(), opts) + endpoint, err := generateListCacheURL(e, opts) if err != nil { return nil, err } @@ -95,32 +72,31 @@ func (c *Client) ListTypes(ctx context.Context, opts *ListOptions) ([]LinodeType return result.([]LinodeType), nil } - err = c.listHelper(ctx, &response, opts) + response, err := getPaginatedResults[LinodeType](ctx, c, e, opts) if err != nil { return nil, err } - c.addCachedResponse(endpoint, response.Data, &cacheExpiryTime) + c.addCachedResponse(endpoint, response, &cacheExpiryTime) - return response.Data, nil + return response, nil } // GetType gets the type with the provided ID. This endpoint is cached by default. func (c *Client) GetType(ctx context.Context, typeID string) (*LinodeType, error) { - e := fmt.Sprintf("linode/types/%s", url.PathEscape(typeID)) + e := formatAPIPath("linode/types/%s", url.PathEscape(typeID)) if result := c.getCachedResponse(e); result != nil { result := result.(LinodeType) return &result, nil } - req := c.R(ctx).SetResult(LinodeType{}) - r, err := coupleAPIErrors(req.Get(e)) + response, err := doGETRequest[LinodeType](ctx, c, e) if err != nil { return nil, err } - c.addCachedResponse(e, r.Result(), &cacheExpiryTime) + c.addCachedResponse(e, response, &cacheExpiryTime) - return r.Result().(*LinodeType), nil + return response, nil } diff --git a/vlans.go b/vlans.go index 7f6433b0d..147326379 100644 --- a/vlans.go +++ b/vlans.go @@ -6,7 +6,6 @@ import ( "fmt" "time" - "github.com/go-resty/resty/v2" "github.com/linode/linodego/internal/parseabletime" ) @@ -36,36 +35,10 @@ func (v *VLAN) UnmarshalJSON(b []byte) error { return nil } -// VLANsPagedResponse represents a Linode API response for listing of VLANs -type VLANsPagedResponse struct { - *PageOptions - Data []VLAN `json:"data"` -} - -func (VLANsPagedResponse) endpoint(_ ...any) string { - return "networking/vlans" -} - -func (resp *VLANsPagedResponse) castResult(r *resty.Request, e string) (int, int, error) { - res, err := coupleAPIErrors(r.SetResult(VLANsPagedResponse{}).Get(e)) - if err != nil { - return 0, 0, err - } - castedRes := res.Result().(*VLANsPagedResponse) - resp.Data = append(resp.Data, castedRes.Data...) - return castedRes.Pages, castedRes.Results, nil -} - // ListVLANs returns a paginated list of VLANs func (c *Client) ListVLANs(ctx context.Context, opts *ListOptions) ([]VLAN, error) { - response := VLANsPagedResponse{} - - err := c.listHelper(ctx, &response, opts) - if err != nil { - return nil, err - } - - return response.Data, nil + response, err := getPaginatedResults[VLAN](ctx, c, "networking/vlans", opts) + return response, err } // GetVLANIPAMAddress returns the IPAM Address for a given VLAN Label as a string (10.0.0.1/24)