types

package
v0.0.13 Latest Latest
Warning

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

Go to latest
Published: May 19, 2025 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Overview

Package types provides type definitions for the application

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ValidateVolume

func ValidateVolume(v *VolumeConfig, instanceRegion string) error

ValidateVolume checks if the volume configuration is valid

Types

type CreateUserRequest

type CreateUserRequest struct {
	Username     string          `json:"username" gorm:"not null;unique"`
	Email        string          `json:"email" gorm:""`
	Role         models.UserRole `json:"role" gorm:"index"`
	PublicSSHKey string          `json:"public_ssh_key" gorm:""`
}

CreateUserRequest represents a request to create a new user

func (CreateUserRequest) Validate

func (u CreateUserRequest) Validate() error

Validate validates the create user request

type CreateUserResponse

type CreateUserResponse struct {
	UserID uint `json:"id"`
}

CreateUserResponse represents the response from the create user endpoint

type DeleteInstanceRequest

type DeleteInstanceRequest struct {
	InstanceID uint `json:"instance_id" validate:"required"` // Instance ID to delete
}

DeleteInstanceRequest represents the request body for deleting a single instance

type DeleteInstancesRequest added in v0.0.2

type DeleteInstancesRequest struct {
	OwnerID     uint   `json:"owner_id" validate:"required"`           // Owner ID
	ProjectName string `json:"project_name" validate:"required"`       // Project name
	InstanceIDs []uint `json:"instance_ids" validate:"required,min=1"` // Instances to delete
}

DeleteInstancesRequest represents the request body for deleting instances swagger:model Example: {"owner_id":1,"project_name":"my-web-project","instance_ids":[123,456]}

type ErrorResponse added in v0.0.9

type ErrorResponse struct {
	// Error message describing what went wrong
	Error string `json:"error"`

	// Optional additional details about the error, may include field-specific validation errors
	Details interface{} `json:"details,omitempty"`
}

ErrorResponse represents an error response swagger:model Example: {"error":"Invalid input parameter","details":{"field":"region","message":"Region is required"}}

type InstanceListResponse added in v0.0.9

type InstanceListResponse struct {
	// Array of instance objects
	Rows []interface{} `json:"rows"`

	// Pagination information for the result set
	Pagination PaginationResponse `json:"pagination"`
}

InstanceListResponse represents a response containing a list of instances swagger:model Example: {"rows":[{"id":1,"provider_id":"do","status":"ready","public_ip":"203.0.113.42"},{"id":2,"provider_id":"aws","status":"provisioning"}],"pagination":{"total":2,"page":1,"limit":10,"offset":0}}

type InstanceRequest

type InstanceRequest struct {
	// DB Model Data - User Defined
	OwnerID  uint              `json:"owner_id"` // Owner ID of the instance
	Provider models.ProviderID `json:"provider"` // Cloud provider (e.g., "do")
	Region   string            `json:"region"`   // Region where instances will be created
	Size     string            `json:"size"`     // Instance size/type
	Image    string            `json:"image"`    // OS image to use
	Tags     []string          `json:"tags"`     // Tags to apply to instances

	// DB Model Data - Internally set during creation
	InstanceID    uint            `json:"instance_id"`              // Instance ID
	PublicIP      string          `json:"public_ip"`                // Public IP address
	VolumeIDs     []string        `json:"volume_ids,omitempty"`     // List of attached volume IDs
	VolumeDetails []VolumeDetails `json:"volume_details,omitempty"` // Detailed information about attached volumes

	// User Defined Configs
	ProjectName       string         `json:"project_name"`
	SSHKeyName        string         `json:"ssh_key_name"`              // Name of the SSH key to use
	NumberOfInstances int            `json:"number_of_instances"`       // Number of instances to create
	Provision         bool           `json:"provision"`                 // Whether to run Ansible provisioning
	PayloadPath       string         `json:"payload_path,omitempty"`    // Local path to the payload script on the API server
	ExecutePayload    bool           `json:"execute_payload,omitempty"` // Whether to execute the payload after copying
	Volumes           []VolumeConfig `json:"volumes"`                   // Optional volumes to attach

	// Talis Server Configs - Optional
	SSHKeyType string `json:"ssh_key_type,omitempty"` // Type of the private SSH key for Ansible (e.g., "rsa", "ed25519"). Defaults to "rsa".
	SSHKeyPath string `json:"ssh_key_path,omitempty"` // Custom path to the private SSH key file for Ansible. Overrides defaults.

	// Internal Configs - Set by the Talis Server
	Action             string `json:"action"`
	ProviderInstanceID int    `json:"provider_instance_id"` // Provider-specific instance ID
	LastTaskID         uint   `json:"last_task_id"`         // ID of the last task
}

InstanceRequest represents an RPC request for a single instance NOTE: These should be cleaned up and replaced with specific RPC request types swagger:model Example: {"owner_id":1,"provider":"do","region":"nyc1","size":"s-1vcpu-1gb","image":"ubuntu-20-04-x64","tags":["webserver","production"],"project_name":"my-web-project","ssh_key_name":"my-ssh-key","number_of_instances":2,"provision":true,"payload_path":"/path/to/your/script.sh","execute_payload":true,"volumes":[{"name":"my-volume-1","size_gb":10,"mount_point":"/mnt/data"}]}

func (*InstanceRequest) Validate

func (i *InstanceRequest) Validate() error

Validate validates the instance configuration

type ListResponse

type ListResponse[T any] struct {
	// Array of resource items
	Rows []T `json:"rows"`

	// Pagination information for the result set
	Pagination PaginationResponse `json:"pagination"`
}

ListResponse defines a generic response structure for listing resources swagger:model Example: {"rows":[{"id":1,"name":"example"},{"id":2,"name":"example2"}],"pagination":{"total":2,"page":1,"limit":10,"offset":0}}

type PaginationResponse

type PaginationResponse struct {
	// Total number of items available across all pages
	Total int `json:"total"`

	// Current page number (1-based)
	Page int `json:"page"`

	// Maximum number of items per page
	Limit int `json:"limit"`

	// Number of items skipped from the beginning of the result set
	Offset int `json:"offset"`
}

PaginationResponse represents pagination information for list endpoints swagger:model Example: {"total":42,"page":1,"limit":10,"offset":0}

type PublicIPs

type PublicIPs struct {
	// The public IPv4 address of the instance
	PublicIP string `json:"public_ip"`
}

PublicIPs represents the public IP address of a single instance swagger:model Example: {"public_ip":"203.0.113.42"}

type PublicIPsResponse

type PublicIPsResponse struct {
	// List of public IP addresses for instances
	PublicIPs []PublicIPs `json:"public_ips"`

	// Pagination information for the result set
	Pagination PaginationResponse `json:"pagination"`
}

PublicIPsResponse represents the response from the public IPs endpoint swagger:model Example: {"public_ips":[{"public_ip":"203.0.113.42"},{"public_ip":"198.51.100.7"}],"pagination":{"total":2,"page":1,"limit":10,"offset":0}}

type Response

type Response struct {
	// Unique identifier for the infrastructure job
	ID uint `json:"id"`

	// Current status of the infrastructure job (e.g., "pending", "running", "completed", "failed")
	Status string `json:"status"`
}

Response represents the response from the infrastructure API swagger:model Example: {"id":123,"status":"running"}

type Slug

type Slug string

Slug is a type for the slug field in the response It is mainly used for the client to understand the type of the response

const (
	SuccessSlug      Slug = "success"
	ErrorSlug        Slug = "error"
	InvalidInputSlug Slug = "invalid-input"
	ServerErrorSlug  Slug = "server-error"
	NotFoundSlug     Slug = "not-found"
)

nolint:gochecknoglobals

type SlugResponse

type SlugResponse struct {
	Slug  Slug        `json:"slug"`
	Error string      `json:"error"`
	Data  interface{} `json:"data"`
}

SlugResponse is the response type for the API TODO: I think this needs to be revised, I think a generic APIResponse type would be better. The Client methods would need to be updated to ingest the APIResponse type and then decode the data into the appropriate type.

func ErrInvalidInput

func ErrInvalidInput(msg string) SlugResponse

ErrInvalidInput returns a SlugResponse with the InvalidInputSlug and the error message

func ErrNotFound

func ErrNotFound(msg string) SlugResponse

ErrNotFound returns a SlugResponse with the NotFoundSlug and the error message

func ErrServer

func ErrServer(msg string) SlugResponse

ErrServer returns a SlugResponse with the ServerErrorSlug and the error message

func Success

func Success(data interface{}) SlugResponse

Success returns a SlugResponse with the SuccessSlug and the data

type SuccessResponse added in v0.0.9

type SuccessResponse struct {
	// Optional data returned by the operation, may include created resource IDs or other operation results
	Data interface{} `json:"data,omitempty"`
}

SuccessResponse represents a success response swagger:model Example: {"data":{"id":123,"status":"created"}}

type TaskListResponse added in v0.0.9

type TaskListResponse struct {
	// Array of task objects
	Rows []interface{} `json:"rows"`

	// Pagination information for the result set
	Pagination PaginationResponse `json:"pagination"`
}

TaskListResponse represents a response containing a list of tasks swagger:model Example: {"rows":[{"id":1,"name":"create_instance","status":"completed"},{"id":2,"name":"provision_instance","status":"pending"}],"pagination":{"total":2,"page":1,"limit":10,"offset":0}}

type TaskResponse

type TaskResponse struct {
	// Name of the task that was created or acted upon
	TaskName string `json:"task_name"`
}

TaskResponse represents the response when a task is created or acted upon swagger:model Example: {"task_name":"create_instance"}

type UserResponse

type UserResponse struct {
	// This can be a single user or null when returning multiple users
	User models.User `json:"user,omitempty"`

	// This can be an array of users or null when returning a single user
	Users []models.User `json:"users,omitempty"`

	// Pagination info included only when returning multiple users
	Pagination *PaginationResponse `json:"pagination,omitempty"`
}

UserResponse is a flexible response type for both single and multiple user scenarios

type VolumeConfig

type VolumeConfig struct {
	Name       string `json:"name"`        // Name of the volume
	SizeGB     int    `json:"size_gb"`     // Size in gigabytes
	Region     string `json:"region"`      // Region where to create the volume
	FileSystem string `json:"filesystem"`  // File system type (optional)
	MountPoint string `json:"mount_point"` // Where to mount the volume
}

VolumeConfig represents the configuration for a volume

type VolumeDetails

type VolumeDetails struct {
	ID         string `json:"id"`          // Volume ID
	Name       string `json:"name"`        // Volume name
	Region     string `json:"region"`      // Region where volume was created
	SizeGB     int    `json:"size_gb"`     // Size in gigabytes
	MountPoint string `json:"mount_point"` // Where the volume is mounted
}

VolumeDetails represents detailed information about a created volume

Jump to

Keyboard shortcuts

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