Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions instance_disks.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,14 @@ type InstanceDiskCreateOptions struct {
Label string `json:"label"`
Size int `json:"size"`

// Image is optional, but requires RootPass if provided
Image string `json:"image,omitempty"`
RootPass string `json:"root_pass,omitempty"`
// Image is optional, but requires at least one of RootPass, AuthorizedUsers, or AuthorizedKeys if provided
Image string `json:"image,omitempty"`

RootPass string `json:"root_pass,omitempty"`
AuthorizedKeys []string `json:"authorized_keys,omitempty"`
AuthorizedUsers []string `json:"authorized_users,omitempty"`

Filesystem string `json:"filesystem,omitempty"`
AuthorizedKeys []string `json:"authorized_keys,omitempty"`
AuthorizedUsers []string `json:"authorized_users,omitempty"`
StackscriptID int `json:"stackscript_id,omitempty"`
StackscriptData map[string]string `json:"stackscript_data,omitempty"`
}
Expand Down
38 changes: 24 additions & 14 deletions instances.go
Original file line number Diff line number Diff line change
Expand Up @@ -178,16 +178,21 @@ type InstancePasswordResetOptions struct {

// InstanceCreateOptions require only Region and Type
type InstanceCreateOptions struct {
Region string `json:"region"`
Type string `json:"type"`
Label string `json:"label,omitempty"`
RootPass string `json:"root_pass,omitempty"`
AuthorizedKeys []string `json:"authorized_keys,omitempty"`
AuthorizedUsers []string `json:"authorized_users,omitempty"`
StackScriptID int `json:"stackscript_id,omitempty"`
StackScriptData map[string]string `json:"stackscript_data,omitempty"`
BackupID int `json:"backup_id,omitempty"`
Image string `json:"image,omitempty"`
Region string `json:"region"`
Type string `json:"type"`
Label string `json:"label,omitempty"`

StackScriptID int `json:"stackscript_id,omitempty"`
StackScriptData map[string]string `json:"stackscript_data,omitempty"`
BackupID int `json:"backup_id,omitempty"`

// Image is optional, but requires at least one of RootPass, AuthorizedUsers, or AuthorizedKeys if provided
Image string `json:"image,omitempty"`

RootPass string `json:"root_pass,omitempty"`
AuthorizedKeys []string `json:"authorized_keys,omitempty"`
AuthorizedUsers []string `json:"authorized_users,omitempty"`

BackupsEnabled bool `json:"backups_enabled,omitempty"`
PrivateIP bool `json:"private_ip,omitempty"`
NetworkHelper *bool `json:"network_helper,omitempty"`
Expand Down Expand Up @@ -216,6 +221,8 @@ type InstanceCreateOptions struct {
IPv4 []string `json:"ipv4,omitempty"`

MaintenancePolicy *string `json:"maintenance_policy,omitempty"`
Kernel *string `json:"kernel,omitzero"`
BootSize *int `json:"boot_size,omitzero"`
}

// InstanceCreatePlacementGroupOptions represents the placement group
Expand Down Expand Up @@ -503,10 +510,13 @@ func (c *Client) RebootInstance(ctx context.Context, linodeID int, configID int)

// InstanceRebuildOptions is a struct representing the options to send to the rebuild linode endpoint
type InstanceRebuildOptions struct {
Image string `json:"image,omitempty"`
RootPass string `json:"root_pass,omitempty"`
AuthorizedKeys []string `json:"authorized_keys,omitempty"`
AuthorizedUsers []string `json:"authorized_users,omitempty"`
// Image is the image to deploy when rebuilding the Linode
Image string `json:"image,omitempty"`

RootPass string `json:"root_pass,omitempty"`
AuthorizedKeys []string `json:"authorized_keys,omitempty"`
AuthorizedUsers []string `json:"authorized_users,omitempty"`

StackScriptID int `json:"stackscript_id,omitempty"`
StackScriptData map[string]string `json:"stackscript_data,omitempty"`
Booted *bool `json:"booted,omitempty"`
Expand Down
1,904 changes: 1,904 additions & 0 deletions test/integration/fixtures/TestIAM_GetIOReadyForAttachedDetachedVolume.yaml

Large diffs are not rendered by default.

2,034 changes: 2,034 additions & 0 deletions test/integration/fixtures/TestIAM_GetIOReadyForClonedVolume.yaml

Large diffs are not rendered by default.

742 changes: 742 additions & 0 deletions test/integration/fixtures/TestIAM_GetIOReadyForNotAttachedVolume.yaml

Large diffs are not rendered by default.

2,055 changes: 2,055 additions & 0 deletions test/integration/fixtures/TestIAM_GetIOReadyForResizedVolume.yaml

Large diffs are not rendered by default.

2,062 changes: 2,062 additions & 0 deletions test/integration/fixtures/TestIAM_GetIOReadyForUpdatedVolume.yaml

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
---
version: 1
interactions:
- 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?page=1
method: GET
response:
body: '{"data": [{"id": "pl-labkrk-2", "label": "Krakow, PL", "country": "pl",
"capabilities": ["Linodes", "Block Storage Encryption", "Disk Encryption", "Backups",
"NodeBalancers", "Block Storage", "Object Storage", "GPU Linodes", "Kubernetes",
"Cloud Firewall", "Vlans", "VPCs", "VPC Dual Stack", "VPC IPv6 Stack", "Block
Storage Migrations", "Managed Databases", "Metadata", "Premium Plans", "Placement
Group", "StackScripts", "NETINT Quadra T1U", "Maintenance Policy", "Linode Interfaces",
"ACLP Logs Datacenter LKE-E"], "monitors": {"alerts": ["Linodes", "Managed Databases",
"NodeBalancers"], "metrics": ["Linodes", "Managed Databases", "NodeBalancers"]},
"status": "ok", "resolvers": {"ipv4": "172.24.224.240,172.24.224.229,172.24.224.236,172.24.224.238,172.24.224.235,172.24.224.241,172.24.224.230,172.24.224.239,172.24.224.233,172.24.224.234",
"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": null, "maximum_linodes_per_pg":
5, "maximum_linodes_per_flexible_pg": 5}, "site_type": "core"}, {"id": "us-labedgeeat-2",
"label": "East Wenatchee, US", "country": "us", "capabilities": ["Linodes",
"Disk Encryption", "Cloud Firewall", "Vlans", "VPCs", "VPC Dual Stack", "VPC
IPv6 Stack", "Metadata", "Distributed Plans", "Linode Interfaces"], "monitors":
{"alerts": [], "metrics": []}, "status": "ok", "resolvers": {"ipv4": "173.223.100.53,173.223.101.53",
"ipv6": "1234::5678,1234::5678"}, "placement_group_limits": {"maximum_pgs_per_customer":
0, "maximum_linodes_per_pg": 0, "maximum_linodes_per_flexible_pg": 0}, "site_type":
"distributed"}, {"id": "us-labedgeeat-3", "label": "East Wenatchee, US", "country":
"us", "capabilities": ["Linodes", "Disk Encryption", "Cloud Firewall", "Metadata",
"Distributed Plans"], "monitors": {"alerts": [], "metrics": []}, "status": "ok",
"resolvers": {"ipv4": "173.223.100.53,173.223.101.53", "ipv6": "1234::5678,1234::5678"},
"placement_group_limits": {"maximum_pgs_per_customer": 0, "maximum_linodes_per_pg":
0, "maximum_linodes_per_flexible_pg": 0}, "site_type": "distributed"}], "page":
1, "pages": 1, "results": 3}'
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
Connection:
- keep-alive
Content-Security-Policy:
- default-src 'none'
Content-Type:
- application/json
Server:
- nginx
Strict-Transport-Security:
- max-age=31536000
Vary:
- Authorization, X-Filter
- Authorization, X-Filter
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: '{"region":"pl-labkrk-2","type":"g6-nanode-1","label":"go-test-ins-icvqdq302467","image":"linode/debian12","kernel":"linode/6.15.7-x86_64-linode169","boot_size":9000}'
form: {}
headers:
Accept:
- application/json
Content-Type:
- application/json
User-Agent:
- linodego/dev https://github.com/linode/linodego
url: https://api.linode.com/v4beta/linode/instances
method: POST
response:
body: '{"errors": [{"reason": "Must provide valid root_pass, authorized_keys,
or authorized_users"}]}'
headers:
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:
- '*'
Akamai-Internal-Account:
- '*'
Connection:
- keep-alive
Content-Length:
- "94"
Content-Type:
- application/json
Server:
- nginx
X-Accepted-Oauth-Scopes:
- linodes:read_write
X-Frame-Options:
- DENY
X-Oauth-Scopes:
- '*'
X-Ratelimit-Limit:
- "8"
status: 400 BAD REQUEST
code: 400
duration: ""
Loading
Loading