|
|
@@ -1395,15 +1395,19 @@ func (gcp *gcpKey) GPUType() string {
|
|
|
return ""
|
|
|
}
|
|
|
|
|
|
-// GetKey maps node labels to information needed to retrieve pricing data
|
|
|
-func (gcp *gcpKey) Features() string {
|
|
|
+func parseGCPInstanceTypeLabel(it string) string {
|
|
|
var instanceType string
|
|
|
- it, _ := util.GetInstanceType(gcp.Labels)
|
|
|
- if it == "" {
|
|
|
- log.DedupedErrorf(1, "Missing or Unknown 'node.kubernetes.io/instance-type' node label")
|
|
|
+
|
|
|
+ splitByDash := strings.Split(it, "-")
|
|
|
+
|
|
|
+ // GKE nodes are labeled with the GCP instance type, but users can deploy on GCP
|
|
|
+ // with tools like K3s, whose instance type labels will be "k3s". This logic
|
|
|
+ // avoids a panic in the slice operation then there are no dashes (-) in the
|
|
|
+ // instance type label value.
|
|
|
+ if len(splitByDash) < 2 {
|
|
|
instanceType = "unknown"
|
|
|
} else {
|
|
|
- instanceType = strings.ToLower(strings.Join(strings.Split(it, "-")[:2], ""))
|
|
|
+ instanceType = strings.ToLower(strings.Join(splitByDash[:2], ""))
|
|
|
if instanceType == "n1highmem" || instanceType == "n1highcpu" {
|
|
|
instanceType = "n1standard" // These are priced the same. TODO: support n1ultrahighmem
|
|
|
} else if instanceType == "n2highmem" || instanceType == "n2highcpu" {
|
|
|
@@ -1415,6 +1419,20 @@ func (gcp *gcpKey) Features() string {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ return instanceType
|
|
|
+}
|
|
|
+
|
|
|
+// GetKey maps node labels to information needed to retrieve pricing data
|
|
|
+func (gcp *gcpKey) Features() string {
|
|
|
+ var instanceType string
|
|
|
+ it, _ := util.GetInstanceType(gcp.Labels)
|
|
|
+ if it == "" {
|
|
|
+ log.DedupedErrorf(1, "Missing or Unknown 'node.kubernetes.io/instance-type' node label")
|
|
|
+ instanceType = "unknown"
|
|
|
+ } else {
|
|
|
+ instanceType = parseGCPInstanceTypeLabel(it)
|
|
|
+ }
|
|
|
+
|
|
|
r, _ := util.GetRegion(gcp.Labels)
|
|
|
region := strings.ToLower(r)
|
|
|
var usageType string
|