Skip to content
Open
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
9 changes: 5 additions & 4 deletions instance_disks.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,13 @@ 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 or AuthorizedKeys if provided
Image string `json:"image,omitempty"`

RootPass string `json:"root_pass,omitempty"`
AuthorizedKeys []string `json:"authorized_keys,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
36 changes: 23 additions & 13 deletions instances.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,16 +184,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"`

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 is optional, but requires at least one of RootPass or AuthorizedKeys if provided
Image string `json:"image,omitempty"`

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

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

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

// InstanceCreatePlacementGroupOptions represents the placement group
Expand Down Expand Up @@ -513,9 +520,12 @@ 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"`
// Image is optional, but requires at least one of RootPass 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"`
StackScriptID int `json:"stackscript_id,omitempty"`
StackScriptData map[string]string `json:"stackscript_data,omitempty"`
Expand Down
8 changes: 7 additions & 1 deletion test/unit/instance_disks_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"testing"

"github.com/jarcoal/httpmock"
"github.com/linode/linodego"
"github.com/stretchr/testify/assert"
)
Expand Down Expand Up @@ -85,9 +86,14 @@ func TestInstanceDisk_Create(t *testing.T) {
Label: "New Disk",
Size: 20480,
Filesystem: "ext4",
RootPass: "@S3cur3p@ssw0rd",
}

base.MockPost("linode/instances/123/disks", fixtureData)
httpmock.RegisterRegexpResponder(
"POST",
mockRequestURL(t, "/linode/instances/123/disks"),
mockRequestBodyValidate(t, createOptions, fixtureData),
)

disk, err := base.Client.CreateInstanceDisk(context.Background(), 123, createOptions)
assert.NoError(t, err)
Expand Down
17 changes: 14 additions & 3 deletions test/unit/instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -180,9 +180,15 @@ func TestInstance_Create(t *testing.T) {
Image: "linode/ubuntu22.04",
RootPass: "securepassword",
MaintenancePolicy: linodego.Pointer("linode/migrate"),
Kernel: linodego.Pointer("linode/6.15.7-x86_64-linode169"),
BootSize: linodego.Pointer(9000),
}

base.MockPost("linode/instances", fixtureData)
httpmock.RegisterRegexpResponder(
"POST",
mockRequestURL(t, "/linode/instances"),
mockRequestBodyValidate(t, createOptions, fixtureData),
)

instance, err := base.Client.CreateInstance(context.Background(), createOptions)
assert.NoError(t, err)
Expand Down Expand Up @@ -303,10 +309,15 @@ func TestInstance_Rebuild(t *testing.T) {
defer base.TearDown(t)

rebuildOptions := linodego.InstanceRebuildOptions{
Image: "linode/ubuntu22.04",
RootPass: "@S3cur3p@ssw0rd",
Image: "linode/ubuntu22.04",
}

base.MockPost("linode/instances/123/rebuild", fixtureData)
httpmock.RegisterRegexpResponder(
"POST",
mockRequestURL(t, "/linode/instances/123/rebuild"),
mockRequestBodyValidate(t, rebuildOptions, fixtureData),
)

instance, err := base.Client.RebuildInstance(context.Background(), 123, rebuildOptions)
assert.NoError(t, err)
Expand Down
Loading