models

package
v0.0.0-...-23a2324 Latest Latest
Warning

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

Go to latest
Published: Sep 18, 2024 License: GPL-3.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrInvalidPubkeyFormat = errors.New("invalid public key format")

Functions

func GenerateTag

func GenerateTag() string

GenerateTag sets Tag field to a random base62 (base64 without / or +) with a length of 22 characters. Values are cryptographically pseudo-random and pseudo-unique with probability of getting same values the same as for random UUID.

func Transform

func Transform(ctx context.Context, model interface{}) error

func Validate

func Validate(ctx context.Context, model interface{}) validator.ValidationErrors

Types

type AWSDetail

type AWSDetail struct {
	Region string `json:"region"`

	// Optional instance name
	Name string `json:"name"`

	// Optional launch template id ("lt-987432987342") or empty string
	LaunchTemplateID string `json:"launch_template_id"`

	// AWS Instance type. Can be blank if LaunchTemplateID is set.
	InstanceType string `json:"instance_type"`

	// Amount of instances to provision of type: Instance type.
	Amount int32 `json:"amount"`

	// Immediately power off the system after initialization
	PowerOff bool `json:"poweroff"`

	// PubkeyName on AWS in given region. Found by the EnsurePubkey job.
	PubkeyName string `json:"pubkey_name"`
}

type AWSReservation

type AWSReservation struct {
	Reservation

	// Pubkey ID.
	PubkeyID *int64 `db:"pubkey_id" json:"pubkey_id,omitempty"`

	// Source ID.
	SourceID string `db:"source_id" json:"source_id"`

	// The ID of the aws reservation which was created or nil when reservation was not yet created.
	AWSReservationID *string `db:"aws_reservation_id" json:"aws_reservation_id"`

	// The ID of the image from which the instance is created. AMI's must be prefixed with 'ami-'.
	// Can be also set to blank, in that case launch template with a valid AMI must be provided.
	ImageID string `db:"image_id" json:"image_id"`

	// Detail information is stored as JSON in DB
	Detail *AWSDetail `db:"detail" json:"detail"`
}

type Account

type Account struct {
	// Required auto-generated PK.
	ID int64 `db:"id"`

	// Organization ID. Required.
	OrgID string `db:"org_id"`

	// EBS account number. Can be NULL but not blank.
	AccountNumber sql.NullString `db:"account_number"`
}

Account represents a Red Hat Console account

func (Account) CacheKeyName

func (a Account) CacheKeyName() string

type AzureDetail

type AzureDetail struct {
	Location string `json:"location"`

	// Instance name
	Name string `json:"name"`

	// InstanceSize of Azure VM.
	InstanceSize string `json:"instance_size"`

	// Amount of instances to provision of type: Instance type.
	Amount int64 `json:"amount"`

	// Immediately power off the system after initialization
	PowerOff bool `json:"poweroff"`

	// ResourceGroup is name of Resource Group to put the created resources into
	ResourceGroup string `json:"resource_group"`
}

type AzureReservation

type AzureReservation struct {
	Reservation

	// Pubkey ID.
	PubkeyID *int64 `db:"pubkey_id" json:"pubkey_id,omitempty"`

	// Source ID.
	SourceID string `db:"source_id" json:"source_id"`

	// The image-builder compose ID of the image or valid Azure Image ID from Azure Marketplace.
	ImageID string `json:"image_id"`

	// Detail information is stored as JSON in DB
	Detail *AzureDetail `db:"detail" json:"detail"`
}

type GCPDetail

type GCPDetail struct {
	Zone string `json:"zone"`

	// Optional instance name
	NamePattern *string `json:"name_pattern"`

	// GCP Machine type.
	MachineType string `json:"machine_type"`

	// Amount of instances to provision of type: Instance type.
	Amount int64 `json:"amount"`

	// UUID of instances created in the same reservation
	UUID string `json:"uuid"`

	// Optional launch template id global/instanceTemplates/ID or empty string
	LaunchTemplateID string `json:"launch_template_id"`

	// Immediately power off the system after initialization
	PowerOff bool `json:"poweroff"`
}

type GCPReservation

type GCPReservation struct {
	Reservation

	// Pubkey ID.
	PubkeyID *int64 `db:"pubkey_id" json:"pubkey_id,omitempty"`

	// Source ID.
	SourceID string `db:"source_id" json:"source_id"`

	// The ID of the gcp reservation which was created.
	GCPOperationName string `db:"gcp_operation_name"`

	// The ID of the image from which the instance is created. Can be either UUID
	// which represents an image-builder compose ID, or Google Image URL which is
	// passed into the Google API directly.
	ImageID string `json:"image_id"`

	// Detail information is stored as JSON in DB
	Detail *GCPDetail `db:"detail" json:"detail"`
}

type NoopReservation

type NoopReservation struct {
	Reservation
}

type ProviderType

type ProviderType int
const (
	// ProviderTypeUnknown is reserved
	ProviderTypeUnknown ProviderType = iota

	// No operation (testing) provider
	ProviderTypeNoop

	// Amazon AWS provider
	ProviderTypeAWS

	// Microsoft Azure provider
	ProviderTypeAzure

	// Google Compute Engine provider
	ProviderTypeGCP
)

func ProviderTypeFromSourcesName

func ProviderTypeFromSourcesName(str string) ProviderType

func ProviderTypeFromString

func ProviderTypeFromString(str string) ProviderType

func (ProviderType) SourcesProviderName

func (pt ProviderType) SourcesProviderName() string

func (ProviderType) String

func (pt ProviderType) String() string

type Pubkey

type Pubkey struct {
	// Set to true to skip model validation and transformation during save.
	SkipValidation bool `db:"-"`

	// Required auto-generated PK.
	ID int64 `db:"id"`

	// Associated Account model. Required.
	AccountID int64 `db:"account_id"`

	// User-facing name. Required.
	Name string `db:"name" validate:"required"`

	// Public key body encoded in base64 (.pub format). Required.
	Body string `db:"body" validate:"required,sshPubkey"`

	// Key type: "ssh-ed25519" or "ssh-rsa".
	Type string `db:"type" validate:"omitempty,oneof=test ssh-rsa ssh-ed25519"`

	// SHA256 base64 encoded fingerprint with padding without any prefix. Note OpenSSH
	// typically prints the fingerprint without padding: ssh-keygen -l -f $HOME/.ssh/key.pub
	// The length is exactly 45 characters including the padding.
	// Example: "gL/y6MvNmJ8jDXtsL/oMmK8jUuIefN39BBuvYw/Rndk="
	Fingerprint string `db:"fingerprint" validate:"omitempty,len=44"`

	// MD5 fingerprint stored as hexadecimal with colons without any prefix. To generate
	// such fingerprint: ssh-keygen -l -E md5 -f $HOME/.ssh/key.pub
	// Example: "89:c5:99:b5:33:48:1c:84:be:da:cb:97:45:b0:4a:ee"
	FingerprintLegacy string `db:"fingerprint_legacy" validate:"omitempty,len=47"`
}

Pubkey represents SSH public key that can be deployed to clients.

func (*Pubkey) BodyWithUsername

func (pk *Pubkey) BodyWithUsername(ctx context.Context) (string, error)

func (*Pubkey) FindAwsFingerprint

func (pk *Pubkey) FindAwsFingerprint(ctx context.Context) string

FindAwsFingerprint returns suitable fingerprint for searching AWS key-pairs.

type PubkeyResource

type PubkeyResource struct {
	// Required auto-generated PK.
	ID int64 `db:"id" json:"id"`

	// Auto-generated random string, not DB-unique but pseudo-unique (128 bits),
	// not returned through API, read-only. Used to "tag" resources in clouds for
	// later use (e.g. search a resource by a tag). Use FormattedTag function to
	// format it with a proper prefix.
	Tag string `db:"tag" json:"-"`

	// Associated Pubkey model. Required.
	PubkeyID int64 `db:"pubkey_id" json:"pubkey_id"`

	// Provider constant (for example ProviderTypeAWS). Required.
	Provider ProviderType `db:"provider" json:"provider"`

	// Required.
	SourceID string `db:"source_id" json:"source_id"`

	// Resource handle (id). Format is provider-dependant. Required.
	Handle string `db:"handle" json:"handle"`

	// Region name. This is provider-dependant. Required for providers which don't have global public keys.
	Region string `db:"region" json:"region"`
}

PubkeyResource represents uploaded SSH key-pair resource.

func (*PubkeyResource) FormattedTag

func (p *PubkeyResource) FormattedTag() string

FormattedTag returns Tag concatenated in a safe way for clouds. That means it does not start with a number, only includes alpha-num characters and dash. Tag is

func (*PubkeyResource) RandomizeTag

func (p *PubkeyResource) RandomizeTag()

RandomizeTag sets Tag field via GenerateTag function if and only if the Tag is currently blank.

type Reservation

type Reservation struct {
	// Required auto-generated PK.
	ID int64 `db:"id" json:"id"`

	// Provider type. Required.
	Provider ProviderType `db:"provider" json:"provider"`

	// Account ID. Required.
	AccountID int64 `db:"account_id" json:"-"`

	// Time when reservation was made.
	CreatedAt time.Time `db:"created_at" json:"created_at"`

	// Total number of job steps for this reservation.
	Steps int32 `db:"steps" json:"steps"`

	// User-facing step descriptions for each step. Length of StepTitles must be equal to Steps.
	StepTitles []string `db:"step_titles" json:"step_titles"`

	// Active job step for this reservation. See Status for more details.
	Step int32 `db:"step" json:"step"`

	// Textual status of the reservation or error when there was a failure. This is user-facing message,
	// it should not contain error details. See Error field for more details.
	Status string `db:"status" json:"status"`

	// Error contains error message from the last step. When a job returns an error, execution of
	// reservation should stop, Success flag should be set to false and Error will contain the error
	// message.
	Error string `db:"error" json:"error,omitempty"`

	// Time when reservation was finished or nil when it's still processing.
	FinishedAt sql.NullTime `db:"finished_at" json:"finished_at"`

	// Flag indicating success, error or unknown state (NULL). See Status for the actual error.
	Success sql.NullBool `db:"success" json:"success"`
}

Reservation represents an instance launch reservation. They are associated with a background job system with a particular job with its own ID. The function handlers update the reservation Status, Success and FinishedAt attributes until the job is considered finished.

type ReservationInstance

type ReservationInstance struct {
	// Reservation ID.
	ReservationID int64 `db:"reservation_id" json:"reservation_id"`

	// Instance ID which has been created on a cloud provider.
	InstanceID string `db:"instance_id" json:"instance_id"`

	// Instance's description, ip and dns
	Detail ReservationInstanceDetail `db:"detail" json:"detail" yaml:"detail"`
}

type ReservationInstanceDetail

type ReservationInstanceDetail struct {
	PublicDNS   string `json:"public_dns,omitempty"`
	PublicIPv4  string `json:"public_ipv4,omitempty"`
	PrivateIPv4 string `json:"private_ipv4,omitempty"`
	PrivateIPv6 string `json:"private_ipv6,omitempty"`
}

type Statistics

type Statistics struct {
	Usage24h []*UsageStat
	Usage28d []*UsageStat
}

type UsageStat

type UsageStat struct {
	Provider ProviderType `db:"provider"`
	Result   string       `db:"result"`
	Count    int64        `db:"count"`
}

Jump to

Keyboard shortcuts

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