api

package module
v1.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 12, 2026 License: MIT Imports: 20 Imported by: 0

README

rackcorp-api-go

Documentation

Index

Constants

View Source
const (
	ServerClassBudget      = "BUDGET"
	ServerClassPerformance = "PERFORMANCE"
	ServerClassStorage     = "STORAGE"
	ServerClassTraffic     = "TRAFFIC"

	StorageTypeMagnetic = "MAGNETIC"
	StorageTypeSSD      = "SSD"

	FirewallPolicyDirectionAny      = "ANY"
	FirewallPolicyDirectionInbound  = "INBOUND"
	FirewallPolicyDirectionOutbound = "OUTBOUND"

	FirewallPolicyTypeAllow    = "ALLOW"
	FirewallPolicyTypeDeny     = "DENY"
	FirewallPolicyTypeDisabled = "DISABLED"
	FirewallPolicyTypeReject   = "REJECT"
)
View Source
const (
	TransactionObjectTypeDevice = "DEVICE"

	TransactionStatusCommenced = "COMMENCED"
	TransactionStatusCompleted = "COMPLETED"
	TransactionStatusPending   = "PENDING"

	TransactionTypeCancel        = "CANCEL"
	TransactionTypeCloseVNC      = "CLOSEVNC"
	TransactionTypeForceShutdown = "FORCESHUTDOWN"
	TransactionTypeOpenVNC       = "OPENVNC" // data parameter contains public IP that allows VNC
	TransactionTypeRefreshConfig = "REFRESHCONFIG"
	TransactionTypeSafeShutdown  = "SAFESHUTDOWN"
	TransactionTypeShutdown      = "SHUTDOWN"
	TransactionTypeStartup       = "STARTUP"
)

Variables

View Source
var DefaultLogger = slog.Default()

Functions

func GetVirtualServerProductCode

func GetVirtualServerProductCode(serverClass string, country string) string

Types

type ApiError

type ApiError struct {
	Message string
	Err     error
}

func (*ApiError) Error

func (e *ApiError) Error() string

type Client

type Client interface {
	OrderConfirm(ctx context.Context, orderId string) (*ConfirmedOrder, error)
	OrderCreate(ctx context.Context, productCode string, customerId string, productDetails ProductDetails) (*CreatedOrder, error)
	OrderGet(ctx context.Context, orderId string) (*Order, error)

	OrderContractGet(ctx context.Context, contractId string) (*OrderContract, error)

	DeviceGet(ctx context.Context, deviceId int) (*Device, error)
	DeviceUpdateFirewall(ctx context.Context, deviceId int, policies []FirewallPolicy) error

	TransactionCreate(ctx context.Context, transactionType string, objectType string, objectId string, confirm bool) (*Transaction, error)
	TransactionDeviceStartup(ctx context.Context, deviceId string, data TransactionStartupData) (*Transaction, error)
	TransactionGet(ctx context.Context, transactionId string) (*Transaction, error)
	TransactionGetAll(ctx context.Context, filter TransactionFilter) ([]Transaction, int, error)

	LoadBalancer() LoadBalancerClient
	Device() DeviceClient

	SetDebugLog(logFunc LogFunc)
}

func NewClient

func NewClient(uuid string, secret string) (Client, error)

func NewClientFromEnv added in v1.1.0

func NewClientFromEnv() (Client, error)

type ConfirmedOrder

type ConfirmedOrder struct {
	ContractIds []string
}

type CreatedOrder

type CreatedOrder struct {
	OrderId    string
	ChangeText string
}

type Credential

type Credential struct {
	Username string `json:"username"`
	Password string `json:"password"`
}

type CustomerID added in v1.1.0

type CustomerID = apiv2.CustomerID

type Device

type Device struct {
	DeviceId         int              `json:"deviceId"`
	Name             string           `json:"name"`
	CustomerId       int              `json:"customerId"`
	PrimaryIP        string           `json:"primaryIP"`
	Status           string           `json:"status"`
	DataCenterId     int              `json:"dcid"`
	FirewallPolicies []FirewallPolicy `json:"firewallPolicies"`
	StdName          string           `json:"stdName"`
	DateCreated      int64            `json:"dateCreated"`
	DateModified     int64            `json:"dateModified"`
	TrafficShared    bool             `json:"trafficShared,omitempty"`
	TrafficCurrent   string           `json:"trafficCurrent"`
	TrafficEstimated float64          `json:"trafficEstimated"`
	TrafficMB        int64            `json:"trafficMB"`
	DCName           string           `json:"dcName"`

	Extra map[string]interface{} `json:"extra"`
}

type DeviceClient added in v1.1.0

type DeviceClient interface {
	GetAll(ctx context.Context, filter DeviceGetAllFilter) ([]apiv2.Device, error)
}

type DeviceGetAllFilter added in v1.1.0

type DeviceGetAllFilter struct {
	ID         apiv2.DeviceID `json:"id,omitempty"`
	CustomerID CustomerID     `json:"customerID,omitempty"`
	Name       string         `json:"name,omitempty"`
	StdName    string         `json:"stdName,omitempty"`
	// TODO ipAddress
	// TODO dcID
	// TODO dcName
	// TODO status
	// TODO creationFromDate
	// TODO creationToDate
	// TODO assetID
	// TODO assetCode
	// TODO deviceType
	// TODO trafficShared
	// TODO hostDeviceID
	// TODO hostDeviceName
	// TODO transactionsPending
	ResultStart  int `json:"resStart,omitempty"`
	ResultWindow int `json:"resWindow,omitempty"`
}

type FirewallPolicy

type FirewallPolicy struct {
	ID            int    `json:"id"`
	Direction     string `json:"direction"`
	Policy        string `json:"policy"`
	Order         int    `json:"order"`
	Comment       string `json:"comment,omitempty"`
	IpAddressFrom string `json:"ipAddressFrom,omitempty"`
	IpAddressTo   string `json:"ipAddressTo,omitempty"`
	Protocol      string `json:"protocol,omitempty"`
	PortFrom      string `json:"portFrom,omitempty"`
	PortTo        string `json:"portTo,omitempty"`
	DeviceId      int    `json:"deviceId"`
	OldDeviceID   string `json:"deviceID,omitempty"` //needed b/c of quirks with case-sensitivity in the GO json parser https://github.com/golang/go/issues/14750
}

type Install

type Install struct {
	OperatingSystem   string `json:"operatingSystem,omitempty"`
	PostInstallScript string `json:"postInstallScript,omitempty"`
	Template          string `json:"template,omitempty"`
}

type LoadBalancer added in v1.1.0

type LoadBalancer struct {
	ID                   LoadBalancerID
	Name                 string
	CustomerID           CustomerID
	Hostname             string
	StdName              string
	HostSource           string
	HostSourceForceHost  string
	BackendHostnameForce string
	Type                 LoadBalancerType
	// Status               string // TODO LoadBalancerStatus
	DateCreated         time.Time
	DateModified        time.Time
	Version             int
	Scope               LoadBalancerScope
	ScopeNetworkID      NetworkID
	ScopeInstances      int
	MonthlyAllocationMB int
	MonthlyUsageMB      int
	TrafficRemainingMB  int

	Aliases          []string
	AutoUpgradeHTTPS bool
	Backends         []LoadBalancerBackend
	BalanceMode      LoadBalancerBalanceMode
	CheckMode        LoadBalancerCheckMode
	Ports            []int
	RefreshPatterns  []LoadBalancerRefreshPattern
	Regions          []RegionID
}

type LoadBalancerACL added in v1.1.0

type LoadBalancerACL struct {
	ID     LoadBalancerACLID     `json:"id,omitempty"`
	Data   string                `json:"acl_data,omitempty"` // TODO ip mask
	Action LoadBalancerACLAction `json:"acl_action,omitempty"`
}

type LoadBalancerACLAction added in v1.1.0

type LoadBalancerACLAction string
const (
	LoadBalancerACLActionAllow LoadBalancerACLAction = "ALLOW"
	LoadBalancerACLActionDeny  LoadBalancerACLAction = "DENY"
)

type LoadBalancerACLID added in v1.1.0

type LoadBalancerACLID int

func (*LoadBalancerACLID) UnmarshalJSON added in v1.1.0

func (id *LoadBalancerACLID) UnmarshalJSON(data []byte) error

type LoadBalancerBackend added in v1.1.0

type LoadBalancerBackend struct {
	Name     string
	Hostname string
	Port     int
	TLS      bool
	Timeout  time.Duration
	Weight   int
	UUID     string
	TTL      time.Duration
	TCPProxy LoadBalancerTCPProxyMode
	PortMask []int
}

type LoadBalancerBalanceMode added in v1.1.0

type LoadBalancerBalanceMode string
const (
	LoadBalancerBalanceModeRoundRobin LoadBalancerBalanceMode = "roundrobin"
	LoadBalancerBalanceModeLeast      LoadBalancerBalanceMode = "least"
	LoadBalancerBalanceModeRandom     LoadBalancerBalanceMode = "random"
)

type LoadBalancerBrowserRefresh added in v1.1.0

type LoadBalancerBrowserRefresh string
const (
	LoadBalancerBrowserRefreshCache           LoadBalancerBrowserRefresh = "CACHE"
	LoadBalancerBrowserRefreshIfModifiedSince LoadBalancerBrowserRefresh = "IFMODIFIEDSINCE"
	LoadBalancerBrowserRefreshRefresh         LoadBalancerBrowserRefresh = "REFRESH"
)

type LoadBalancerCheckMode added in v1.1.0

type LoadBalancerCheckMode string
const (
	LoadBalancerCheckModeHTTP LoadBalancerCheckMode = "HTTP"
	LoadBalancerCheckModeTCP  LoadBalancerCheckMode = "TCP"
)

type LoadBalancerClient added in v1.1.0

type LoadBalancerClient interface {
	Create(ctx context.Context, lb LoadBalancer) (*LoadBalancer, error)
	Delete(ctx context.Context, id LoadBalancerID) error
	Get(ctx context.Context, id LoadBalancerID) (*LoadBalancer, error)
	GetAll(ctx context.Context, filter LoadBalancerFilter) ([]LoadBalancer, error)
	Update(ctx context.Context, lb LoadBalancer) (*LoadBalancer, error)
}

type LoadBalancerFilter added in v1.1.0

type LoadBalancerFilter struct {
	Id         LoadBalancerID `json:"id,omitempty"`
	CustomerID CustomerID     `json:"customerid,omitempty"`
	Name       string         `json:"name,omitempty"`
	StdName    string         `json:"stdname,omitempty"`
	Hostname   string         `json:"hostname,omitempty"`
	// Status     string         `json:"status,omitempty"` // TODO LoadBalancerStatus enum DELETED,INACTIVE
	// Type       []string       `json:"type,omitempty"` // TODO LoadBalancerType enum GLB,TCP,HTTP,UDP,CDN?
	// LastModified time.Time      `json:"lastmodified,omitempty"` // TODO serialize as unixepoch
	ResultStart  int `json:"resStart,omitempty"`
	ResultWindow int `json:"resWindow,omitempty"`
}

type LoadBalancerID added in v1.1.0

type LoadBalancerID int

func (LoadBalancerID) IsZero added in v1.1.0

func (id LoadBalancerID) IsZero() bool

func (*LoadBalancerID) UnmarshalJSON added in v1.1.0

func (id *LoadBalancerID) UnmarshalJSON(data []byte) error

type LoadBalancerIPRestriction added in v1.1.0

type LoadBalancerIPRestriction struct {
	IP     string `json:"ip,omitempty"`
	Action string `json:"action,omitempty"`
}

type LoadBalancerRefreshPattern added in v1.1.0

type LoadBalancerRefreshPattern struct {
	ID                         LoadBalancerRefreshPatternID
	RegularExpression          string
	MinTTL                     time.Duration
	CacheTime                  time.Duration
	MaxTTL                     time.Duration
	CheckTTL                   time.Duration
	OverrideExpire             bool
	OverrideLastModified       bool
	IgnoreSetCookie            bool
	IgnoreCacheControl         bool
	CacheAuthorizedPages       bool
	BrowserRefresh             LoadBalancerBrowserRefresh
	ForceExpireMins            time.Duration
	PseudoStreamFLV            bool
	PseudoStreamH264           bool
	CGIIgnoreParams            bool
	NoCompression              bool
	RedirectCode               int
	RedirectURL                string
	RedirectPreserveParams     bool
	RedirectForceHTTPS         bool
	IPRestrictionDefaultPolicy string
	IPRestrictions             []LoadBalancerIPRestriction
}

type LoadBalancerRefreshPatternID added in v1.1.0

type LoadBalancerRefreshPatternID int

func (*LoadBalancerRefreshPatternID) UnmarshalJSON added in v1.1.0

func (id *LoadBalancerRefreshPatternID) UnmarshalJSON(data []byte) error

type LoadBalancerScope added in v1.1.0

type LoadBalancerScope string
const (
	LoadBalancerScopeGlobal LoadBalancerScope = "global"
	LoadBalancerScopeLocal  LoadBalancerScope = "local"
)

type LoadBalancerTCPProxyMode added in v1.1.0

type LoadBalancerTCPProxyMode int
const (
	LoadBalancerTCPProxyModeNone LoadBalancerTCPProxyMode = 0
	LoadBalancerTCPProxyModeV2   LoadBalancerTCPProxyMode = 2
)

type LoadBalancerType added in v1.1.0

type LoadBalancerType string
const (
	LoadBalancerTypeCDN  LoadBalancerType = "CDN"
	LoadBalancerTypeGLB  LoadBalancerType = "GLB"
	LoadBalancerTypeHTTP LoadBalancerType = "HTTP"
	LoadBalancerTypeTCP  LoadBalancerType = "TCP"
	LoadBalancerTypeUDP  LoadBalancerType = "UDP"
)

type LogFunc

type LogFunc func(message string)

type NetworkID added in v1.1.0

type NetworkID int

type Nic

type Nic struct {
	Name     string `json:"name,omitempty"`
	Vlan     int    `json:"vlan,omitempty"`
	Speed    int    `json:"speed"`
	IPV4     int    `json:"ipv4"`
	PoolIPv4 int    `json:"poolIPv4,omitempty"`
	IPV6     int    `json:"ipv6,omitempty"`
	PoolIPv6 int    `json:"poolIPv6,omitempty"`
}

type Order

type Order struct {
	OrderId    string `json:"orderId"`
	CustomerId string `json:"customerId"`
	Status     string `json:"status"`
	ContractId string `json:"contractId"`
}

type OrderContract

type OrderContract struct {
	ContractId string `json:"contractId"`
	CustomerId string `json:"customerId"`
	DeviceId   string `json:"deviceID"`
	Status     string `json:"status"` // TODO enum
	Type       string `json:"type"`   // TODO enum

}

type ProductDetails

type ProductDetails struct {
	Hostname         string           `json:"hostname,omitempty"`
	DataCenterId     string           `json:"dcId,omitempty"`
	Credentials      []Credential     `json:"credentials"`
	Install          Install          `json:"install"`
	CpuCount         int              `json:"cpu"`
	Storage          []Storage        `json:"storage,omitempty"`
	MemoryGB         int              `json:"memoryGB"`
	TrafficGB        int              `json:"trafficGB,omitempty"`
	FirewallPolicies []FirewallPolicy `json:"firewallPolicies,omitempty"`
	Nics             []Nic            `json:"nics,omitempty"`
	HostGroupID      *int             `json:"hostGroupId,omitempty"`
	Location         string           `json:"location,omitempty"`
	Timezone         string           `json:"timezone,omitempty"`
}

type RegionID added in v1.1.0

type RegionID = apiv2.RegionID

type Storage

type Storage struct {
	Name        string `json:"name,omitempty"`
	SizeGB      int    `json:"sizeGB"`
	StorageType string `json:"type"`
	SortOrder   int    `json:"order,omitempty"`
}

type Transaction

type Transaction struct {
	TransactionId        string
	ObjectType           string
	ObjectId             string
	Type                 string
	Data                 string
	ConfirmationRequired bool
	ConfirmationText     string
	Status               string
	StatusInfo           string
}

type TransactionFilter

type TransactionFilter struct {
	ObjectType   string   `json:"objType"`
	ObjectId     []string `json:"objId,omitempty"`
	Type         []string `json:"method,omitempty"`
	Status       []string `json:"status,omitempty"`
	CustomerId   []string `json:"customerId,omitempty"`
	ResultStart  int      `json:"resStart,omitempty"`
	ResultWindow int      `json:"resWindow,omitempty"`
}

type TransactionStartupCloudInit

type TransactionStartupCloudInit struct {
	MetaData      string `json:"metaData,omitempty"`
	NetworkConfig string `json:"networkConfig,omitempty"`
	UserData      string `json:"userData,omitempty"`
}

type TransactionStartupData

type TransactionStartupData struct {
	DeployMediaImageAccessKey    string `json:"deployMediaImageAccessKey,omitempty"`
	DeployMediaImageAccessSecret string `json:"deployMediaImageAccessSecret,omitempty"`
	DeployMediaImageBucket       string `json:"deployMediaImageBucket,omitempty"`
	DeployMediaImageId           string `json:"deployMediaImageId,omitempty"`
	DeployMediaImagePath         string `json:"deployMediaImagePath,omitempty"`

	CloudInit TransactionStartupCloudInit `json:"cloudInit"`
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL