| /* |
| Copyright 2018 The Kubernetes Authors. |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| package cm |
| |
| import ( |
| "k8s.io/api/core/v1" |
| evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api" |
| ) |
| |
| // hardEvictionReservation returns a resourcelist that includes reservation of resources based on hard eviction thresholds. |
| func hardEvictionReservation(thresholds []evictionapi.Threshold, capacity v1.ResourceList) v1.ResourceList { |
| if len(thresholds) == 0 { |
| return nil |
| } |
| ret := v1.ResourceList{} |
| for _, threshold := range thresholds { |
| if threshold.Operator != evictionapi.OpLessThan { |
| continue |
| } |
| switch threshold.Signal { |
| case evictionapi.SignalMemoryAvailable: |
| memoryCapacity := capacity[v1.ResourceMemory] |
| value := evictionapi.GetThresholdQuantity(threshold.Value, &memoryCapacity) |
| ret[v1.ResourceMemory] = *value |
| case evictionapi.SignalNodeFsAvailable: |
| storageCapacity := capacity[v1.ResourceEphemeralStorage] |
| value := evictionapi.GetThresholdQuantity(threshold.Value, &storageCapacity) |
| ret[v1.ResourceEphemeralStorage] = *value |
| } |
| } |
| return ret |
| } |