clusterconfig

package
v0.42.1 Latest Latest
Warning

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

Go to latest
Published: Sep 23, 2022 License: Apache-2.0 Imports: 28 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// MaxNodeGroups represents the max number of node groups in a cluster
	MaxNodeGroups = 100

	// MaxNodesToAddOnClusterUp represents the max number of nodes to add on cluster up
	// Limited to 200 nodes (rounded down from 248 nodes) for two reasons:
	//
	// * To prevent overloading the API servers when the nodes are being added.
	//
	// * To prevent hitting the 500 targets per LB (when the cross-load balancing is enabled) limit (quota code L-B211E961);
	//   500 divided by 2 target listeners - 1 operator node - 1 prometheus node => 248
	MaxNodesToAddOnClusterUp = 200

	// MaxNodesToAddOnClusterConfigure represents the max number of nodes to add on cluster up/configure
	MaxNodesToAddOnClusterConfigure = 100
	// ClusterNameTag is the tag used for storing a cluster's name in AWS resources
	ClusterNameTag = "cortex.dev/cluster-name"
	// SQSQueueDelimiter is the delimiter character used for naming cortex SQS queues (e.g. cx_<cluster_hash>_b_<api_name>_<jon_id>)
	// In this case, _ was chosen to simplify the retrieval of information for the queue's name,
	// since the api naming scheme does not allow this character.
	SQSQueueDelimiter = "_"
)
View Source
const (
	BucketKey     = "bucket"
	ClusterUIDKey = "cluster_uid"

	ClusterNameKey                         = "cluster_name"
	RegionKey                              = "region"
	PrometheusInstanceTypeKey              = "prometheus_instance_type"
	NodeGroupsKey                          = "node_groups"
	InstanceTypeKey                        = "instance_type"
	AcceleratorTypeKey                     = "accelerator_type"
	AcceleratorsPerInstanceKey             = "accelerators_per_instance"
	MinInstancesKey                        = "min_instances"
	MaxInstancesKey                        = "max_instances"
	PriorityKey                            = "priority"
	SpotKey                                = "spot"
	SpotConfigKey                          = "spot_config"
	InstanceDistributionKey                = "instance_distribution"
	OnDemandBaseCapacityKey                = "on_demand_base_capacity"
	OnDemandPercentageAboveBaseCapacityKey = "on_demand_percentage_above_base_capacity"
	InstanceVolumeSizeKey                  = "instance_volume_size"
	InstanceVolumeTypeKey                  = "instance_volume_type"
	InstanceVolumeIOPSKey                  = "instance_volume_iops"
	InstanceVolumeThroughputKey            = "instance_volume_throughput"
	InstancePoolsKey                       = "instance_pools"
	MaxPriceKey                            = "max_price"
	NetworkKey                             = "network"
	SubnetKey                              = "subnet"
	TagsKey                                = "tags"
	AvailabilityZonesKey                   = "availability_zones"
	SubnetsKey                             = "subnets"
	AvailabilityZoneKey                    = "availability_zone"
	SubnetIDKey                            = "subnet_id"
	SSLCertificateARNKey                   = "ssl_certificate_arn"
	CortexPolicyARNKey                     = "cortex_policy_arn"
	IAMPolicyARNsKey                       = "iam_policy_arns"
	SubnetVisibilityKey                    = "subnet_visibility"
	NATGatewayKey                          = "nat_gateway"
	APILoadBalancerSchemeKey               = "api_load_balancer_scheme"
	OperatorLoadBalancerSchemeKey          = "operator_load_balancer_scheme"
	APILoadBalancerCIDRWhiteListKey        = "api_load_balancer_cidr_white_list"
	OperatorLoadBalancerCIDRWhiteListKey   = "operator_load_balancer_cidr_white_list"
	VPCCIDRKey                             = "vpc_cidr"
	AccountIDKey                           = "account_id"
	TelemetryKey                           = "telemetry"
)
View Source
const (
	ErrInvalidProvider                        = "clusterconfig.invalid_provider"
	ErrInvalidLegacyProvider                  = "clusterconfig.invalid_legacy_provider"
	ErrDisallowedField                        = "clusterconfig.disallowed_field"
	ErrInvalidRegion                          = "clusterconfig.invalid_region"
	ErrNodeGroupMaxInstancesIsZero            = "clusterconfig.node_group_max_instances_is_zero"
	ErrMaxNumOfNodeGroupsReached              = "clusterconfig.max_num_of_nodegroups_reached"
	ErrDuplicateNodeGroupName                 = "clusterconfig.duplicate_nodegroup_name"
	ErrMaxNodesToAddOnClusterUp               = "clusterconfig.max_nodes_to_add_on_cluster_up"
	ErrMaxNodesToAddOnClusterConfigure        = "clusterconfig.max_nodes_to_add_on_cluster_configure"
	ErrInstanceTypeTooSmall                   = "clusterconfig.instance_type_too_small"
	ErrMinInstancesGreaterThanMax             = "clusterconfig.min_instances_greater_than_max"
	ErrInstanceTypeNotSupportedInRegion       = "clusterconfig.instance_type_not_supported_in_region"
	ErrIncompatibleSpotInstanceTypeMemory     = "clusterconfig.incompatible_spot_instance_type_memory"
	ErrIncompatibleSpotInstanceTypeCPU        = "clusterconfig.incompatible_spot_instance_type_cpu"
	ErrIncompatibleSpotInstanceTypeGPU        = "clusterconfig.incompatible_spot_instance_type_gpu"
	ErrIncompatibleSpotInstanceTypeInf        = "clusterconfig.incompatible_spot_instance_type_inf"
	ErrSpotPriceGreaterThanTargetOnDemand     = "clusterconfig.spot_price_greater_than_target_on_demand"
	ErrSpotPriceGreaterThanMaxPrice           = "clusterconfig.spot_price_greater_than_max_price"
	ErrInstanceTypeNotSupportedByCortex       = "clusterconfig.instance_type_not_supported_by_cortex"
	ErrAMDGPUInstancesNotSupported            = "clusterconfig.amd_gpu_instances_not_supported"
	ErrGPUInstancesNotSupported               = "clusterconfig.gpu_instance_not_supported"
	ErrInferentiaInstancesNotSupported        = "clusterconfig.inferentia_instances_not_supported"
	ErrMacInstancesNotSupported               = "clusterconfig.mac_instances_not_supported"
	ErrFPGAInstancesNotSupported              = "clusterconfig.fpga_instances_not_supported"
	ErrAlevoInstancesNotSupported             = "clusterconfig.alevo_instances_not_supported"
	ErrGaudiInstancesNotSupported             = "clusterconfig.gaudi_instances_not_supported"
	ErrTrainiumInstancesNotSupported          = "clusterconfig.trainium_instances_not_supported"
	ErrAtLeastOneInstanceDistribution         = "clusterconfig.at_least_one_instance_distribution"
	ErrNoCompatibleSpotInstanceFound          = "clusterconfig.no_compatible_spot_instance_found"
	ErrConfiguredWhenSpotIsNotEnabled         = "clusterconfig.configured_when_spot_is_not_enabled"
	ErrOnDemandBaseCapacityGreaterThanMax     = "clusterconfig.on_demand_base_capacity_greater_than_max"
	ErrInvalidAvailabilityZone                = "clusterconfig.invalid_availability_zone"
	ErrAvailabilityZoneSpecifiedTwice         = "clusterconfig.availability_zone_specified_twice"
	ErrUnsupportedAvailabilityZone            = "clusterconfig.unsupported_availability_zone"
	ErrNotEnoughValidDefaultAvailibilityZones = "clusterconfig.not_enough_valid_default_availability_zones"
	ErrNoNATGatewayWithSubnets                = "clusterconfig.no_nat_gateway_with_subnets"
	ErrSubnetMaskOutOfRange                   = "clusterconfig.subnet_mask_out_of_range"
	ErrConfigCannotBeChangedOnConfigure       = "clusterconfig.config_cannot_be_changed_on_configure"
	ErrNodeGroupCanOnlyBeScaled               = "clusterconfig.node_group_can_only_be_scaled"
	ErrSpecifyOneOrNone                       = "clusterconfig.specify_one_or_none"
	ErrSpecifyTwoOrNone                       = "clusterconfig.specify_two_or_none"
	ErrDependentFieldMustBeSpecified          = "clusterconfig.dependent_field_must_be_specified"
	ErrFieldConfigurationDependentOnCondition = "clusterconfig.field_configuration_dependent_on_condition"
	ErrDidNotMatchStrictS3Regex               = "clusterconfig.did_not_match_strict_s3_regex"
	ErrNATRequiredWithPrivateSubnetVisibility = "clusterconfig.nat_required_with_private_subnet_visibility"
	ErrS3RegionDiffersFromCluster             = "clusterconfig.s3_region_differs_from_cluster"
	ErrIOPSNotSupported                       = "clusterconfig.iops_not_supported"
	ErrThroughputNotSupported                 = "clusterconfig.throughput_not_supported"
	ErrIOPSTooSmall                           = "clusterconfig.iops_too_small"
	ErrIOPSTooLarge                           = "clusterconfig.iops_too_large"
	ErrIOPSToVolumeSizeRatio                  = "clusterconfig.iops_to_volume_size_ratio"
	ErrIOPSToThroughputRatio                  = "clusterconfig.iops_to_throughput_ratio"
	ErrCantOverrideDefaultTag                 = "clusterconfig.cant_override_default_tag"
	ErrSSLCertificateARNNotFound              = "clusterconfig.ssl_certificate_arn_not_found"
	ErrIAMPolicyARNNotFound                   = "clusterconfig.iam_policy_arn_not_found"
)

Variables

View Source
var AccessValidation = &cr.StructValidation{
	AllowExtraFields: true,
	StructFieldValidations: []*cr.StructFieldValidation{
		{
			StructField: "ClusterName",
			StringValidation: &cr.StringValidation{
				Default:   "cortex",
				MaxLength: 54,
				MinLength: 3,
				Validator: validateClusterName,
			},
		},
		{
			StructField: "Region",
			StringValidation: &cr.StringValidation{
				Required:  true,
				MinLength: 1,
				Validator: RegionValidator,
			},
		},
		{
			StructField: "ImageManager",
			StringValidation: &cr.StringValidation{
				Default:   consts.DefaultRegistry() + "/manager:" + consts.CortexVersion,
				Validator: validateImageVersion,
			},
		},
	},
}
View Source
var CoreConfigStructFieldValidations = []*cr.StructFieldValidation{
	{
		StructField: "ClusterName",
		StringValidation: &cr.StringValidation{
			Default:   "cortex",
			MaxLength: 54,
			MinLength: 3,
			Validator: validateClusterName,
		},
	},
	{
		StructField: "Region",
		StringValidation: &cr.StringValidation{
			Required:  true,
			MinLength: 1,
			Validator: RegionValidator,
		},
	},
	{
		StructField: "PrometheusInstanceType",
		StringValidation: &cr.StringValidation{
			MinLength: 1,
			Default:   "t3.medium",
			Validator: validatePrometheusInstanceType,
		},
	},
	{
		StructField: "Telemetry",
		BoolValidation: &cr.BoolValidation{
			Default: true,
		},
	},
	{
		StructField: "ImageOperator",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/operator:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageControllerManager",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/controller-manager:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageManager",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/manager:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageKubexit",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/kubexit:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageProxy",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/proxy:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageActivator",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/activator:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageAutoscaler",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/autoscaler:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageAsyncGateway",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/async-gateway:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageEnqueuer",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/enqueuer:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageDequeuer",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/dequeuer:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageClusterAutoscaler",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/cluster-autoscaler:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageMetricsServer",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/metrics-server:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageNvidiaDevicePlugin",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/nvidia-device-plugin:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageNeuronDevicePlugin",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/neuron-device-plugin:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageNeuronScheduler",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/neuron-scheduler:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageFluentBit",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/fluent-bit:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageIstioProxy",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/istio-proxy:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageIstioPilot",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/istio-pilot:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImagePrometheus",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/prometheus:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImagePrometheusConfigReloader",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/prometheus-config-reloader:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImagePrometheusOperator",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/prometheus-operator:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImagePrometheusStatsDExporter",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/prometheus-statsd-exporter:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImagePrometheusDCGMExporter",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/prometheus-dcgm-exporter:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImagePrometheusKubeStateMetrics",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/prometheus-kube-state-metrics:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImagePrometheusNodeExporter",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/prometheus-node-exporter:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageKubeRBACProxy",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/kube-rbac-proxy:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageGrafana",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/grafana:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "ImageEventExporter",
		StringValidation: &cr.StringValidation{
			Default:   consts.DefaultRegistry() + "/event-exporter:" + consts.CortexVersion,
			Validator: validateImageVersion,
		},
	},
	{
		StructField: "NodeGroups",
		StructListValidation: &cr.StructListValidation{
			AllowExplicitNull: true,
			TreatNullAsEmpty:  true,
			StructValidation:  nodeGroupsFieldValidation,
		},
	},
	{
		StructField: "Tags",
		StringMapValidation: &cr.StringMapValidation{
			AllowExplicitNull:  true,
			AllowEmpty:         true,
			ConvertNullToEmpty: true,
			KeyStringValidator: &cr.StringValidation{
				MinLength:                  1,
				MaxLength:                  127,
				DisallowLeadingWhitespace:  true,
				DisallowTrailingWhitespace: true,
				InvalidPrefixes:            _invalidTagPrefixes,
				AWSTag:                     true,
			},
			ValueStringValidator: &cr.StringValidation{
				MinLength:                  1,
				MaxLength:                  255,
				DisallowLeadingWhitespace:  true,
				DisallowTrailingWhitespace: true,
				InvalidPrefixes:            _invalidTagPrefixes,
				AWSTag:                     true,
			},
		},
	},
	{
		StructField: "SSLCertificateARN",
		StringPtrValidation: &cr.StringPtrValidation{
			AllowExplicitNull: true,
		},
	},
	{
		StructField: "IAMPolicyARNs",
		StringListValidation: &cr.StringListValidation{
			Default:           _defaultIAMPolicies,
			AllowEmpty:        true,
			AllowExplicitNull: true,
		},
	},
	{
		StructField: "AvailabilityZones",
		StringListValidation: &cr.StringListValidation{
			AllowEmpty:        true,
			AllowExplicitNull: true,
			DisallowDups:      true,
			InvalidLengths:    []int{1},
		},
	},
	{
		StructField: "SubnetVisibility",
		StringValidation: &cr.StringValidation{
			AllowedValues: SubnetVisibilityStrings(),
			Default:       PublicSubnetVisibility.String(),
		},
		Parser: func(str string) (interface{}, error) {
			return SubnetVisibilityFromString(str), nil
		},
	},
	{
		StructField: "Subnets",
		StructListValidation: &cr.StructListValidation{
			AllowExplicitNull: true,
			MinLength:         2,
			StructValidation: &cr.StructValidation{
				StructFieldValidations: []*cr.StructFieldValidation{
					{
						StructField:      "AvailabilityZone",
						StringValidation: &cr.StringValidation{},
					},
					{
						StructField:      "SubnetID",
						StringValidation: &cr.StringValidation{},
					},
				},
			},
		},
	},
	{
		StructField: "NATGateway",
		StringValidation: &cr.StringValidation{
			AllowedValues: NATGatewayStrings(),
		},
		Parser: func(str string) (interface{}, error) {
			return NATGatewayFromString(str), nil
		},
		DefaultDependentFields: []string{"SubnetVisibility", "Subnets"},
		DefaultDependentFieldsFunc: func(vals []interface{}) interface{} {
			subnetVisibility := vals[0].(SubnetVisibility)
			subnets := vals[1].([]*Subnet)

			if len(subnets) > 0 {
				return NoneNATGateway.String()
			}
			if subnetVisibility == PublicSubnetVisibility {
				return NoneNATGateway.String()
			}
			return SingleNATGateway.String()
		},
	},
	{
		StructField: "APILoadBalancerType",
		StringValidation: &cr.StringValidation{
			AllowedValues: LoadBalancerTypeStrings(),
			Default:       NLBLoadBalancerType.String(),
		},
		Parser: func(str string) (interface{}, error) {
			return LoadBalancerTypeFromString(str), nil
		},
	},
	{
		StructField: "APILoadBalancerScheme",
		StringValidation: &cr.StringValidation{
			AllowedValues: LoadBalancerSchemeStrings(),
			Default:       InternetFacingLoadBalancerScheme.String(),
		},
		Parser: func(str string) (interface{}, error) {
			return LoadBalancerSchemeFromString(str), nil
		},
	},
	{
		StructField: "APILoadBalancerCIDRWhiteList",
		StringListValidation: &cr.StringListValidation{
			Validator: func(addresses []string) ([]string, error) {
				for i, address := range addresses {
					_, err := validateCIDR(address)
					if err != nil {
						return nil, errors.Wrap(err, fmt.Sprintf("index %d", i))
					}
				}
				return addresses, nil
			},
		},
	},
	{
		StructField: "OperatorLoadBalancerCIDRWhiteList",
		StringListValidation: &cr.StringListValidation{
			Validator: func(addresses []string) ([]string, error) {
				for i, address := range addresses {
					_, err := validateCIDR(address)
					if err != nil {
						return nil, errors.Wrap(err, fmt.Sprintf("index %d", i))
					}
				}
				return addresses, nil
			},
		},
	},
	{
		StructField: "OperatorLoadBalancerScheme",
		StringValidation: &cr.StringValidation{
			AllowedValues: LoadBalancerSchemeStrings(),
			Default:       InternetFacingLoadBalancerScheme.String(),
		},
		Parser: func(str string) (interface{}, error) {
			return LoadBalancerSchemeFromString(str), nil
		},
	},
	{
		StructField: "VPCCIDR",
		StringPtrValidation: &cr.StringPtrValidation{
			Validator: validateVPCCIDR,
		},
	},
}
View Source
var FullConfigValidation = &cr.StructValidation{
	Required:               true,
	StructFieldValidations: append(CoreConfigStructFieldValidations, ManagedConfigStructFieldValidations...),
	AllowExtraFields:       false,
}
View Source
var ManagedConfigStructFieldValidations = []*cr.StructFieldValidation{
	{
		StructField: "ClusterUID",
		StringValidation: &cr.StringValidation{
			Default:          "",
			AllowEmpty:       true,
			TreatNullAsEmpty: true,
		},
	},
	{
		StructField: "Bucket",
		StringValidation: &cr.StringValidation{
			Default:          "",
			AllowEmpty:       true,
			TreatNullAsEmpty: true,
		},
	},
	{
		StructField: "CortexPolicyARN",
		StringValidation: &cr.StringValidation{
			Required:         false,
			AllowEmpty:       true,
			TreatNullAsEmpty: true,
		},
	},
	{
		StructField: "AccountID",
		StringValidation: &cr.StringValidation{
			Required:         false,
			AllowEmpty:       true,
			TreatNullAsEmpty: true,
		},
	},
}

Functions

func AddNewPolicyVersion added in v0.30.0

func AddNewPolicyVersion(awsClient *aws.Client, policyARN string, policyDocument string) error

func AutoGenerateSpotConfig

func AutoGenerateSpotConfig(spotConfig *SpotConfig, region string, instanceType string)

func BucketName added in v0.35.0

func BucketName(accountID, clusterName, region string) string

func CheckSpotInstanceCompatibility

func CheckSpotInstanceCompatibility(target aws.InstanceMetadata, suggested aws.InstanceMetadata) error

func CheckSpotInstancePriceCompatibility added in v0.15.0

func CheckSpotInstancePriceCompatibility(target aws.InstanceMetadata, suggested aws.InstanceMetadata, maxPrice *float64, spotInstancePrice float64) error

func CreateDefaultPolicy added in v0.30.0

func CreateDefaultPolicy(awsClient *aws.Client, args CortexPolicyTemplateArgs) error

func DefaultPolicyARN added in v0.30.0

func DefaultPolicyARN(accountID string, clusterName string, region string) string

func DefaultPolicyName added in v0.30.0

func DefaultPolicyName(clusterName string, region string) string

func ErrorAMDGPUInstancesNotSupported added in v0.35.0

func ErrorAMDGPUInstancesNotSupported(instanceType string) error

func ErrorAlevoInstancesNotSupported added in v0.42.0

func ErrorAlevoInstancesNotSupported(instanceType string) error

func ErrorAvailabilityZoneSpecifiedTwice added in v0.26.0

func ErrorAvailabilityZoneSpecifiedTwice(zone string) error

func ErrorCantOverrideDefaultTag added in v0.18.0

func ErrorCantOverrideDefaultTag() error

func ErrorConfigCannotBeChangedOnConfigure added in v0.37.0

func ErrorConfigCannotBeChangedOnConfigure() error

func ErrorConfiguredWhenSpotIsNotEnabled

func ErrorConfiguredWhenSpotIsNotEnabled(configKey string) error

func ErrorDependentFieldMustBeSpecified added in v0.27.0

func ErrorDependentFieldMustBeSpecified(configuredField string, dependencyField string) error

func ErrorDidNotMatchStrictS3Regex

func ErrorDidNotMatchStrictS3Regex() error

func ErrorDisallowedField added in v0.35.0

func ErrorDisallowedField(field string) error

func ErrorDuplicateNodeGroupName added in v0.31.0

func ErrorDuplicateNodeGroupName(duplicateNgName string) error

func ErrorFPGAInstancesNotSupported added in v0.42.0

func ErrorFPGAInstancesNotSupported(instanceType string) error

func ErrorFieldConfigurationDependentOnCondition added in v0.27.0

func ErrorFieldConfigurationDependentOnCondition(configuredField string, configuredFieldValue string, dependencyField string, dependencyFieldValue string) error

func ErrorGPUInstancesNotSupported added in v0.38.0

func ErrorGPUInstancesNotSupported(instanceType string) error

func ErrorGaudiInstancesNotSupported added in v0.42.0

func ErrorGaudiInstancesNotSupported(instanceType string) error

func ErrorIAMPolicyARNNotFound added in v0.30.0

func ErrorIAMPolicyARNNotFound(policyARN string) error

func ErrorIOPSNotSupported added in v0.16.0

func ErrorIOPSNotSupported(volumeType VolumeType) error

func ErrorIOPSToThroughputRatio added in v0.35.0

func ErrorIOPSToThroughputRatio(volumeType VolumeType, ratio, iops, throughput int64) error

func ErrorIOPSToVolumeSizeRatio added in v0.35.0

func ErrorIOPSToVolumeSizeRatio(volumeType VolumeType, ratio, iops int64, volumeSize int64) error

func ErrorIOPSTooLarge added in v0.16.0

func ErrorIOPSTooLarge(volumeType VolumeType, iops, maxIOPS int64) error

func ErrorIOPSTooSmall added in v0.35.0

func ErrorIOPSTooSmall(volumeType VolumeType, iops, minIOPS int64) error

func ErrorIncompatibleSpotInstanceTypeCPU

func ErrorIncompatibleSpotInstanceTypeCPU(target aws.InstanceMetadata, suggested aws.InstanceMetadata) error

func ErrorIncompatibleSpotInstanceTypeGPU

func ErrorIncompatibleSpotInstanceTypeGPU(target aws.InstanceMetadata, suggested aws.InstanceMetadata) error

func ErrorIncompatibleSpotInstanceTypeInf added in v0.18.0

func ErrorIncompatibleSpotInstanceTypeInf(suggested aws.InstanceMetadata) error

func ErrorIncompatibleSpotInstanceTypeMemory

func ErrorIncompatibleSpotInstanceTypeMemory(target aws.InstanceMetadata, suggested aws.InstanceMetadata) error

func ErrorInferentiaInstancesNotSupported added in v0.38.0

func ErrorInferentiaInstancesNotSupported(instanceType string) error

func ErrorInstanceTypeNotSupportedByCortex added in v0.35.0

func ErrorInstanceTypeNotSupportedByCortex(instanceType string) error

func ErrorInstanceTypeNotSupportedInRegion

func ErrorInstanceTypeNotSupportedInRegion(instanceType string, region string) error

func ErrorInstanceTypeTooSmall

func ErrorInstanceTypeTooSmall(instanceType string) error

func ErrorInvalidAvailabilityZone

func ErrorInvalidAvailabilityZone(userZone string, allZones strset.Set, region string) error

func ErrorInvalidLegacyProvider added in v0.32.0

func ErrorInvalidLegacyProvider(providerStr string) error

func ErrorInvalidProvider added in v0.32.0

func ErrorInvalidProvider(providerStr string) error

func ErrorInvalidRegion added in v0.15.0

func ErrorInvalidRegion(region string) error

func ErrorMacInstancesNotSupported added in v0.37.0

func ErrorMacInstancesNotSupported(instanceType string) error

func ErrorMaxNodesToAddOnClusterConfigure added in v0.39.0

func ErrorMaxNodesToAddOnClusterConfigure(requestedNodes, currentNodes, maxNodes int64) error

func ErrorMaxNodesToAddOnClusterUp added in v0.39.0

func ErrorMaxNodesToAddOnClusterUp(requestedNodes, maxNodes int64) error

func ErrorMaxNumOfNodeGroupsReached added in v0.31.0

func ErrorMaxNumOfNodeGroupsReached(maxNodeGroups int64) error

func ErrorMinInstancesGreaterThanMax

func ErrorMinInstancesGreaterThanMax(min int64, max int64) error

func ErrorNATRequiredWithPrivateSubnetVisibility added in v0.16.0

func ErrorNATRequiredWithPrivateSubnetVisibility() error

func ErrorNoNATGatewayWithSubnets added in v0.26.0

func ErrorNoNATGatewayWithSubnets() error

func ErrorNodeGroupCanOnlyBeScaled added in v0.37.0

func ErrorNodeGroupCanOnlyBeScaled() error

func ErrorNodeGroupMaxInstancesIsZero added in v0.34.0

func ErrorNodeGroupMaxInstancesIsZero() error

func ErrorNotEnoughDefaultSupportedZones added in v0.15.0

func ErrorNotEnoughDefaultSupportedZones(region string, validZones strset.Set, instanceType string, instanceTypes ...string) error

func ErrorOnDemandBaseCapacityGreaterThanMax

func ErrorOnDemandBaseCapacityGreaterThanMax(onDemandBaseCapacity int64, max int64) error

func ErrorS3RegionDiffersFromCluster

func ErrorS3RegionDiffersFromCluster(bucketName string, bucketRegion string, clusterRegion string) error

func ErrorSSLCertificateARNNotFound added in v0.17.0

func ErrorSSLCertificateARNNotFound(sslCertificateARN string, region string) error

func ErrorSpecifyOneOrNone added in v0.26.0

func ErrorSpecifyOneOrNone(fieldName1 string, fieldName2 string, fieldNames ...string) error

func ErrorSpecifyTwoOrNone added in v0.35.0

func ErrorSpecifyTwoOrNone(fieldName1 string, fieldName2 string, fieldNames ...string) error

func ErrorSpotPriceGreaterThanMaxPrice

func ErrorSpotPriceGreaterThanMaxPrice(suggestedSpotPrice float64, maxPrice float64, suggested aws.InstanceMetadata) error

func ErrorSpotPriceGreaterThanTargetOnDemand

func ErrorSpotPriceGreaterThanTargetOnDemand(spotPrice float64, target aws.InstanceMetadata, suggested aws.InstanceMetadata) error

func ErrorSubnetMaskOutOfRange added in v0.39.0

func ErrorSubnetMaskOutOfRange(requestedMaskSize, minMaskSize, maxMaskSize int) error

func ErrorThroughputNotSupported added in v0.35.0

func ErrorThroughputNotSupported(volumeType VolumeType) error

func ErrorTrainiumInstancesNotSupported added in v0.42.0

func ErrorTrainiumInstancesNotSupported(instanceType string) error

func ErrorUnsupportedAvailabilityZone added in v0.15.0

func ErrorUnsupportedAvailabilityZone(userZone string, instanceType string, instanceTypes ...string) error

func GetNodeGroupNames added in v0.37.0

func GetNodeGroupNames(nodeGroups []*NodeGroup) []string

func LoadBalancerSchemeStrings added in v0.16.0

func LoadBalancerSchemeStrings() []string

func LoadBalancerTypeStrings added in v0.42.0

func LoadBalancerTypeStrings() []string

func NATGatewayStrings added in v0.16.0

func NATGatewayStrings() []string

func RegionValidator added in v0.16.0

func RegionValidator(region string) (string, error)

func SQSNamePrefix added in v0.19.0

func SQSNamePrefix(clusterName string) string

func SubnetVisibilityStrings added in v0.16.0

func SubnetVisibilityStrings() []string

func ValidateRegion added in v0.15.0

func ValidateRegion(region string) error

func VerifyNetworkQuotas added in v0.37.0

func VerifyNetworkQuotas(
	awsClient *aws.Client,
	requiredInternetGateways int,
	natGatewayRequired bool,
	highlyAvailableNATGateway bool,
	requiredVPCs int,
	availabilityZones strset.Set,
	numNodeGroups int,
	netAdditionOfNodeGroups int,
	longestCIDRWhiteList int,
	clusterAlreadyExists bool,
) error

func VerifyNetworkQuotasOnConfigure added in v0.37.0

func VerifyNetworkQuotasOnConfigure(
	awsClient *aws.Client,
	availabilityZones strset.Set,
	numNodeGroups int,
	netAdditionOfNodeGroups int,
	longestCIDRWhiteList int) error

func VolumeTypesStrings added in v0.16.0

func VolumeTypesStrings() []string

Types

type AccessConfig

type AccessConfig struct {
	ClusterName  string `json:"cluster_name" yaml:"cluster_name"`
	Region       string `json:"region" yaml:"region"`
	ImageManager string `json:"image_manager" yaml:"image_manager"`
}

The bare minimum to identify a cluster

type Config

type Config struct {
	CoreConfig    `yaml:",inline"`
	ManagedConfig `yaml:",inline"`
}

func NewForFile added in v0.35.0

func NewForFile(clusterConfigPath string) (*Config, error)

NewForFile initializes and validates the cluster config from the YAML config file

func (*Config) DeepCopy added in v0.31.0

func (cc *Config) DeepCopy() (Config, error)

func (*Config) GetNodeGroupByName added in v0.37.0

func (cc *Config) GetNodeGroupByName(name string) *NodeGroup

func (*Config) Hash added in v0.31.0

func (cc *Config) Hash() (string, error)

func (*Config) ToAccessConfig

func (cc *Config) ToAccessConfig() AccessConfig

func (*Config) ValidateOnConfigure added in v0.37.0

func (cc *Config) ValidateOnConfigure(awsClient *aws.Client, k8sClient *k8s.Client, oldConfig Config, eksNodeGroupStacks []*cloudformation.StackSummary) (ConfigureChanges, error)

func (*Config) ValidateOnInstall added in v0.37.0

func (cc *Config) ValidateOnInstall(awsClient *aws.Client) error

this validates the user-provided cluster config

type ConfigureChanges added in v0.37.0

type ConfigureChanges struct {
	NodeGroupsToAdd       []string
	NodeGroupsToRemove    []string
	NodeGroupsToUpdate    []string
	EKSNodeGroupsToRemove []string // EKS node group names of (NodeGroupsToRemove ∩ Cortex-converted EKS node groups) ∪ (Cortex-converted EKS node groups - the new cluster config's nodegroups)
	FieldsToUpdate        []string
}

func (*ConfigureChanges) GetGhostEKSNodeGroups added in v0.37.0

func (c *ConfigureChanges) GetGhostEKSNodeGroups() []string

GetGhostEKSNodeGroups returns the set difference between EKSNodeGroupsToRemove and the EKS-converted NodeGroupsToRemove

func (*ConfigureChanges) HasChanges added in v0.37.0

func (c *ConfigureChanges) HasChanges() bool

type CoreConfig added in v0.28.0

type CoreConfig struct {
	ClusterName            string `json:"cluster_name" yaml:"cluster_name"`
	Region                 string `json:"region" yaml:"region"`
	PrometheusInstanceType string `json:"prometheus_instance_type" yaml:"prometheus_instance_type"`

	ImageOperator                   string `json:"image_operator" yaml:"image_operator"`
	ImageControllerManager          string `json:"image_controller_manager" yaml:"image_controller_manager"`
	ImageManager                    string `json:"image_manager" yaml:"image_manager"`
	ImageKubexit                    string `json:"image_kubexit" yaml:"image_kubexit"`
	ImageProxy                      string `json:"image_proxy" yaml:"image_proxy"`
	ImageActivator                  string `json:"image_activator" yaml:"image_activator"`
	ImageAutoscaler                 string `json:"image_autoscaler" yaml:"image_autoscaler"`
	ImageAsyncGateway               string `json:"image_async_gateway" yaml:"image_async_gateway"`
	ImageEnqueuer                   string `json:"image_enqueuer" yaml:"image_enqueuer"`
	ImageDequeuer                   string `json:"image_dequeuer" yaml:"image_dequeuer"`
	ImageClusterAutoscaler          string `json:"image_cluster_autoscaler" yaml:"image_cluster_autoscaler"`
	ImageMetricsServer              string `json:"image_metrics_server" yaml:"image_metrics_server"`
	ImageNvidiaDevicePlugin         string `json:"image_nvidia_device_plugin" yaml:"image_nvidia_device_plugin"`
	ImageNeuronDevicePlugin         string `json:"image_neuron_device_plugin" yaml:"image_neuron_device_plugin"`
	ImageNeuronScheduler            string `json:"image_neuron_scheduler" yaml:"image_neuron_scheduler"`
	ImageFluentBit                  string `json:"image_fluent_bit" yaml:"image_fluent_bit"`
	ImageIstioProxy                 string `json:"image_istio_proxy" yaml:"image_istio_proxy"`
	ImageIstioPilot                 string `json:"image_istio_pilot" yaml:"image_istio_pilot"`
	ImagePrometheus                 string `json:"image_prometheus" yaml:"image_prometheus"`
	ImagePrometheusConfigReloader   string `json:"image_prometheus_config_reloader" yaml:"image_prometheus_config_reloader"`
	ImagePrometheusOperator         string `json:"image_prometheus_operator" yaml:"image_prometheus_operator"`
	ImagePrometheusStatsDExporter   string `json:"image_prometheus_statsd_exporter" yaml:"image_prometheus_statsd_exporter"`
	ImagePrometheusDCGMExporter     string `json:"image_prometheus_dcgm_exporter" yaml:"image_prometheus_dcgm_exporter"`
	ImagePrometheusKubeStateMetrics string `json:"image_prometheus_kube_state_metrics" yaml:"image_prometheus_kube_state_metrics"`
	ImagePrometheusNodeExporter     string `json:"image_prometheus_node_exporter" yaml:"image_prometheus_node_exporter"`
	ImageKubeRBACProxy              string `json:"image_kube_rbac_proxy" yaml:"image_kube_rbac_proxy"`
	ImageGrafana                    string `json:"image_grafana" yaml:"image_grafana"`
	ImageEventExporter              string `json:"image_event_exporter" yaml:"image_event_exporter"`

	NodeGroups                        []*NodeGroup       `json:"node_groups" yaml:"node_groups"`
	Tags                              map[string]string  `json:"tags" yaml:"tags"`
	AvailabilityZones                 []string           `json:"availability_zones" yaml:"availability_zones"`
	SSLCertificateARN                 *string            `json:"ssl_certificate_arn,omitempty" yaml:"ssl_certificate_arn,omitempty"`
	IAMPolicyARNs                     []string           `json:"iam_policy_arns" yaml:"iam_policy_arns"`
	SubnetVisibility                  SubnetVisibility   `json:"subnet_visibility" yaml:"subnet_visibility"`
	Subnets                           []*Subnet          `json:"subnets,omitempty" yaml:"subnets,omitempty"`
	NATGateway                        NATGateway         `json:"nat_gateway" yaml:"nat_gateway"`
	APILoadBalancerType               LoadBalancerType   `json:"api_load_balancer_type" yaml:"api_load_balancer_type"`
	APILoadBalancerScheme             LoadBalancerScheme `json:"api_load_balancer_scheme" yaml:"api_load_balancer_scheme"`
	OperatorLoadBalancerScheme        LoadBalancerScheme `json:"operator_load_balancer_scheme" yaml:"operator_load_balancer_scheme"`
	APILoadBalancerCIDRWhiteList      []string           `json:"api_load_balancer_cidr_white_list,omitempty" yaml:"api_load_balancer_cidr_white_list,omitempty"`
	OperatorLoadBalancerCIDRWhiteList []string           `json:"operator_load_balancer_cidr_white_list,omitempty" yaml:"operator_load_balancer_cidr_white_list,omitempty"`
	VPCCIDR                           *string            `json:"vpc_cidr,omitempty" yaml:"vpc_cidr,omitempty"`
	Telemetry                         bool               `json:"telemetry" yaml:"telemetry"`
}

func (*CoreConfig) GetNodeGroupByName added in v0.39.0

func (cc *CoreConfig) GetNodeGroupByName(name string) *NodeGroup

func (*CoreConfig) GetNodeGroupNames added in v0.39.0

func (cc *CoreConfig) GetNodeGroupNames() []string

func (*CoreConfig) SQSNamePrefix added in v0.28.0

func (cc *CoreConfig) SQSNamePrefix() string

SQSNamePrefix returns a string with the hash of cluster name and adds trailing "_" e.g. cx_abcd1234_

func (*CoreConfig) TelemetryEvent added in v0.28.0

func (cc *CoreConfig) TelemetryEvent() map[string]interface{}

type CortexPolicyTemplateArgs added in v0.30.0

type CortexPolicyTemplateArgs struct {
	ClusterName string
	LogGroup    string
	Region      string
	Bucket      string
	AccountID   string
}

type InternalConfig

type InternalConfig struct {
	Config

	// Populated by operator
	OperatorMetadata
}

type LoadBalancerScheme added in v0.16.0

type LoadBalancerScheme int
const (
	UnknownLoadBalancerScheme LoadBalancerScheme = iota
	InternetFacingLoadBalancerScheme
	InternalLoadBalancerScheme
)

func LoadBalancerSchemeFromString added in v0.16.0

func LoadBalancerSchemeFromString(s string) LoadBalancerScheme

func (LoadBalancerScheme) MarshalBinary added in v0.16.0

func (t LoadBalancerScheme) MarshalBinary() ([]byte, error)

MarshalBinary satisfies BinaryMarshaler

func (LoadBalancerScheme) MarshalText added in v0.16.0

func (t LoadBalancerScheme) MarshalText() ([]byte, error)

MarshalText satisfies TextMarshaler

func (LoadBalancerScheme) String added in v0.16.0

func (t LoadBalancerScheme) String() string

func (*LoadBalancerScheme) UnmarshalBinary added in v0.16.0

func (t *LoadBalancerScheme) UnmarshalBinary(data []byte) error

UnmarshalBinary satisfies BinaryUnmarshaler Needed for msgpack

func (*LoadBalancerScheme) UnmarshalText added in v0.16.0

func (t *LoadBalancerScheme) UnmarshalText(text []byte) error

UnmarshalText satisfies TextUnmarshaler

type LoadBalancerType added in v0.42.0

type LoadBalancerType int
const (
	UnknownLoadBalancerType LoadBalancerType = iota
	NLBLoadBalancerType
	ELBLoadBalancerType
)

func LoadBalancerTypeFromString added in v0.42.0

func LoadBalancerTypeFromString(s string) LoadBalancerType

func (LoadBalancerType) MarshalBinary added in v0.42.0

func (t LoadBalancerType) MarshalBinary() ([]byte, error)

MarshalBinary satisfies BinaryMarshaler

func (LoadBalancerType) MarshalText added in v0.42.0

func (t LoadBalancerType) MarshalText() ([]byte, error)

MarshalText satisfies TextMarshaler

func (LoadBalancerType) String added in v0.42.0

func (t LoadBalancerType) String() string

func (*LoadBalancerType) UnmarshalBinary added in v0.42.0

func (t *LoadBalancerType) UnmarshalBinary(data []byte) error

UnmarshalBinary satisfies BinaryUnmarshaler Needed for msgpack

func (*LoadBalancerType) UnmarshalText added in v0.42.0

func (t *LoadBalancerType) UnmarshalText(text []byte) error

UnmarshalText satisfies TextUnmarshaler

type ManagedConfig added in v0.28.0

type ManagedConfig struct {
	// fields that must be set by Cortex
	CortexPolicyARN string `json:"cortex_policy_arn" yaml:"cortex_policy_arn"`
	AccountID       string `json:"account_id" yaml:"account_id"`
	ClusterUID      string `json:"cluster_uid" yaml:"cluster_uid"`
	Bucket          string `json:"bucket" yaml:"bucket"`
}

type NATGateway added in v0.16.0

type NATGateway int
const (
	UnknownNATGateway NATGateway = iota
	NoneNATGateway
	SingleNATGateway
	HighlyAvailableNATGateway
)

func NATGatewayFromString added in v0.16.0

func NATGatewayFromString(s string) NATGateway

func (NATGateway) MarshalBinary added in v0.16.0

func (t NATGateway) MarshalBinary() ([]byte, error)

MarshalBinary satisfies BinaryMarshaler

func (NATGateway) MarshalText added in v0.16.0

func (t NATGateway) MarshalText() ([]byte, error)

MarshalText satisfies TextMarshaler

func (NATGateway) String added in v0.16.0

func (t NATGateway) String() string

func (*NATGateway) UnmarshalBinary added in v0.16.0

func (t *NATGateway) UnmarshalBinary(data []byte) error

UnmarshalBinary satisfies BinaryUnmarshaler Needed for msgpack

func (*NATGateway) UnmarshalText added in v0.16.0

func (t *NATGateway) UnmarshalText(text []byte) error

UnmarshalText satisfies TextUnmarshaler

type NodeGroup added in v0.31.0

type NodeGroup struct {
	Name                     string      `json:"name" yaml:"name"`
	InstanceType             string      `json:"instance_type" yaml:"instance_type"`
	MinInstances             int64       `json:"min_instances" yaml:"min_instances"`
	MaxInstances             int64       `json:"max_instances" yaml:"max_instances"`
	Priority                 int64       `json:"priority" yaml:"priority"`
	InstanceVolumeSize       int64       `json:"instance_volume_size" yaml:"instance_volume_size"`
	InstanceVolumeType       VolumeType  `json:"instance_volume_type" yaml:"instance_volume_type"`
	InstanceVolumeIOPS       *int64      `json:"instance_volume_iops" yaml:"instance_volume_iops"`
	InstanceVolumeThroughput *int64      `json:"instance_volume_throughput" yaml:"instance_volume_throughput"`
	Spot                     bool        `json:"spot" yaml:"spot"`
	SpotConfig               *SpotConfig `json:"spot_config" yaml:"spot_config"`
}

func (*NodeGroup) DeepCopy added in v0.37.0

func (ng *NodeGroup) DeepCopy() (NodeGroup, error)

func (*NodeGroup) FillEmptySpotFields added in v0.31.0

func (ng *NodeGroup) FillEmptySpotFields(region string)

func (*NodeGroup) HasChanged added in v0.40.0

func (ng *NodeGroup) HasChanged(old *NodeGroup) bool

compares the supported updatable fields of a nodegroup

func (*NodeGroup) Hash added in v0.37.0

func (ng *NodeGroup) Hash() (string, error)

func (*NodeGroup) MaxPossibleOnDemandInstances added in v0.31.0

func (ng *NodeGroup) MaxPossibleOnDemandInstances() int64

func (*NodeGroup) MaxPossibleSpotInstances added in v0.31.0

func (ng *NodeGroup) MaxPossibleSpotInstances() int64

func (*NodeGroup) SpotConfigOnDemandValues added in v0.31.0

func (ng *NodeGroup) SpotConfigOnDemandValues() (int64, int64)

func (*NodeGroup) UpdatePlan added in v0.40.0

func (ng *NodeGroup) UpdatePlan(old *NodeGroup) string

type OperatorMetadata added in v0.28.0

type OperatorMetadata struct {
	APIVersion          string `json:"api_version" yaml:"api_version"`
	OperatorID          string `json:"operator_id" yaml:"operator_id"`
	ClusterID           string `json:"cluster_id" yaml:"cluster_id"`
	IsOperatorInCluster bool   `json:"is_operator_in_cluster" yaml:"is_operator_in_cluster"`
}

type SpotConfig

type SpotConfig struct {
	InstanceDistribution                []string `json:"instance_distribution" yaml:"instance_distribution"`
	OnDemandBaseCapacity                *int64   `json:"on_demand_base_capacity" yaml:"on_demand_base_capacity"`
	OnDemandPercentageAboveBaseCapacity *int64   `json:"on_demand_percentage_above_base_capacity" yaml:"on_demand_percentage_above_base_capacity"`
	MaxPrice                            *float64 `json:"max_price" yaml:"max_price"`
	InstancePools                       *int64   `json:"instance_pools" yaml:"instance_pools"`
}

type Subnet added in v0.26.0

type Subnet struct {
	AvailabilityZone string `json:"availability_zone" yaml:"availability_zone"`
	SubnetID         string `json:"subnet_id" yaml:"subnet_id"`
}

type SubnetVisibility added in v0.16.0

type SubnetVisibility int
const (
	UnknownSubnetVisibility SubnetVisibility = iota
	PublicSubnetVisibility
	PrivateSubnetVisibility
)

func SubnetVisibilityFromString added in v0.16.0

func SubnetVisibilityFromString(s string) SubnetVisibility

func (SubnetVisibility) MarshalBinary added in v0.16.0

func (t SubnetVisibility) MarshalBinary() ([]byte, error)

MarshalBinary satisfies BinaryMarshaler

func (SubnetVisibility) MarshalText added in v0.16.0

func (t SubnetVisibility) MarshalText() ([]byte, error)

MarshalText satisfies TextMarshaler

func (SubnetVisibility) String added in v0.16.0

func (t SubnetVisibility) String() string

func (*SubnetVisibility) UnmarshalBinary added in v0.16.0

func (t *SubnetVisibility) UnmarshalBinary(data []byte) error

UnmarshalBinary satisfies BinaryUnmarshaler Needed for msgpack

func (*SubnetVisibility) UnmarshalText added in v0.16.0

func (t *SubnetVisibility) UnmarshalText(text []byte) error

UnmarshalText satisfies TextUnmarshaler

type VolumeType added in v0.16.0

type VolumeType int
const (
	UnknownVolumeType VolumeType = iota
	GP2VolumeType
	GP3VolumeType
	IO1VolumeType
	SC1VolumeType
	ST1VolumeType
)

func VolumeTypeFromString added in v0.16.0

func VolumeTypeFromString(s string) VolumeType

VolumeTypeFromString turns string into StorageType

func (VolumeType) MarshalBinary added in v0.16.0

func (t VolumeType) MarshalBinary() ([]byte, error)

MarshalBinary satisfies BinaryMarshaler

func (VolumeType) MarshalText added in v0.16.0

func (t VolumeType) MarshalText() ([]byte, error)

MarshalText satisfies TextMarshaler

func (VolumeType) String added in v0.16.0

func (t VolumeType) String() string

func (*VolumeType) UnmarshalBinary added in v0.16.0

func (t *VolumeType) UnmarshalBinary(data []byte) error

UnmarshalBinary satisfies BinaryUnmarshaler Needed for msgpack

func (*VolumeType) UnmarshalText added in v0.16.0

func (t *VolumeType) UnmarshalText(text []byte) error

UnmarshalText satisfies TextUnmarshaler

Jump to

Keyboard shortcuts

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