Help us shape the future of Go! Take the 2026 Go Developer Survey

aws

package
v0.8.7 Latest Latest
Warning

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

Go to latest
Published: Mar 7, 2026 License: Apache-2.0 Imports: 39 Imported by: 0

Documentation

Overview

Package aws provides AMI caching functionality for the Universal AMI System

Package aws provides AMI cost analysis functionality for the Universal AMI System

Package aws provides AMI integration methods for the Universal AMI System

Package aws provides AMI resolution capabilities for the Universal AMI System

Package aws provides enhanced error messages with actionable guidance

Package aws provides retry logic with exponential backoff for transient AWS failures

Index

Constants

View Source
const (
	DocsURLBase         = "https://docs.prism.org"
	DocsPermissions     = DocsURLBase + "/troubleshooting/permissions"
	DocsSSHKeys         = DocsURLBase + "/getting-started/ssh-keys"
	DocsConfiguration   = DocsURLBase + "/troubleshooting/configuration"
	DocsCapacity        = DocsURLBase + "/troubleshooting/capacity"
	DocsQuotas          = DocsURLBase + "/troubleshooting/quotas"
	DocsStorage         = DocsURLBase + "/storage/ebs"
	DocsNetworking      = DocsURLBase + "/networking/vpc"
	DocsRateLimits      = DocsURLBase + "/troubleshooting/rate-limits"
	DocsDryRun          = DocsURLBase + "/cli/dry-run"
	DocsCompatibility   = DocsURLBase + "/troubleshooting/compatibility"
	DocsTroubleshooting = DocsURLBase + "/troubleshooting"
)

Common documentation links

View Source
const (
	// Service Quotas quota codes for EC2
	QuotaCodeOnDemandStandard = "L-1216C47A" // Running On-Demand Standard (A, C, D, H, I, M, R, T, Z) instances
	QuotaCodeOnDemandF        = "L-74FC7D96" // Running On-Demand F instances
	QuotaCodeOnDemandG        = "L-DB2E81BA" // Running On-Demand G and VT instances
	QuotaCodeOnDemandInf      = "L-1945791B" // Running On-Demand Inf instances
	QuotaCodeOnDemandP        = "L-417A185B" // Running On-Demand P instances
	QuotaCodeOnDemandX        = "L-7295265B" // Running On-Demand X instances
	QuotaCodeSpotStandard     = "L-34B43A08" // All Standard (A, C, D, H, I, M, R, T, Z) Spot Instance Requests
	QuotaCodeSpotG            = "L-3819A6DF" // All G and VT Spot Instance Requests
	QuotaCodeSpotP            = "L-7212CCBC" // All P Spot Instance Requests
	QuotaCodeEBSVolumes       = "L-6B0D7BF1" // Number of EBS volumes
	QuotaCodeEBSStorage       = "L-D18FCD1D" // Storage for General Purpose SSD (gp3) volumes, in TiB
	QuotaCodeEIPAddresses     = "L-0263D0A3" // EC2-VPC Elastic IPs
)

Variables

This section is empty.

Functions

func EnhanceError added in v0.5.11

func EnhanceError(err error, operation string) error

EnhanceError wraps an AWS error with actionable guidance

func ExponentialBackoff added in v0.5.11

func ExponentialBackoff(attempt int, initialDelay, maxDelay time.Duration, multiplier float64) time.Duration

ExponentialBackoff calculates the delay for a given attempt

func FormatFreshnessReport

func FormatFreshnessReport(results []AMIFreshnessResult) string

FormatFreshnessReport generates a human-readable AMI freshness report

This can be displayed to users or logged for monitoring

func GetInstanceTypeVCPUs added in v0.5.11

func GetInstanceTypeVCPUs(instanceType string) int

GetInstanceTypeVCPUs returns the number of vCPUs for a given instance type

func GetRecommendedUpdateFrequency

func GetRecommendedUpdateFrequency() map[string]string

GetRecommendedUpdateFrequency returns how often static AMI mappings should be updated

This helps with maintenance planning

func GetStaticAMILocations

func GetStaticAMILocations() map[string]string

GetStaticAMILocations returns where to find current AMI IDs for manual updates

This is useful documentation for maintainers

func IsRetryable added in v0.5.11

func IsRetryable(err error) bool

IsRetryable returns true if the error is transient and should be retried

func WithRetry added in v0.5.11

func WithRetry(ctx context.Context, config *RetryConfig, operation RetryableOperation) error

WithRetry executes an operation with exponential backoff retry logic

func WithRetryAndTracking added in v0.5.11

func WithRetryAndTracking(ctx context.Context, config *RetryConfig, tracker *RetryTracker, operation RetryableOperation) error

WithRetryAndTracking executes an operation with retry logic and tracks metrics

Types

type AMICache

type AMICache struct {
	// contains filtered or unexported fields
}

AMICache provides in-memory caching for AMI information to improve performance

func NewAMICache

func NewAMICache() *AMICache

NewAMICache creates a new AMI cache with default configuration

func NewAMICacheWithConfig

func NewAMICacheWithConfig(ttl time.Duration, maxSize int) *AMICache

NewAMICacheWithConfig creates a new AMI cache with custom configuration

func (*AMICache) CleanupExpired

func (c *AMICache) CleanupExpired() int

CleanupExpired removes expired entries from the cache

func (*AMICache) Clear

func (c *AMICache) Clear()

Clear removes all entries from the cache

func (*AMICache) ConfigureCache

func (c *AMICache) ConfigureCache(config *AMICacheConfig)

ConfigureCache applies configuration to the cache

func (*AMICache) GetAMI

func (c *AMICache) GetAMI(amiID, region string) *types.AMIInfo

GetAMI retrieves AMI information from cache

func (*AMICache) GetStats

func (c *AMICache) GetStats() *AMICacheStats

GetStats returns cache statistics

func (*AMICache) InvalidateAMI

func (c *AMICache) InvalidateAMI(amiID, region string)

InvalidateAMI removes AMI information from cache

func (*AMICache) InvalidateRegion

func (c *AMICache) InvalidateRegion(region string)

InvalidateRegion removes all AMI information for a specific region

func (*AMICache) SetAMI

func (c *AMICache) SetAMI(amiID, region string, ami *types.AMIInfo)

SetAMI stores AMI information in cache

func (*AMICache) SetAMIWithTTL

func (c *AMICache) SetAMIWithTTL(amiID, region string, ami *types.AMIInfo, ttl time.Duration)

SetAMIWithTTL stores AMI information in cache with custom TTL

func (*AMICache) StartCleanupRoutine

func (c *AMICache) StartCleanupRoutine(interval time.Duration)

StartCleanupRoutine starts a background goroutine to periodically clean up expired entries

type AMICacheConfig

type AMICacheConfig struct {
	DefaultTTL      time.Duration `json:"default_ttl"`      // Default time-to-live for cached entries
	MaxSize         int           `json:"max_size"`         // Maximum number of cached entries
	CleanupInterval time.Duration `json:"cleanup_interval"` // How often to clean up expired entries
}

AMICacheConfig represents cache configuration

type AMICacheStats

type AMICacheStats struct {
	Size     int           `json:"size"`      // Current number of cached entries
	MaxSize  int           `json:"max_size"`  // Maximum cache size
	Hits     int64         `json:"hits"`      // Cache hits
	Misses   int64         `json:"misses"`    // Cache misses
	HitRatio float64       `json:"hit_ratio"` // Hit ratio (0.0 to 1.0)
	TTL      time.Duration `json:"ttl"`       // Default TTL
}

AMICacheStats represents cache statistics

type AMICostAnalyzer

type AMICostAnalyzer struct {
	// contains filtered or unexported fields
}

AMICostAnalyzer provides cost analysis for AMI vs script deployment strategies

func NewAMICostAnalyzer

func NewAMICostAnalyzer() *AMICostAnalyzer

NewAMICostAnalyzer creates a new AMI cost analyzer with default pricing data

func (*AMICostAnalyzer) AnalyzeCosts

func (a *AMICostAnalyzer) AnalyzeCosts(templateName, region string, amiInfo *types.AMIInfo, scriptTime time.Duration) *types.AMICostAnalysis

AnalyzeCosts performs comprehensive cost analysis for AMI vs script deployment

func (*AMICostAnalyzer) CalculateAMICost

func (a *AMICostAnalyzer) CalculateAMICost(ami *types.AMIInfo, region string) float64

CalculateAMICost calculates the cost of using an AMI for deployment

func (*AMICostAnalyzer) CompareDeploymentCosts

func (a *AMICostAnalyzer) CompareDeploymentCosts(strategies []string, duration float64, region string) map[string]float64

CompareDeploymentCosts compares costs between different deployment strategies

func (*AMICostAnalyzer) EstimateCrossRegionCost

func (a *AMICostAnalyzer) EstimateCrossRegionCost(amiSize float64, sourceRegion, targetRegion string) float64

EstimateCrossRegionCost estimates the cost of copying an AMI across regions

func (*AMICostAnalyzer) GetOptimizedInstanceType

func (a *AMICostAnalyzer) GetOptimizedInstanceType(templateDomain string, region string) (string, float64)

GetOptimizedInstanceType recommends the most cost-effective instance type for a template

type AMICreateParams

type AMICreateParams struct {
	InstanceID         string
	Name               string
	Description        string
	NoReboot           bool
	BlockDeviceMapping bool
	Tags               map[string]string
}

type AMIDiscovery

type AMIDiscovery struct {
	// contains filtered or unexported fields
}

AMIDiscovery handles dynamic AMI discovery via AWS SSM Parameter Store

func NewAMIDiscovery

func NewAMIDiscovery(ssmClient SSMClientInterface) *AMIDiscovery

NewAMIDiscovery creates a new AMI discovery service

func (*AMIDiscovery) BulkDiscoverAMIs

func (d *AMIDiscovery) BulkDiscoverAMIs(ctx context.Context, region string) (map[string]map[string]map[string]map[string]string, error)

BulkDiscoverAMIs discovers AMIs for multiple distro/version/arch combinations

This is useful for warming up the AMI cache at daemon startup

Returns:

  • Map of discovered AMIs: distro -> version -> region -> arch -> AMI
  • Combinations not found in SSM are omitted (caller uses static fallback)

func (*AMIDiscovery) CheckAMIFreshness

func (d *AMIDiscovery) CheckAMIFreshness(ctx context.Context, staticAMIs map[string]map[string]map[string]map[string]string, region string) ([]AMIFreshnessResult, error)

CheckAMIFreshness validates if static AMI IDs match the latest available AMIs

This should be run monthly (or when fallback is triggered) to ensure static AMI mappings are up-to-date. Returns a report of all outdated AMIs.

Parameters:

  • staticAMIs: Map of static AMI IDs (distro → version → region → arch → AMI)
  • region: AWS region to check

Returns:

  • Slice of freshness results with update recommendations
  • Error only for serious issues

func (*AMIDiscovery) GetAMIWithFallback

func (d *AMIDiscovery) GetAMIWithFallback(ctx context.Context, distro, version, region, arch, staticFallback string) (string, string, error)

GetAMIWithFallback attempts dynamic discovery first, then falls back to static AMI

This is the primary method that should be used by the launch system

Parameters:

  • distro: Base OS distro
  • version: OS version
  • region: AWS region
  • arch: Architecture
  • staticFallback: Static AMI ID to use if discovery fails

Returns:

  • AMI ID (from SSM or fallback)
  • Source indicator ("ssm" or "static")
  • Error only for serious issues

func (*AMIDiscovery) GetLatestAMI

func (d *AMIDiscovery) GetLatestAMI(ctx context.Context, distro, version, region, arch string) (string, error)

GetLatestAMI queries AWS SSM Parameter Store for the latest AMI ID

Parameters:

  • distro: Base OS distro (ubuntu, rocky, amazonlinux, alpine, rhel, debian)
  • version: OS version (24.04, 22.04, 9, 10, 2023, etc.)
  • region: AWS region (us-east-1, us-west-2, etc.)
  • arch: Architecture (x86_64 or arm64)

Returns:

  • AMI ID if found
  • Empty string if not found (caller should use static fallback)
  • Error only for serious issues (network failures, etc.)

func (*AMIDiscovery) GetSSMParameterPaths

func (d *AMIDiscovery) GetSSMParameterPaths() map[string][]string

GetSSMParameterPaths returns all SSM parameter paths that Prism queries

This is useful for documentation and debugging

func (*AMIDiscovery) ValidateAMI

func (d *AMIDiscovery) ValidateAMI(ctx context.Context, amiID, region string) (bool, error)

ValidateAMI checks if an AMI exists and is accessible in the specified region

This is useful for validating static AMI mappings

type AMIFreshnessResult

type AMIFreshnessResult struct {
	Distro         string
	Version        string
	Region         string
	Arch           string
	StaticAMI      string
	LatestAMI      string
	IsOutdated     bool
	NeedsUpdate    bool
	HasSSMSupport  bool
	CheckTimestamp string
}

AMIFreshnessResult contains the result of an AMI freshness check

func GetOutdatedAMIs

func GetOutdatedAMIs(results []AMIFreshnessResult) []AMIFreshnessResult

GetOutdatedAMIs returns only the AMIs that need updating

Convenience method to filter freshness check results

type AMISearchCriteria

type AMISearchCriteria struct {
	Owner        string
	NamePattern  string
	Region       string
	Architecture []string
	RequiredTags map[string]string
}

AMISearchCriteria defines search criteria for dynamic AMI discovery

type AMIStatusInfo

type AMIStatusInfo struct {
	State       string
	Status      types.AMICreationStatus
	ElapsedTime time.Duration
}

type AZHealthTracker added in v0.7.0

type AZHealthTracker struct {
	AvailabilityZone string
	InstanceType     string
	SuccessCount     int
	FailureCount     int
	LastSuccess      time.Time
	LastFailure      time.Time
	SuccessRate      float64
}

AZHealthTracker tracks success/failure rates for instance launches in an AZ

type AZRecommendation added in v0.7.0

type AZRecommendation struct {
	PreferredAZ      string
	AlternateAZs     []string
	Reason           string
	AvailabilityZone *AZHealthTracker
}

AZRecommendation provides AZ selection recommendations

type AvailabilityManager added in v0.7.0

type AvailabilityManager struct {
	// contains filtered or unexported fields
}

AvailabilityManager handles AZ availability tracking and intelligent failover

func NewAvailabilityManager added in v0.7.0

func NewAvailabilityManager(cfg aws.Config, region string) *AvailabilityManager

NewAvailabilityManager creates a new availability manager

func (*AvailabilityManager) AttemptLaunchWithFailover added in v0.7.0

func (am *AvailabilityManager) AttemptLaunchWithFailover(
	ctx context.Context,
	instanceType string,
	launchFunc func(ctx context.Context, az string) (string, error),
) (instanceID string, az string, err error)

AttemptLaunchWithFailover attempts to launch an instance with automatic AZ failover

func (*AvailabilityManager) ClearHealthData added in v0.7.0

func (am *AvailabilityManager) ClearHealthData()

ClearHealthData clears all health tracking data (useful for testing)

func (*AvailabilityManager) GetAZHealthReport added in v0.7.0

func (am *AvailabilityManager) GetAZHealthReport() map[string]*AZHealthTracker

GetAZHealthReport returns a health report for all tracked AZs

func (*AvailabilityManager) GetAvailableAZsForInstanceType added in v0.7.0

func (am *AvailabilityManager) GetAvailableAZsForInstanceType(ctx context.Context, instanceType string) ([]string, error)

GetAvailableAZsForInstanceType returns available standard AZs for a given instance type Filters out local zones and wavelength zones to avoid subnet mismatches

func (*AvailabilityManager) GetRecommendedAZ added in v0.7.0

func (am *AvailabilityManager) GetRecommendedAZ(ctx context.Context, instanceType string) (*AZRecommendation, error)

GetRecommendedAZ returns the recommended AZ for launching an instance

func (*AvailabilityManager) RecordLaunchFailure added in v0.7.0

func (am *AvailabilityManager) RecordLaunchFailure(az, instanceType string, reason string)

RecordLaunchFailure records a failed launch in an AZ

func (*AvailabilityManager) RecordLaunchSuccess added in v0.7.0

func (am *AvailabilityManager) RecordLaunchSuccess(az, instanceType string)

RecordLaunchSuccess records a successful launch in an AZ

type EC2ClientInterface

type EC2ClientInterface interface {
	RunInstances(ctx context.Context, params *ec2.RunInstancesInput, optFns ...func(*ec2.Options)) (*ec2.RunInstancesOutput, error)
	DescribeInstances(ctx context.Context, params *ec2.DescribeInstancesInput, optFns ...func(*ec2.Options)) (*ec2.DescribeInstancesOutput, error)
	TerminateInstances(ctx context.Context, params *ec2.TerminateInstancesInput, optFns ...func(*ec2.Options)) (*ec2.TerminateInstancesOutput, error)
	CreateImage(ctx context.Context, params *ec2.CreateImageInput, optFns ...func(*ec2.Options)) (*ec2.CreateImageOutput, error)
	DescribeImages(ctx context.Context, params *ec2.DescribeImagesInput, optFns ...func(*ec2.Options)) (*ec2.DescribeImagesOutput, error)
	CopyImage(ctx context.Context, params *ec2.CopyImageInput, optFns ...func(*ec2.Options)) (*ec2.CopyImageOutput, error)
	DescribeSecurityGroups(ctx context.Context, params *ec2.DescribeSecurityGroupsInput, optFns ...func(*ec2.Options)) (*ec2.DescribeSecurityGroupsOutput, error)
	CreateSecurityGroup(ctx context.Context, params *ec2.CreateSecurityGroupInput, optFns ...func(*ec2.Options)) (*ec2.CreateSecurityGroupOutput, error)
	AuthorizeSecurityGroupIngress(ctx context.Context, params *ec2.AuthorizeSecurityGroupIngressInput, optFns ...func(*ec2.Options)) (*ec2.AuthorizeSecurityGroupIngressOutput, error)
	DescribeVpcs(ctx context.Context, params *ec2.DescribeVpcsInput, optFns ...func(*ec2.Options)) (*ec2.DescribeVpcsOutput, error)
	DescribeSubnets(ctx context.Context, params *ec2.DescribeSubnetsInput, optFns ...func(*ec2.Options)) (*ec2.DescribeSubnetsOutput, error)
	DescribeRouteTables(ctx context.Context, params *ec2.DescribeRouteTablesInput, optFns ...func(*ec2.Options)) (*ec2.DescribeRouteTablesOutput, error)
	StartInstances(ctx context.Context, params *ec2.StartInstancesInput, optFns ...func(*ec2.Options)) (*ec2.StartInstancesOutput, error)
	StopInstances(ctx context.Context, params *ec2.StopInstancesInput, optFns ...func(*ec2.Options)) (*ec2.StopInstancesOutput, error)
	ModifyInstanceAttribute(ctx context.Context, params *ec2.ModifyInstanceAttributeInput, optFns ...func(*ec2.Options)) (*ec2.ModifyInstanceAttributeOutput, error)
	CreateVolume(ctx context.Context, params *ec2.CreateVolumeInput, optFns ...func(*ec2.Options)) (*ec2.CreateVolumeOutput, error)
	DeleteVolume(ctx context.Context, params *ec2.DeleteVolumeInput, optFns ...func(*ec2.Options)) (*ec2.DeleteVolumeOutput, error)
	DescribeVolumes(ctx context.Context, params *ec2.DescribeVolumesInput, optFns ...func(*ec2.Options)) (*ec2.DescribeVolumesOutput, error)
	AttachVolume(ctx context.Context, params *ec2.AttachVolumeInput, optFns ...func(*ec2.Options)) (*ec2.AttachVolumeOutput, error)
	DetachVolume(ctx context.Context, params *ec2.DetachVolumeInput, optFns ...func(*ec2.Options)) (*ec2.DetachVolumeOutput, error)
	DescribeKeyPairs(ctx context.Context, params *ec2.DescribeKeyPairsInput, optFns ...func(*ec2.Options)) (*ec2.DescribeKeyPairsOutput, error)
	ImportKeyPair(ctx context.Context, params *ec2.ImportKeyPairInput, optFns ...func(*ec2.Options)) (*ec2.ImportKeyPairOutput, error)
	DeleteKeyPair(ctx context.Context, params *ec2.DeleteKeyPairInput, optFns ...func(*ec2.Options)) (*ec2.DeleteKeyPairOutput, error)
	GetConsoleOutput(ctx context.Context, params *ec2.GetConsoleOutputInput, optFns ...func(*ec2.Options)) (*ec2.GetConsoleOutputOutput, error)
	DeregisterImage(ctx context.Context, params *ec2.DeregisterImageInput, optFns ...func(*ec2.Options)) (*ec2.DeregisterImageOutput, error)
	DeleteSnapshot(ctx context.Context, params *ec2.DeleteSnapshotInput, optFns ...func(*ec2.Options)) (*ec2.DeleteSnapshotOutput, error)
	DescribeSnapshots(ctx context.Context, params *ec2.DescribeSnapshotsInput, optFns ...func(*ec2.Options)) (*ec2.DescribeSnapshotsOutput, error)
	ModifyImageAttribute(ctx context.Context, params *ec2.ModifyImageAttributeInput, optFns ...func(*ec2.Options)) (*ec2.ModifyImageAttributeOutput, error)
	CreateTags(ctx context.Context, params *ec2.CreateTagsInput, optFns ...func(*ec2.Options)) (*ec2.CreateTagsOutput, error)
	DescribeInstanceTypes(ctx context.Context, params *ec2.DescribeInstanceTypesInput, optFns ...func(*ec2.Options)) (*ec2.DescribeInstanceTypesOutput, error)
	DescribeInstanceTypeOfferings(ctx context.Context, params *ec2.DescribeInstanceTypeOfferingsInput, optFns ...func(*ec2.Options)) (*ec2.DescribeInstanceTypeOfferingsOutput, error)
	DescribeInstanceStatus(ctx context.Context, params *ec2.DescribeInstanceStatusInput, optFns ...func(*ec2.Options)) (*ec2.DescribeInstanceStatusOutput, error)
}

EC2ClientInterface defines the interface for EC2 client operations.

type EFSClientInterface

type EFSClientInterface interface {
	DescribeMountTargets(ctx context.Context, params *efs.DescribeMountTargetsInput, optFns ...func(*efs.Options)) (*efs.DescribeMountTargetsOutput, error)
	DeleteMountTarget(ctx context.Context, params *efs.DeleteMountTargetInput, optFns ...func(*efs.Options)) (*efs.DeleteMountTargetOutput, error)
	DeleteFileSystem(ctx context.Context, params *efs.DeleteFileSystemInput, optFns ...func(*efs.Options)) (*efs.DeleteFileSystemOutput, error)
	CreateFileSystem(ctx context.Context, params *efs.CreateFileSystemInput, optFns ...func(*efs.Options)) (*efs.CreateFileSystemOutput, error)
	DescribeFileSystems(ctx context.Context, params *efs.DescribeFileSystemsInput, optFns ...func(*efs.Options)) (*efs.DescribeFileSystemsOutput, error)
}

EFSClientInterface defines the interface for EFS client operations.

type EnhancedError added in v0.5.11

type EnhancedError struct {
	OriginalError error
	Operation     string // e.g., "launch instance", "start instance"
	Suggestions   []string
	DocsLink      string
	Category      string // e.g., "permissions", "quota", "configuration"
}

EnhancedError wraps an AWS error with actionable guidance

func (*EnhancedError) Error added in v0.5.11

func (e *EnhancedError) Error() string

type HealthEvent added in v0.7.0

type HealthEvent struct {
	EventARN          string
	Service           string
	EventTypeCode     string
	EventTypeCategory string
	Region            string
	StartTime         time.Time
	EndTime           *time.Time
	LastUpdatedTime   time.Time
	StatusCode        string
	Description       string
	AffectedEntities  []string
}

HealthEvent represents an AWS service health event

type HealthMonitor added in v0.7.0

type HealthMonitor struct {
	// contains filtered or unexported fields
}

HealthMonitor monitors AWS service health and provides proactive notifications

func NewHealthMonitor added in v0.7.0

func NewHealthMonitor(cfg aws.Config, region string) *HealthMonitor

NewHealthMonitor creates a new AWS Health monitor

func (*HealthMonitor) CheckServiceHealth added in v0.7.0

func (hm *HealthMonitor) CheckServiceHealth(ctx context.Context, region string) (*HealthStatus, error)

CheckServiceHealth checks the health of EC2 service in a specific region

func (*HealthMonitor) ClearCache added in v0.7.0

func (hm *HealthMonitor) ClearCache()

ClearCache clears the event cache (useful for testing)

func (*HealthMonitor) FormatHealthReport added in v0.7.0

func (hm *HealthMonitor) FormatHealthReport(summary *RegionHealthSummary) string

FormatHealthReport generates a formatted health report

func (*HealthMonitor) GetRegionHealthSummary added in v0.7.0

func (hm *HealthMonitor) GetRegionHealthSummary(ctx context.Context, regions []string) (*RegionHealthSummary, error)

GetRegionHealthSummary returns health status for all supported regions

func (*HealthMonitor) ShouldBlockLaunch added in v0.7.0

func (hm *HealthMonitor) ShouldBlockLaunch(ctx context.Context, region string) (bool, string)

ShouldBlockLaunch determines if a launch should be blocked due to service health issues

func (*HealthMonitor) SuggestAlternativeRegions added in v0.7.0

func (hm *HealthMonitor) SuggestAlternativeRegions(ctx context.Context, currentRegion string, allRegions []string) ([]string, error)

SuggestAlternativeRegions suggests alternative healthy regions

type HealthStatus added in v0.7.0

type HealthStatus struct {
	Service           string
	Region            string
	IsHealthy         bool
	ActiveEvents      int
	ImpactLevel       string // "none", "low", "medium", "high"
	RecommendedAction string
	Events            []*HealthEvent
}

HealthStatus represents the overall health status for a service/region

type InstanceBuilder

type InstanceBuilder struct {
	// contains filtered or unexported fields
}

InstanceBuilder builds Prism instance objects (Builder Pattern - SOLID)

func NewInstanceBuilder

func NewInstanceBuilder(ec2Client EC2ClientInterface, pricingClient *PricingClient, region string) *InstanceBuilder

NewInstanceBuilder creates instance builder

func (*InstanceBuilder) BuildInstance

func (b *InstanceBuilder) BuildInstance(ec2Instance ec2types.Instance, localState *ctypes.State) *ctypes.Instance

BuildInstance creates Prism instance from EC2 instance

type InstanceConfigBuilder

type InstanceConfigBuilder struct {
	// contains filtered or unexported fields
}

InstanceConfigBuilder builds EC2 RunInstances configuration (Builder Pattern - SOLID)

func (*InstanceConfigBuilder) BuildRunInstancesInput

func (b *InstanceConfigBuilder) BuildRunInstancesInput(req ctypes.LaunchRequest, ami, instanceType, userDataEncoded, subnetID, securityGroupID, primaryUsername string) (*ec2.RunInstancesInput, error)

BuildRunInstancesInput creates configured RunInstancesInput

type InstanceLauncher

type InstanceLauncher struct {
	// contains filtered or unexported fields
}

InstanceLauncher executes the actual instance launch (Single Responsibility - SOLID)

func (*InstanceLauncher) LaunchInstance

func (l *InstanceLauncher) LaunchInstance(req ctypes.LaunchRequest, runInput *ec2.RunInstancesInput, hourlyRate float64, template *ctypes.RuntimeTemplate, primaryUsername string, instanceType string) (*ctypes.Instance, error)

LaunchInstance orchestrates instance launch with extracted helper methods

type InstanceListProcessor

type InstanceListProcessor struct {
	// contains filtered or unexported fields
}

InstanceListProcessor processes EC2 reservations into Prism instances (Strategy Pattern - SOLID)

func NewInstanceListProcessor

func NewInstanceListProcessor(ec2Client EC2ClientInterface, pricingClient *PricingClient, region string) *InstanceListProcessor

NewInstanceListProcessor creates instance list processor

func (*InstanceListProcessor) ProcessReservations

func (p *InstanceListProcessor) ProcessReservations(reservations []ec2types.Reservation) []ctypes.Instance

ProcessReservations converts EC2 reservations to Prism instances

type InstanceStateConverter

type InstanceStateConverter struct{}

InstanceStateConverter converts AWS states to Prism states (Single Responsibility - SOLID)

func (*InstanceStateConverter) ConvertState

func (c *InstanceStateConverter) ConvertState(ec2Instance ec2types.Instance) string

ConvertState converts EC2 instance state to Prism state

type InstanceTagExtractor

type InstanceTagExtractor struct{}

InstanceTagExtractor extracts tags from EC2 instances (Single Responsibility - SOLID)

func (*InstanceTagExtractor) ExtractTags

func (e *InstanceTagExtractor) ExtractTags(ec2Instance ec2types.Instance) (name, template, project string)

ExtractTags extracts Prism-specific tags from EC2 instance

type LaunchOptionsProcessor

type LaunchOptionsProcessor struct {
	// contains filtered or unexported fields
}

LaunchOptionsProcessor processes hibernation and spot options (Strategy Pattern - SOLID)

func (*LaunchOptionsProcessor) ProcessOptions

func (p *LaunchOptionsProcessor) ProcessOptions(req ctypes.LaunchRequest, runInput *ec2.RunInstancesInput, ami, instanceType string, rootVolumeGB int) error

ProcessOptions validates and applies hibernation/spot options

type LaunchOrchestrator

type LaunchOrchestrator struct {
	// contains filtered or unexported fields
}

LaunchOrchestrator coordinates instance launch using SOLID principles (Strategy Pattern - SOLID)

func NewLaunchOrchestrator

func NewLaunchOrchestrator(manager *Manager, region string) *LaunchOrchestrator

NewLaunchOrchestrator creates launch orchestrator

func (*LaunchOrchestrator) ExecuteLaunch

func (o *LaunchOrchestrator) ExecuteLaunch(req ctypes.LaunchRequest, template *ctypes.RuntimeTemplate, arch, primaryUsername string) (*ctypes.Instance, error)

ExecuteLaunch performs complete instance launch using SOLID strategy pattern

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager handles all AWS operations

func NewManager

func NewManager(opts ...ManagerOptions) (*Manager, error)

NewManager creates a new AWS manager

func (*Manager) AttachStorage

func (m *Manager) AttachStorage(volumeName, instanceName string) error

AttachStorage attaches an EBS volume to an instance

func (*Manager) CheckAMIFreshness

func (m *Manager) CheckAMIFreshness(ctx context.Context, staticAMIs map[string]map[string]map[string]map[string]string) ([]AMIFreshnessResult, error)

CheckAMIFreshness validates static AMI IDs against latest SSM values (v0.5.4)

func (*Manager) CheckQuotaForInvitations added in v0.5.11

func (m *Manager) CheckQuotaForInvitations(ctx context.Context, instanceType string, count int) (*QuotaCheck, error)

CheckQuotaForInvitations validates that sufficient EC2 quota exists for bulk invitations

func (*Manager) CleanupOldAMIs

func (m *Manager) CleanupOldAMIs(maxAge string, dryRun bool) (*types.AMICleanupResult, error)

CleanupOldAMIs removes old and unused AMIs

func (*Manager) CleanupZombieResources added in v0.5.11

func (m *Manager) CleanupZombieResources(ctx context.Context, instanceIDs []string, volumeIDs []string) error

CleanupZombieResources terminates zombie instances and deletes zombie volumes

func (*Manager) CreateAMIFromInstance

func (m *Manager) CreateAMIFromInstance(request *types.AMICreationRequest) (*types.AMICreationResult, error)

CreateAMIFromInstance creates an AMI from a running instance

func (*Manager) CreateInstanceAMISnapshot

func (m *Manager) CreateInstanceAMISnapshot(instanceName, snapshotName, description string, noReboot bool) (*ctypes.InstanceSnapshotResult, error)

CreateInstanceAMISnapshot creates an AMI snapshot from a Prism instance

func (*Manager) CreateInstanceSnapshot

func (m *Manager) CreateInstanceSnapshot(instanceID, description string, noReboot bool) (*types.SnapshotCreationResult, error)

CreateInstanceSnapshot creates a snapshot from an instance

func (*Manager) CreateS3Client added in v0.5.7

func (m *Manager) CreateS3Client() (*s3.Client, error)

CreateS3Client creates a new S3 client using the manager's AWS config (v0.5.7)

func (*Manager) CreateS3FileBackup added in v0.7.7

func (m *Manager) CreateS3FileBackup(req types.BackupCreateRequest) (*types.BackupCreateResult, error)

CreateS3FileBackup starts an async S3 file backup on a running instance via SSM.

The method launches `aws s3 sync` on the instance for each path in IncludePaths (defaulting to /home and /data when empty), writes backup metadata to SSM Parameter Store, and returns immediately with state "creating".

func (*Manager) CreateStorage

func (m *Manager) CreateStorage(req ctypes.StorageCreateRequest) (*ctypes.StorageVolume, error)

CreateStorage creates a new EBS volume

func (*Manager) CreateVolume

func (m *Manager) CreateVolume(req ctypes.VolumeCreateRequest) (*ctypes.StorageVolume, error)

CreateVolume creates a new EFS volume

func (*Manager) DeleteAMI

func (m *Manager) DeleteAMI(amiID string, deregisterOnly bool) (*types.AMIDeletionResult, error)

DeleteAMI deletes a specific AMI by ID

func (*Manager) DeleteInstance

func (m *Manager) DeleteInstance(name string) error

DeleteInstance terminates an EC2 instance

func (*Manager) DeleteInstanceSnapshot

func (m *Manager) DeleteInstanceSnapshot(snapshotName string) (*ctypes.InstanceSnapshotDeleteResult, error)

DeleteInstanceSnapshot deletes a Prism instance snapshot (AMI)

func (*Manager) DeleteKeyPair

func (m *Manager) DeleteKeyPair(keyName string) error

DeleteKeyPair deletes an SSH key pair from AWS

func (*Manager) DeleteS3FileBackup added in v0.7.7

func (m *Manager) DeleteS3FileBackup(backupName string) (*types.BackupDeleteResult, error)

DeleteS3FileBackup removes an S3 backup's SSM metadata entry.

S3 objects are intentionally NOT deleted to prevent accidental data loss. Users can purge s3://{bucket}/{prefix}/ manually when desired.

func (*Manager) DeleteSnapshot

func (m *Manager) DeleteSnapshot(snapshotID string) (*types.SnapshotDeletionResult, error)

DeleteSnapshot deletes a specific snapshot

func (*Manager) DeleteStorage

func (m *Manager) DeleteStorage(name string) error

DeleteStorage deletes an EBS volume

func (*Manager) DeleteVolume

func (m *Manager) DeleteVolume(name string) error

DeleteVolume deletes an EFS volume

func (*Manager) DetachStorage

func (m *Manager) DetachStorage(volumeName string) error

DetachStorage detaches an EBS volume from an instance

func (*Manager) DiscoverDefaultVPC

func (m *Manager) DiscoverDefaultVPC() (string, error)

DiscoverDefaultVPC finds the default VPC in the current region

func (*Manager) DiscoverPublicSubnet

func (m *Manager) DiscoverPublicSubnet(vpcID string) (string, error)

DiscoverPublicSubnet finds a public subnet (legacy method, kept for fallback)

func (*Manager) DiscoverPublicSubnetForInstanceType

func (m *Manager) DiscoverPublicSubnetForInstanceType(vpcID, instanceType string) (string, error)

DiscoverPublicSubnet finds a public subnet in the specified VPC DiscoverPublicSubnetForInstanceType finds a public subnet that supports the specified instance type This prevents launch failures due to instance type not being available in a randomly selected AZ

func (*Manager) EnsureKeyPairExists

func (m *Manager) EnsureKeyPairExists(keyName, publicKeyContent string) error

EnsureKeyPairExists ensures the SSH key pair exists in AWS, creating it if necessary

func (*Manager) ExecuteCommand

func (m *Manager) ExecuteCommand(instanceName string, execRequest ctypes.ExecRequest) (*ctypes.ExecResult, error)

ExecuteCommand executes a command on an instance via SSM

func (*Manager) GetAMICostAnalysis

func (m *Manager) GetAMICostAnalysis(templateName string) (*types.AMICostAnalysis, error)

GetAMICostAnalysis provides cost analysis for AMI vs script deployment

func (*Manager) GetAMICreationStatus

func (m *Manager) GetAMICreationStatus(creationID string) (*types.AMICreationResult, error)

GetAMICreationStatus checks the status of AMI creation

func (*Manager) GetAMIDiscovery added in v0.7.2

func (m *Manager) GetAMIDiscovery() *AMIDiscovery

GetAMIDiscovery returns the AMI discovery service (Issue #436) Used by template handlers to enable dynamic AMI lookup via SSM Parameter Store

func (*Manager) GetAWSConfig

func (m *Manager) GetAWSConfig() aws.Config

GetAWSConfig returns the AWS config for creating additional service clients

func (*Manager) GetAvailabilityManager added in v0.7.0

func (m *Manager) GetAvailabilityManager() *AvailabilityManager

GetAvailabilityManager returns the availability manager

func (*Manager) GetAvailableLogTypes

func (m *Manager) GetAvailableLogTypes() []string

GetAvailableLogTypes returns the available log types that can be retrieved

func (*Manager) GetBackupS3Bucket added in v0.7.7

func (m *Manager) GetBackupS3Bucket(ctx context.Context) (string, error)

GetBackupS3Bucket returns the S3 bucket name used for file-level backups.

Pattern: prism-backups-{account-id}-{region} The bucket must exist and the instance IAM role needs s3:PutObject, s3:GetObject, s3:ListBucket, and s3:DeleteObject permissions.

func (*Manager) GetBillingInfo

func (m *Manager) GetBillingInfo() (*ctypes.BillingInfo, error)

GetBillingInfo retrieves current billing and credit information

func (*Manager) GetConnectionInfo

func (m *Manager) GetConnectionInfo(name string) (string, error)

GetConnectionInfo returns connection information for an instance with SSH key path

func (*Manager) GetDefaultRegion

func (m *Manager) GetDefaultRegion() string

GetDefaultRegion returns the default AWS region

func (*Manager) GetDiscountConfig

func (m *Manager) GetDiscountConfig() ctypes.DiscountConfig

GetDiscountConfig returns the current discount configuration

func (*Manager) GetEBSVolumeState added in v0.7.7

func (m *Manager) GetEBSVolumeState(volumeID string) (string, error)

GetEBSVolumeState gets the current state of an EBS volume from AWS

func (*Manager) GetEFSVolumeState added in v0.7.7

func (m *Manager) GetEFSVolumeState(fileSystemID string) (string, error)

GetEFSVolumeState gets the current state of an EFS volume from AWS

func (*Manager) GetHealthMonitor added in v0.7.0

func (m *Manager) GetHealthMonitor() *HealthMonitor

GetHealthMonitor returns the health monitor

func (*Manager) GetInstance

func (m *Manager) GetInstance(instanceID string) (*ctypes.Instance, error)

GetInstance retrieves real-time information for a specific instance from AWS

func (*Manager) GetInstanceConsoleOutput

func (m *Manager) GetInstanceConsoleOutput(instanceID string) (string, error)

GetInstanceConsoleOutput retrieves console output logs from an EC2 instance

func (*Manager) GetInstanceHibernationStatus

func (m *Manager) GetInstanceHibernationStatus(name string) (bool, string, bool, error)

GetInstanceHibernationStatus returns hibernation support, current state, and whether it might be hibernated

func (*Manager) GetInstanceID added in v0.6.0

func (m *Manager) GetInstanceID(name string) (string, error)

GetInstanceID returns the AWS instance ID for a given instance name (implements idle.AWSInstanceManager interface)

func (*Manager) GetInstanceNames added in v0.6.0

func (m *Manager) GetInstanceNames() ([]string, error)

GetInstanceNames returns a list of all instance names (implements idle.AWSInstanceManager interface)

func (*Manager) GetInstanceSnapshotInfo

func (m *Manager) GetInstanceSnapshotInfo(snapshotName string) (*ctypes.InstanceSnapshotInfo, error)

GetInstanceSnapshotInfo gets detailed information about a specific snapshot

func (*Manager) GetInstanceSystemLogs

func (m *Manager) GetInstanceSystemLogs(instanceID string, logType string) ([]string, error)

GetInstanceSystemLogs retrieves system logs via SSM (Systems Manager)

func (*Manager) GetOrCreatePrismSecurityGroup

func (m *Manager) GetOrCreatePrismSecurityGroup(vpcID string) (string, error)

GetOrCreatePrismSecurityGroup creates or finds the Prism security group

func (*Manager) GetQuotaManager added in v0.7.0

func (m *Manager) GetQuotaManager() *QuotaManager

GetQuotaManager returns the quota manager

func (*Manager) GetS3BackupInfo added in v0.7.7

func (m *Manager) GetS3BackupInfo(backupName string) (*types.BackupInfo, error)

GetS3BackupInfo retrieves the current state of an S3 file backup.

If the backup is still "creating", the method queries SSM for the command result and lazily updates the SSM parameter so subsequent calls are cheaper.

func (*Manager) GetSSMClient added in v0.7.0

func (m *Manager) GetSSMClient() SSMClientInterface

GetSSMClient returns the SSM client for direct use by components like SystemsManagerExecutor (Issue #421) This allows the executor to send commands and manage command execution via AWS Systems Manager.

func (*Manager) GetTemplate

func (m *Manager) GetTemplate(name string) (*ctypes.Template, error)

GetTemplate returns a specific template

func (*Manager) GetTemplates

func (m *Manager) GetTemplates() map[string]ctypes.Template

GetTemplates returns all available templates

func (*Manager) GetTemporaryS3Bucket added in v0.7.0

func (m *Manager) GetTemporaryS3Bucket(ctx context.Context) (string, error)

GetTemporaryS3Bucket returns the S3 bucket name to use for temporary file storage in SSM operations (Issue #421)

SSM doesn't support direct file transfer, so file operations (CopyFile/GetFile) use S3 as intermediate storage. This method returns a deterministic bucket name based on the AWS account and region:

Pattern: prism-temp-{account-id}-{region}
Example: prism-temp-123456789012-us-west-2

IMPORTANT: This bucket must be created manually or via infrastructure automation before using SSM file operations. The instance's IAM role must have s3:PutObject, s3:GetObject, and s3:DeleteObject permissions for this bucket.

Recommended bucket configuration:

  • Lifecycle policy: Delete objects after 1 day
  • Encryption: AES-256 (SSE-S3)
  • Versioning: Disabled
  • Public access: Blocked

func (*Manager) HibernateInstance

func (m *Manager) HibernateInstance(name string) error

func (*Manager) LaunchInstance

func (m *Manager) LaunchInstance(req ctypes.LaunchRequest) (*ctypes.Instance, error)

LaunchInstance launches a new EC2 instance

func (*Manager) LaunchInstanceWithAMI

func (m *Manager) LaunchInstanceWithAMI(req types.LaunchRequest) (*types.Instance, error)

LaunchInstanceWithAMI launches an instance using AMI resolution

func (*Manager) LaunchInstanceWithContext added in v0.7.3

func (m *Manager) LaunchInstanceWithContext(ctx context.Context, req ctypes.LaunchRequest) (*ctypes.Instance, error)

func (*Manager) ListAMISnapshots

func (m *Manager) ListAMISnapshots(instanceID, maxAge string) ([]types.SnapshotInfo, error)

ListAMISnapshots lists available snapshots

func (*Manager) ListEBSVolumes added in v0.7.7

func (m *Manager) ListEBSVolumes() ([]ctypes.StorageVolume, error)

ListEBSVolumes lists all EBS volumes with Prism tag

func (*Manager) ListEFSVolumes added in v0.7.7

func (m *Manager) ListEFSVolumes() ([]ctypes.StorageVolume, error)

ListEFSVolumes lists all EFS file systems with Prism tag

func (*Manager) ListInstanceSnapshots

func (m *Manager) ListInstanceSnapshots() ([]ctypes.InstanceSnapshotInfo, error)

ListInstanceSnapshots lists all Prism instance snapshots (AMIs)

func (*Manager) ListInstances

func (m *Manager) ListInstances() ([]ctypes.Instance, error)

ListInstances returns all Prism instances using Strategy Pattern (SOLID: Single Responsibility)

func (*Manager) ListPrismKeyPairs

func (m *Manager) ListPrismKeyPairs() ([]string, error)

ListPrismKeyPairs lists all SSH key pairs managed by Prism

func (*Manager) ListS3FileBackups added in v0.7.7

func (m *Manager) ListS3FileBackups() ([]types.BackupInfo, error)

ListS3FileBackups returns all S3 file backups stored in SSM Parameter Store.

func (*Manager) ListUserAMIs

func (m *Manager) ListUserAMIs() ([]*types.AMIInfo, error)

ListUserAMIs lists AMIs created by the user

func (*Manager) MountVolume

func (m *Manager) MountVolume(volumeName, instanceName, mountPoint string) error

MountVolume mounts an EFS volume to an instance

func (*Manager) PreviewAMIResolution

func (m *Manager) PreviewAMIResolution(templateName string) (*types.AMIResolutionResult, error)

PreviewAMIResolution shows what would happen during AMI resolution without actually resolving

func (*Manager) PublishAMIToCommunity

func (m *Manager) PublishAMIToCommunity(amiID string, public bool, tags map[string]string) error

PublishAMIToCommunity makes an AMI available to the community

func (*Manager) ResizeInstance

func (m *Manager) ResizeInstance(resizeRequest ctypes.ResizeRequest) (*ctypes.ResizeResponse, error)

ResizeInstance orchestrates instance resize with extracted helper methods

func (*Manager) ResolveAMIForTemplate

func (m *Manager) ResolveAMIForTemplate(templateName string) (*types.AMIResolutionResult, error)

ResolveAMIForTemplate resolves AMI information for a template using the Universal AMI System

func (*Manager) RestoreAMIFromSnapshot

func (m *Manager) RestoreAMIFromSnapshot(snapshotID, name, description, architecture string) (*types.AMIRestoreResult, error)

RestoreAMIFromSnapshot creates an AMI from a snapshot

func (*Manager) RestoreInstanceFromSnapshot

func (m *Manager) RestoreInstanceFromSnapshot(snapshotName, newInstanceName string) (*ctypes.InstanceRestoreResult, error)

RestoreInstanceFromSnapshot launches a new instance from a snapshot

func (*Manager) ResumeInstance

func (m *Manager) ResumeInstance(name string) error

ResumeInstance resumes a hibernated instance (same as StartInstance for hibernated instances)

func (*Manager) ScanZombieResources added in v0.5.11

func (m *Manager) ScanZombieResources(ctx context.Context) (*ZombieScanResult, error)

ScanZombieResources detects AWS resources without Prism management tags

func (*Manager) SetAMIDiscovery added in v0.7.7

func (m *Manager) SetAMIDiscovery(discovery *AMIDiscovery)

SetAMIDiscovery sets the AMI discovery service (for testing purposes - Issue #455) Allows injecting mock AMI discovery for unit tests

func (*Manager) SetDiscountConfig

func (m *Manager) SetDiscountConfig(config ctypes.DiscountConfig)

SetDiscountConfig configures pricing discounts for various AWS services

func (*Manager) StartInstance

func (m *Manager) StartInstance(name string) error

StartInstance starts a stopped EC2 instance

func (*Manager) StopInstance

func (m *Manager) StopInstance(name string) error

StopInstance stops a running EC2 instance

func (*Manager) TestAMIAvailability

func (m *Manager) TestAMIAvailability(templateName string, regions []string) (*types.AMITestResult, error)

TestAMIAvailability tests AMI availability for a template across regions

func (*Manager) UnmountVolume

func (m *Manager) UnmountVolume(volumeName, instanceName string) error

UnmountVolume unmounts an EFS volume from an instance

type ManagerOptions

type ManagerOptions struct {
	Profile string // AWS profile name
	Region  string // AWS region
}

ManagerOptions contains optional parameters for creating a new Manager

type MockSSMClient added in v0.7.7

type MockSSMClient struct {
	SendCommandFunc                 func(ctx context.Context, params *ssm.SendCommandInput) (*ssm.SendCommandOutput, error)
	GetCommandInvocationFunc        func(ctx context.Context, params *ssm.GetCommandInvocationInput) (*ssm.GetCommandInvocationOutput, error)
	DescribeInstanceInformationFunc func(ctx context.Context, params *ssm.DescribeInstanceInformationInput) (*ssm.DescribeInstanceInformationOutput, error)
	PutParameterFunc                func(ctx context.Context, params *ssm.PutParameterInput) (*ssm.PutParameterOutput, error)
	GetParameterFunc                func(ctx context.Context, params *ssm.GetParameterInput) (*ssm.GetParameterOutput, error)
	DeleteParameterFunc             func(ctx context.Context, params *ssm.DeleteParameterInput) (*ssm.DeleteParameterOutput, error)
	GetParametersByPathFunc         func(ctx context.Context, params *ssm.GetParametersByPathInput) (*ssm.GetParametersByPathOutput, error)
}

MockSSMClient provides a mock implementation of SSMClientInterface for testing. This is exported so it can be used by other packages for testing purposes.

func (*MockSSMClient) DeleteParameter added in v0.7.7

func (m *MockSSMClient) DeleteParameter(ctx context.Context, params *ssm.DeleteParameterInput, optFns ...func(*ssm.Options)) (*ssm.DeleteParameterOutput, error)

func (*MockSSMClient) DescribeInstanceInformation added in v0.7.7

func (m *MockSSMClient) DescribeInstanceInformation(ctx context.Context, params *ssm.DescribeInstanceInformationInput, optFns ...func(*ssm.Options)) (*ssm.DescribeInstanceInformationOutput, error)

func (*MockSSMClient) GetCommandInvocation added in v0.7.7

func (m *MockSSMClient) GetCommandInvocation(ctx context.Context, params *ssm.GetCommandInvocationInput, optFns ...func(*ssm.Options)) (*ssm.GetCommandInvocationOutput, error)

func (*MockSSMClient) GetParameter added in v0.7.7

func (m *MockSSMClient) GetParameter(ctx context.Context, params *ssm.GetParameterInput, optFns ...func(*ssm.Options)) (*ssm.GetParameterOutput, error)

func (*MockSSMClient) GetParametersByPath added in v0.7.7

func (m *MockSSMClient) GetParametersByPath(ctx context.Context, params *ssm.GetParametersByPathInput, optFns ...func(*ssm.Options)) (*ssm.GetParametersByPathOutput, error)

func (*MockSSMClient) PutParameter added in v0.7.7

func (m *MockSSMClient) PutParameter(ctx context.Context, params *ssm.PutParameterInput, optFns ...func(*ssm.Options)) (*ssm.PutParameterOutput, error)

func (*MockSSMClient) SendCommand added in v0.7.7

func (m *MockSSMClient) SendCommand(ctx context.Context, params *ssm.SendCommandInput, optFns ...func(*ssm.Options)) (*ssm.SendCommandOutput, error)

type NetworkingResolver

type NetworkingResolver struct {
	// contains filtered or unexported fields
}

NetworkingResolver resolves VPC, subnet, and security group (Single Responsibility - SOLID)

func (*NetworkingResolver) ResolveNetworking

func (n *NetworkingResolver) ResolveNetworking(req ctypes.LaunchRequest, instanceType string) (string, string, string, error)

ResolveNetworking determines VPC, subnet, and security group for launch

type PricingCache

type PricingCache struct {
	// contains filtered or unexported fields
}

PricingCache caches AWS pricing data to avoid repeated API calls

func NewPricingCache

func NewPricingCache() *PricingCache

NewPricingCache creates a new pricing cache with 24-hour TTL

func (*PricingCache) Get

func (c *PricingCache) Get(region, instanceType string) (float64, bool)

Get retrieves a cached price if available and not expired

func (*PricingCache) Set

func (c *PricingCache) Set(region, instanceType string, price float64)

Set stores a price in the cache

type PricingClient

type PricingClient struct {
	// contains filtered or unexported fields
}

PricingClient wraps AWS Pricing API with caching

func NewPricingClient

func NewPricingClient(cfg aws.Config) *PricingClient

NewPricingClient creates a new pricing client with the given AWS config

func (*PricingClient) GetEBSVolumeHourlyRate

func (p *PricingClient) GetEBSVolumeHourlyRate(volumeType string, sizeGB int) float64

GetEBSVolumeHourlyRate calculates the hourly cost for an EBS volume

func (*PricingClient) GetInstanceHourlyRate

func (p *PricingClient) GetInstanceHourlyRate(ctx context.Context, region, instanceType string) (float64, error)

GetInstanceHourlyRate fetches the on-demand hourly rate for an instance type in a region

type QuotaCacheEntry added in v0.7.0

type QuotaCacheEntry struct {
	Value      float64
	LastUpdate time.Time
}

QuotaCacheEntry holds cached quota information

type QuotaCheck added in v0.5.11

type QuotaCheck struct {
	HasSufficientQuota bool
	RequiredVCPUs      int
	CurrentUsage       int
	QuotaLimit         int
	AvailableVCPUs     int
	WarningMessage     string
	InstanceType       string
}

QuotaCheck represents the result of a quota validation check

type QuotaIncreaseRequest added in v0.7.0

type QuotaIncreaseRequest struct {
	ServiceCode     string
	QuotaCode       string
	QuotaName       string
	CurrentValue    float64
	DesiredValue    float64
	InstanceType    string
	Reason          string
	Region          string
	SupportCaseURL  string
	QuickRequestURL string
}

QuotaIncreaseRequest represents a quota increase request

type QuotaInfo added in v0.7.0

type QuotaInfo struct {
	ServiceCode  string
	QuotaCode    string
	QuotaName    string
	Value        float64
	UsageValue   float64
	UsagePercent float64
	IsAdjustable bool
	Unit         string
}

QuotaInfo provides detailed quota information

type QuotaManager added in v0.7.0

type QuotaManager struct {
	// contains filtered or unexported fields
}

QuotaManager handles AWS quota awareness and validation

func NewQuotaManager added in v0.7.0

func NewQuotaManager(cfg aws.Config, region string) *QuotaManager

NewQuotaManager creates a new quota manager

func (*QuotaManager) ClearCache added in v0.7.0

func (qm *QuotaManager) ClearCache()

ClearCache clears the quota cache (useful for testing or after quota changes)

func (*QuotaManager) GetQuotaInfo added in v0.7.0

func (qm *QuotaManager) GetQuotaInfo(ctx context.Context, serviceCode, quotaCode string) (*QuotaInfo, error)

GetQuotaInfo retrieves detailed information about a specific quota

func (*QuotaManager) ListRelevantQuotas added in v0.7.0

func (qm *QuotaManager) ListRelevantQuotas(ctx context.Context) ([]*QuotaInfo, error)

ListRelevantQuotas returns a list of EC2 quotas relevant to Prism users

func (*QuotaManager) ValidateInstanceLaunch added in v0.7.0

func (qm *QuotaManager) ValidateInstanceLaunch(ctx context.Context, instanceType string) (*QuotaValidationResult, error)

ValidateInstanceLaunch performs pre-launch quota validation

type QuotaRequestHelper added in v0.7.0

type QuotaRequestHelper struct {
	// contains filtered or unexported fields
}

QuotaRequestHelper assists users with quota increase requests

func NewQuotaRequestHelper added in v0.7.0

func NewQuotaRequestHelper(manager *QuotaManager, region string) *QuotaRequestHelper

NewQuotaRequestHelper creates a new quota request helper

func (*QuotaRequestHelper) DetectQuotaError added in v0.7.0

func (qrh *QuotaRequestHelper) DetectQuotaError(err error) (*QuotaIncreaseRequest, bool)

DetectQuotaError analyzes an AWS error to determine if it's quota-related

func (*QuotaRequestHelper) ExplainQuotaError added in v0.7.0

func (qrh *QuotaRequestHelper) ExplainQuotaError(ctx context.Context, err error, instanceType string) string

ExplainQuotaError provides a user-friendly explanation of a quota error

func (*QuotaRequestHelper) FormatQuotaRequest added in v0.7.0

func (qrh *QuotaRequestHelper) FormatQuotaRequest(request *QuotaIncreaseRequest) string

FormatQuotaRequest formats a quota increase request for display

func (*QuotaRequestHelper) GenerateGuidance added in v0.7.0

func (qrh *QuotaRequestHelper) GenerateGuidance(request *QuotaIncreaseRequest) string

GenerateGuidance provides step-by-step guidance for requesting a quota increase

func (*QuotaRequestHelper) GenerateQuotaIncreaseRequest added in v0.7.0

func (qrh *QuotaRequestHelper) GenerateQuotaIncreaseRequest(ctx context.Context, instanceType string) (*QuotaIncreaseRequest, error)

GenerateQuotaIncreaseRequest creates a detailed quota increase request

type QuotaValidationResult added in v0.7.0

type QuotaValidationResult struct {
	IsValid           bool
	QuotaType         string
	CurrentUsage      int
	QuotaLimit        int
	RequiredCapacity  int
	AvailableCapacity int
	UsagePercent      float64
	Warning           string
	SuggestedAction   string
}

QuotaValidationResult provides detailed validation results

type RegionHealthSummary added in v0.7.0

type RegionHealthSummary struct {
	Regions         map[string]*HealthStatus
	HealthyRegions  []string
	AffectedRegions []string
	TotalEvents     int
}

RegionHealthSummary provides a summary of health across all monitored regions

type RetryConfig added in v0.5.11

type RetryConfig struct {
	MaxAttempts     int           // Maximum number of retry attempts (default: 3)
	InitialDelay    time.Duration // Initial delay before first retry (default: 1s)
	MaxDelay        time.Duration // Maximum delay between retries (default: 30s)
	Multiplier      float64       // Exponential backoff multiplier (default: 2.0)
	JitterFraction  float64       // Jitter as fraction of delay (default: 0.1 = 10%)
	RetryableErrors []string      // Additional retryable error patterns
}

RetryConfig configures retry behavior for AWS operations

func DefaultRetryConfig added in v0.5.11

func DefaultRetryConfig() *RetryConfig

DefaultRetryConfig returns the default retry configuration

type RetryMetrics added in v0.5.11

type RetryMetrics struct {
	TotalOperations   int
	SuccessfulRetries int
	FailedRetries     int
	AverageAttempts   float64
}

RetryMetrics tracks retry statistics

type RetryTracker added in v0.5.11

type RetryTracker struct {
	// contains filtered or unexported fields
}

RetryTracker tracks retry metrics for monitoring

func NewRetryTracker added in v0.5.11

func NewRetryTracker() *RetryTracker

NewRetryTracker creates a new retry tracker

func (*RetryTracker) GetMetrics added in v0.5.11

func (t *RetryTracker) GetMetrics() RetryMetrics

GetMetrics returns current retry metrics

func (*RetryTracker) RecordFailure added in v0.5.11

func (t *RetryTracker) RecordFailure(attempts int)

RecordFailure records a failed operation (after all retries exhausted)

func (*RetryTracker) RecordSuccess added in v0.5.11

func (t *RetryTracker) RecordSuccess(attempts int)

RecordSuccess records a successful operation (with retry count)

type RetryableOperation added in v0.5.11

type RetryableOperation func(ctx context.Context) error

RetryableOperation is a function that can be retried

type S3BackupMetadata added in v0.7.7

type S3BackupMetadata struct {
	BackupName   string     `json:"backup_name"`
	InstanceName string     `json:"instance_name"`
	InstanceID   string     `json:"instance_id"`
	SSMCommandID string     `json:"ssm_command_id"`
	S3Bucket     string     `json:"s3_bucket"`
	S3Prefix     string     `json:"s3_prefix"`
	IncludePaths []string   `json:"include_paths,omitempty"`
	ExcludePaths []string   `json:"exclude_paths,omitempty"`
	CreatedAt    time.Time  `json:"created_at"`
	CompletedAt  *time.Time `json:"completed_at,omitempty"`
	State        string     `json:"state"` // "creating", "available", "error"
	ErrorMessage string     `json:"error_message,omitempty"`
	SizeBytes    int64      `json:"size_bytes,omitempty"`
	FileCount    int        `json:"file_count,omitempty"`
}

S3BackupMetadata stores backup state in SSM Parameter Store.

type SSMClientInterface

type SSMClientInterface interface {
	SendCommand(ctx context.Context, params *ssm.SendCommandInput, optFns ...func(*ssm.Options)) (*ssm.SendCommandOutput, error)
	GetCommandInvocation(ctx context.Context, params *ssm.GetCommandInvocationInput, optFns ...func(*ssm.Options)) (*ssm.GetCommandInvocationOutput, error)
	DescribeInstanceInformation(ctx context.Context, params *ssm.DescribeInstanceInformationInput, optFns ...func(*ssm.Options)) (*ssm.DescribeInstanceInformationOutput, error)
	PutParameter(ctx context.Context, params *ssm.PutParameterInput, optFns ...func(*ssm.Options)) (*ssm.PutParameterOutput, error)
	GetParameter(ctx context.Context, params *ssm.GetParameterInput, optFns ...func(*ssm.Options)) (*ssm.GetParameterOutput, error)
	DeleteParameter(ctx context.Context, params *ssm.DeleteParameterInput, optFns ...func(*ssm.Options)) (*ssm.DeleteParameterOutput, error)
	GetParametersByPath(ctx context.Context, params *ssm.GetParametersByPathInput, optFns ...func(*ssm.Options)) (*ssm.GetParametersByPathOutput, error)
}

SSMClientInterface defines the interface for SSM client operations.

type STSClientInterface

type STSClientInterface interface {
	GetCallerIdentity(ctx context.Context, params *sts.GetCallerIdentityInput, optFns ...func(*sts.Options)) (*sts.GetCallerIdentityOutput, error)
}

STSClientInterface defines the interface for STS client operations.

type StateLoader

type StateLoader struct{}

StateLoader loads local state for instance merging (Single Responsibility - SOLID)

func (*StateLoader) LoadLocalState

func (l *StateLoader) LoadLocalState() *ctypes.State

LoadLocalState attempts to load local state for deletion timestamp merging

type StateManagerInterface

type StateManagerInterface interface {
	LoadState() (*types.State, error)
	SaveState(*types.State) error
	SaveInstance(types.Instance) error
	RemoveInstance(string) error
	SaveStorageVolume(types.StorageVolume) error
	RemoveStorageVolume(string) error
	UpdateConfig(types.Config) error
}

StateManagerInterface defines the interface for state operations.

type TemplateConfigExtractor

type TemplateConfigExtractor struct {
	// contains filtered or unexported fields
}

TemplateConfigExtractor extracts configuration from unified template (Single Responsibility - SOLID)

func (*TemplateConfigExtractor) ExtractConfig

func (e *TemplateConfigExtractor) ExtractConfig(template *ctypes.RuntimeTemplate, arch string) (string, string, float64, error)

ExtractConfig extracts AMI, instance type, and cost from template

type UniversalAMIResolver

type UniversalAMIResolver struct {
	// contains filtered or unexported fields
}

UniversalAMIResolver implements multi-tier AMI resolution for Prism templates

func NewUniversalAMIResolver

func NewUniversalAMIResolver(ec2Client EC2ClientInterface) *UniversalAMIResolver

NewUniversalAMIResolver creates a new Universal AMI resolver

func (*UniversalAMIResolver) CreateAMIFromInstance

func (r *UniversalAMIResolver) CreateAMIFromInstance(ctx context.Context, request *types.AMICreationRequest) (*types.AMICreationResult, error)

CreateAMIFromInstance creates an AMI from a running instance

func (*UniversalAMIResolver) GetAMICreationStatus

func (r *UniversalAMIResolver) GetAMICreationStatus(ctx context.Context, amiID string) (*types.AMICreationResult, error)

GetAMICreationStatus checks the status of AMI creation

func (*UniversalAMIResolver) ResolveAMI

func (r *UniversalAMIResolver) ResolveAMI(ctx context.Context, template *templates.Template, region string) (*types.AMIResolutionResult, error)

ResolveAMI performs multi-tier AMI resolution for a template in a specific region

type UserDataProcessor

type UserDataProcessor struct {
	// contains filtered or unexported fields
}

UserDataProcessor processes and configures user data (Single Responsibility - SOLID)

func (*UserDataProcessor) ProcessUserData

func (p *UserDataProcessor) ProcessUserData(template *ctypes.RuntimeTemplate, req ctypes.LaunchRequest) string

ProcessUserData configures and encodes user data for instance launch

type ZombieInstance added in v0.5.11

type ZombieInstance struct {
	InstanceID   string
	State        string
	InstanceType string
	LaunchTime   time.Time
	Name         string
	MonthlyCost  float64
}

ZombieInstance represents an EC2 instance without Prism management tags

type ZombieScanResult added in v0.5.11

type ZombieScanResult struct {
	Instances           []ZombieInstance
	Volumes             []ZombieVolume
	PrismInstancesCount int
	TotalMonthlyCost    float64
	Region              string
	ScanTime            time.Time
}

ZombieScanResult contains detected zombie resources

type ZombieVolume added in v0.5.11

type ZombieVolume struct {
	VolumeID    string
	SizeGB      int32
	CreateTime  time.Time
	MonthlyCost float64
}

ZombieVolume represents an unattached EBS volume

Directories

Path Synopsis
Package localstack provides LocalStack integration for offline AWS testing
Package localstack provides LocalStack integration for offline AWS testing

Jump to

Keyboard shortcuts

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