Skip to content
Draft
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
14 changes: 6 additions & 8 deletions internal/fluidstack/v1/instancetype.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,13 @@ func (c *FluidStackClient) GetLocations(ctx context.Context, _ v1.GetLocationsAr
}

var locations []v1.Location
if resp != nil {
for _, capacity := range resp {
location := v1.Location{
Name: capacity.Name,
Description: capacity.Name,
Available: capacity.Capacity > 0,
}
locations = append(locations, location)
for _, capacity := range resp {
location := v1.Location{
Name: capacity.Name,
Description: capacity.Name,
Available: capacity.Capacity > 0,
}
locations = append(locations, location)
}

return locations, nil
Expand Down
34 changes: 11 additions & 23 deletions pkg/v1/capabilities.go
Original file line number Diff line number Diff line change
@@ -1,37 +1,25 @@
package v1

import "slices"

type Capability string

type Capabilities []Capability

func (c Capabilities) IsCapable(cc Capability) bool {
for _, capability := range c {
if capability == cc {
return true
}
}
return false
return slices.Contains(c, cc)
}

const (
CapabilityCreateInstance Capability = "create-instance"
CapabilityCreateIdempotentInstance Capability = "create-instance-idempotent"
CapabilityCreateTerminateInstance Capability = "create-terminate-instance"
CapabilityInstanceUserData Capability = "instance-userdata" // specify user data when creating an instance in CreateInstanceAttrs // should be in instance type
CapabilityMachineImage Capability = "machine-image"
CapabilityModifyFirewall Capability = "modify-firewall"
CapabilityRebootInstance Capability = "reboot-instance"
CapabilityResizeInstanceVolume Capability = "resize-instance-volume"
CapabilityStopStartInstance Capability = "stop-start-instance"
CapabilityTags Capability = "tags"
CapabilityTerminateInstance Capability = "terminate-instance"
)

const (
CapabilityCreateTerminateInstance Capability = "create-terminate-instance"
CapabilityInstanceUserData Capability = "instance-userdata" // specify user data when creating an instance in CreateInstanceAttrs // should be in instance type
)

const CapabilityTags Capability = "tags"

const CapabilityRebootInstance Capability = "reboot-instance"

const CapabilityResizeInstanceVolume Capability = "resize-instance-volume"

const CapabilityStopStartInstance Capability = "stop-start-instance"

const CapabilityMachineImage Capability = "machine-image"

const CapabilityModifyFirewall Capability = "modify-firewall"
56 changes: 37 additions & 19 deletions pkg/v1/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,33 +13,51 @@ const (

type CloudProviderID string // aws, gcp, azure, etc.

type CloudAPI interface {
GetAPIType() APIType
GetCapabilities(ctx context.Context) (Capabilities, error)
GetCloudProviderID() CloudProviderID
type CloudClient interface {
CloudCredential
ImageManager
InstanceManager
LocationManager
NetworkManager
}

type CloudCredential interface {
MakeClient(ctx context.Context, location string) (CloudClient, error)
GetTenantID() (string, error)
GetReferenceID() string
CloudAPI
CloudProvider
}

type CloudBase interface {
CloudCreateTerminateInstance
type CloudProvider interface {
GetAPIType() APIType
GetCapabilities(ctx context.Context) (Capabilities, error)
GetCloudProviderID() CloudProviderID
}

type CloudClient interface {
CloudCredential
CloudBase
CloudQuota
CloudRebootInstance
CloudStopStartInstance
CloudResizeInstanceVolume
CloudMachineImage
CloudChangeInstanceType
CloudModifyFirewall
CloudInstanceTags
UpdateHandler
type ImageManager interface {
ImageGetter
}
type InstanceManager interface {
InstanceCreator
InstanceTerminator
InstanceGetter
InstanceLister
InstanceRebooter
InstanceStopStarter
InstanceTypeChanger
InstanceTagsUpdater
InstanceUpdateHandler
InstanceTypeGetter
InstanceTypePollTimeGetter
InstanceTypeQuotaGetter
InstanceVolumeResizer
}

type LocationManager interface {
LocationGetter
}

type NetworkManager interface {
NetworkFirewallModifier
NetworkSecurityGroupModifier
}
18 changes: 9 additions & 9 deletions pkg/v1/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,15 @@ import (
"github.com/brevdev/cloud/pkg/ssh"
)

type CloudMachineImage interface {
type Image struct {
ID string
Architecture string
Description string
Name string
CreatedAt time.Time
}

type ImageGetter interface {
GetImages(ctx context.Context, args GetImageArgs) ([]Image, error)
}

Expand All @@ -21,14 +29,6 @@ type GetImageArgs struct {
ImageIDs []string
}

type Image struct {
ID string
Architecture string
Description string
Name string
CreatedAt time.Time
}

func ValidateInstanceImage(ctx context.Context, instance Instance, privateKey string) error {
sshClient, err := connectToInstance(ctx, instance, privateKey)
if err != nil {
Expand Down
Loading
Loading