diff --git a/instance_disks.go b/instance_disks.go index 176044b61..b02b32cc0 100644 --- a/instance_disks.go +++ b/instance_disks.go @@ -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"` diff --git a/instances.go b/instances.go index 31796010a..08a91ec25 100644 --- a/instances.go +++ b/instances.go @@ -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"` @@ -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 @@ -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"` diff --git a/test/unit/instance_disks_test.go b/test/unit/instance_disks_test.go index d960e5471..01a9f3d19 100644 --- a/test/unit/instance_disks_test.go +++ b/test/unit/instance_disks_test.go @@ -4,6 +4,7 @@ import ( "context" "testing" + "github.com/jarcoal/httpmock" "github.com/linode/linodego" "github.com/stretchr/testify/assert" ) @@ -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) diff --git a/test/unit/instance_test.go b/test/unit/instance_test.go index f10e08d6f..26eebc2e5 100644 --- a/test/unit/instance_test.go +++ b/test/unit/instance_test.go @@ -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) @@ -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)