mirror of https://github.com/portainer/portainer
				
				
				
			
		
			
				
	
	
		
			104 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
import * as JsonPatch from 'fast-json-patch';
 | 
						|
import filesizeParser from 'filesize-parser';
 | 
						|
 | 
						|
import {
 | 
						|
  KubernetesResourceQuota,
 | 
						|
  KubernetesPortainerResourceQuotaCPULimit,
 | 
						|
  KubernetesPortainerResourceQuotaMemoryLimit,
 | 
						|
  KubernetesPortainerResourceQuotaCPURequest,
 | 
						|
  KubernetesPortainerResourceQuotaMemoryRequest,
 | 
						|
  KubernetesResourceQuotaDefaults,
 | 
						|
} from 'Kubernetes/models/resource-quota/models';
 | 
						|
import { KubernetesResourceQuotaCreatePayload } from 'Kubernetes/models/resource-quota/payloads';
 | 
						|
import KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelper';
 | 
						|
import { KubernetesPortainerResourcePoolNameLabel, KubernetesPortainerResourcePoolOwnerLabel } from 'Kubernetes/models/resource-pool/models';
 | 
						|
import KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';
 | 
						|
import KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';
 | 
						|
import { KubernetesResourcePoolFormValues } from 'Kubernetes/models/resource-pool/formValues';
 | 
						|
 | 
						|
class KubernetesResourceQuotaConverter {
 | 
						|
  static apiToResourceQuota(data, yaml) {
 | 
						|
    const res = new KubernetesResourceQuota();
 | 
						|
    res.Id = data.metadata.uid;
 | 
						|
    res.Namespace = data.metadata.namespace;
 | 
						|
    res.Name = data.metadata.name;
 | 
						|
    res.CpuLimit = 0;
 | 
						|
    res.MemoryLimit = 0;
 | 
						|
    if (data.spec.hard && data.spec.hard[KubernetesPortainerResourceQuotaCPULimit]) {
 | 
						|
      res.CpuLimit = KubernetesResourceReservationHelper.parseCPU(data.spec.hard[KubernetesPortainerResourceQuotaCPULimit]);
 | 
						|
    }
 | 
						|
    if (data.spec.hard && data.spec.hard[KubernetesPortainerResourceQuotaMemoryLimit]) {
 | 
						|
      res.MemoryLimit = filesizeParser(data.spec.hard[KubernetesPortainerResourceQuotaMemoryLimit], { base: 10 });
 | 
						|
    }
 | 
						|
 | 
						|
    res.MemoryLimitUsed = 0;
 | 
						|
    if (data.status.used && data.status.used[KubernetesPortainerResourceQuotaMemoryLimit]) {
 | 
						|
      res.MemoryLimitUsed = filesizeParser(data.status.used[KubernetesPortainerResourceQuotaMemoryLimit], { base: 10 });
 | 
						|
    }
 | 
						|
 | 
						|
    res.CpuLimitUsed = 0;
 | 
						|
    if (data.status.used && data.status.used[KubernetesPortainerResourceQuotaCPULimit]) {
 | 
						|
      res.CpuLimitUsed = KubernetesResourceReservationHelper.parseCPU(data.status.used[KubernetesPortainerResourceQuotaCPULimit]);
 | 
						|
    }
 | 
						|
    res.Yaml = yaml ? yaml.data : '';
 | 
						|
    res.ResourcePoolName = data.metadata.labels ? data.metadata.labels[KubernetesPortainerResourcePoolNameLabel] : '';
 | 
						|
    res.ResourcePoolOwner = data.metadata.labels ? data.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] : '';
 | 
						|
    return res;
 | 
						|
  }
 | 
						|
 | 
						|
  static createPayload(quota) {
 | 
						|
    const res = new KubernetesResourceQuotaCreatePayload();
 | 
						|
    res.metadata.name = KubernetesResourceQuotaHelper.generateResourceQuotaName(quota.Namespace);
 | 
						|
    res.metadata.namespace = quota.Namespace;
 | 
						|
    KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaCPURequest}']`, quota.CpuLimit);
 | 
						|
    KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaMemoryRequest}']`, quota.MemoryLimit);
 | 
						|
    KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaCPULimit}']`, quota.CpuLimit);
 | 
						|
    KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaMemoryLimit}']`, quota.MemoryLimit);
 | 
						|
    res.metadata.labels[KubernetesPortainerResourcePoolNameLabel] = quota.ResourcePoolName;
 | 
						|
    if (quota.ResourcePoolOwner) {
 | 
						|
      res.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] = quota.ResourcePoolOwner;
 | 
						|
    }
 | 
						|
    return res;
 | 
						|
  }
 | 
						|
 | 
						|
  static updatePayload(quota) {
 | 
						|
    const res = KubernetesResourceQuotaConverter.createPayload(quota);
 | 
						|
    res.metadata.uid = quota.Id;
 | 
						|
    return res;
 | 
						|
  }
 | 
						|
 | 
						|
  static patchPayload(oldQuota, newQuota) {
 | 
						|
    const oldPayload = KubernetesResourceQuotaConverter.createPayload(oldQuota);
 | 
						|
    const newPayload = KubernetesResourceQuotaConverter.createPayload(newQuota);
 | 
						|
    const payload = JsonPatch.compare(oldPayload, newPayload);
 | 
						|
    return payload;
 | 
						|
  }
 | 
						|
 | 
						|
  static quotaToResourcePoolFormValues(quota) {
 | 
						|
    const res = new KubernetesResourcePoolFormValues(KubernetesResourceQuotaDefaults);
 | 
						|
    res.Name = quota.Namespace;
 | 
						|
    res.CpuLimit = quota.CpuLimit;
 | 
						|
    res.MemoryLimit = KubernetesResourceReservationHelper.megaBytesValue(quota.MemoryLimit);
 | 
						|
    if (res.CpuLimit || res.MemoryLimit) {
 | 
						|
      res.HasQuota = true;
 | 
						|
    }
 | 
						|
    res.StorageClasses = quota.StorageRequests;
 | 
						|
    return res;
 | 
						|
  }
 | 
						|
 | 
						|
  static resourcePoolFormValuesToResourceQuota(formValues) {
 | 
						|
    if (formValues.HasQuota) {
 | 
						|
      const quota = new KubernetesResourceQuota(formValues.Name);
 | 
						|
      if (formValues.HasQuota) {
 | 
						|
        quota.CpuLimit = formValues.CpuLimit;
 | 
						|
        quota.MemoryLimit = KubernetesResourceReservationHelper.bytesValue(formValues.MemoryLimit);
 | 
						|
      }
 | 
						|
      quota.ResourcePoolName = formValues.Name;
 | 
						|
      quota.ResourcePoolOwner = formValues.Owner;
 | 
						|
      return quota;
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export default KubernetesResourceQuotaConverter;
 |