This commit is contained in:
@@ -54,25 +54,66 @@ type Image struct {
|
||||
DisplayName string `json:"display_name"`
|
||||
DisplayIntro string `json:"display_intro"`
|
||||
AvailabilityStatus string `json:"availability_status"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Architecture string `json:"architecture"`
|
||||
Platform string `json:"platform,omitempty"`
|
||||
PlatformDetails string `json:"platform_details,omitempty"`
|
||||
OSFamily string `json:"os_family,omitempty"`
|
||||
RecommendedUser string `json:"recommended_user,omitempty"`
|
||||
CreationDate string `json:"creation_date,omitempty"`
|
||||
DeprecationTime string `json:"deprecation_time,omitempty"`
|
||||
OwnerID string `json:"owner_id,omitempty"`
|
||||
OwnerAlias string `json:"owner_alias,omitempty"`
|
||||
RootDeviceType string `json:"root_device_type,omitempty"`
|
||||
RootDeviceName string `json:"root_device_name,omitempty"`
|
||||
RootSnapshotID string `json:"root_snapshot_id,omitempty"`
|
||||
RootVolumeSizeGiB int32 `json:"root_volume_size_gib,omitempty"`
|
||||
RootVolumeType string `json:"root_volume_type,omitempty"`
|
||||
VirtualizationType string `json:"virtualization_type,omitempty"`
|
||||
Hypervisor string `json:"hypervisor,omitempty"`
|
||||
BootMode string `json:"boot_mode,omitempty"`
|
||||
IMDSSupport string `json:"imds_support,omitempty"`
|
||||
UsageOperation string `json:"usage_operation,omitempty"`
|
||||
ENASupport bool `json:"ena_support"`
|
||||
Public bool `json:"public"`
|
||||
ProductCodes []string `json:"product_codes,omitempty"`
|
||||
Metadata map[string]any `json:"metadata"`
|
||||
}
|
||||
|
||||
type GPUDeviceInfo struct {
|
||||
Manufacturer string `json:"manufacturer,omitempty"`
|
||||
Name string `json:"name,omitempty"`
|
||||
Count int32 `json:"count"`
|
||||
LogicalCount int32 `json:"logical_count,omitempty"`
|
||||
PartitionSize float64 `json:"partition_size,omitempty"`
|
||||
MemoryMiB int32 `json:"memory_mib,omitempty"`
|
||||
SupportedWorkloads []string `json:"supported_workloads,omitempty"`
|
||||
}
|
||||
|
||||
type InstanceType struct {
|
||||
ID string `json:"id"`
|
||||
Region string `json:"region"`
|
||||
CategoryID string `json:"category_id"`
|
||||
InstanceType string `json:"instance_type"`
|
||||
DisplayName string `json:"display_name"`
|
||||
Description string `json:"description"`
|
||||
VCPUs int32 `json:"vcpus"`
|
||||
MemoryMiB int64 `json:"memory_mib"`
|
||||
Architectures []string `json:"architectures"`
|
||||
NetworkPerformance string `json:"network_performance"`
|
||||
GPUCount float64 `json:"gpu_count"`
|
||||
OSPrices map[string]float64 `json:"os_prices"`
|
||||
HourlyRate float64 `json:"hourly_rate"`
|
||||
Currency string `json:"currency"`
|
||||
PriceMode string `json:"price_mode"`
|
||||
PriceValue float64 `json:"price_value"`
|
||||
ID string `json:"id"`
|
||||
Region string `json:"region"`
|
||||
CategoryID string `json:"category_id"`
|
||||
InstanceType string `json:"instance_type"`
|
||||
DisplayName string `json:"display_name"`
|
||||
Description string `json:"description"`
|
||||
VCPUs int32 `json:"vcpus"`
|
||||
MemoryMiB int64 `json:"memory_mib"`
|
||||
Architectures []string `json:"architectures"`
|
||||
NetworkPerformance string `json:"network_performance"`
|
||||
NetworkBaselineGbps float64 `json:"network_baseline_gbps"`
|
||||
NetworkPeakGbps float64 `json:"network_peak_gbps"`
|
||||
GPUCount float64 `json:"gpu_count"`
|
||||
GPUMemoryMiB int64 `json:"gpu_memory_mib"`
|
||||
GPUs []GPUDeviceInfo `json:"gpus"`
|
||||
CurrentGeneration bool `json:"current_generation"`
|
||||
BurstablePerformance bool `json:"burstable_performance"`
|
||||
FreeTierEligible bool `json:"free_tier_eligible"`
|
||||
OSPrices map[string]float64 `json:"os_prices"`
|
||||
HourlyRate float64 `json:"hourly_rate"`
|
||||
Currency string `json:"currency"`
|
||||
PriceMode string `json:"price_mode"`
|
||||
PriceValue float64 `json:"price_value"`
|
||||
}
|
||||
type CreateOptions struct {
|
||||
Region string `json:"region"`
|
||||
@@ -121,6 +162,43 @@ type PriceEstimate struct {
|
||||
ResourceSyncedAt time.Time `json:"resource_synced_at,omitempty"`
|
||||
Raw map[string]any `json:"-"`
|
||||
}
|
||||
|
||||
const (
|
||||
InstanceChangeEIPAdd = "eip_add"
|
||||
InstanceChangeVolumeCreate = "volume_create"
|
||||
InstanceChangeVolumeExpand = "volume_expand"
|
||||
InstanceChangeRebuildImage = "rebuild_image"
|
||||
InstanceChangeTrafficLimit = "traffic_limit"
|
||||
)
|
||||
|
||||
type InstanceChangePriceRequest struct {
|
||||
Kind string `json:"kind"`
|
||||
PeriodEnd time.Time `json:"period_end"`
|
||||
VolumeID string `json:"volume_id,omitempty"`
|
||||
Volume *CreateVolumeRequest `json:"volume,omitempty"`
|
||||
SizeGiB int32 `json:"size_gib,omitempty"`
|
||||
ImageID string `json:"image_id,omitempty"`
|
||||
LimitGiB *float64 `json:"limit_gib,omitempty"`
|
||||
}
|
||||
|
||||
type InstanceChangePriceEstimate struct {
|
||||
Kind string `json:"kind"`
|
||||
Currency string `json:"currency"`
|
||||
QuotedAt time.Time `json:"quoted_at"`
|
||||
ValidUntil time.Time `json:"valid_until"`
|
||||
PeriodEnd time.Time `json:"period_end"`
|
||||
CurrentMonthlyPrice float64 `json:"current_monthly_price"`
|
||||
TargetMonthlyPrice float64 `json:"target_monthly_price"`
|
||||
MonthlyDelta float64 `json:"monthly_delta"`
|
||||
CurrentPeriodPrice float64 `json:"current_period_price"`
|
||||
TargetPeriodPrice float64 `json:"target_period_price"`
|
||||
PeriodDelta float64 `json:"period_delta"`
|
||||
ChargePrice float64 `json:"charge_price"`
|
||||
ConfigurationFingerprint string `json:"configuration_fingerprint"`
|
||||
ResourceSyncedAt time.Time `json:"resource_synced_at"`
|
||||
NormalizedRequest InstanceChangePriceRequest `json:"normalized_request"`
|
||||
Breakdown map[string]any `json:"breakdown"`
|
||||
}
|
||||
type Instance struct {
|
||||
ID string `json:"id"`
|
||||
InstanceID string `json:"instance_id,omitempty"`
|
||||
@@ -143,7 +221,28 @@ type Instance struct {
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
type CatalogResourceDetails map[string]any
|
||||
|
||||
type InstanceDetails map[string]any
|
||||
|
||||
func (d InstanceDetails) InstanceTypeDetails() CatalogResourceDetails {
|
||||
return catalogResourceDetails(d["instance_type_details"])
|
||||
}
|
||||
|
||||
func (d InstanceDetails) ImageDetails() CatalogResourceDetails {
|
||||
return catalogResourceDetails(d["image_details"])
|
||||
}
|
||||
|
||||
func catalogResourceDetails(value any) CatalogResourceDetails {
|
||||
if details, ok := value.(map[string]any); ok {
|
||||
return CatalogResourceDetails(details)
|
||||
}
|
||||
if details, ok := value.(CatalogResourceDetails); ok {
|
||||
return details
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type Operation struct {
|
||||
client *Client
|
||||
ID string `json:"id"`
|
||||
|
||||
Reference in New Issue
Block a user