mirror of https://github.com/portainer/portainer
60 lines
1.5 KiB
TypeScript
60 lines
1.5 KiB
TypeScript
import { Taint } from 'kubernetes-types/core/v1';
|
|
|
|
import { TaintEffect } from '../../types';
|
|
import { isSystemLabel } from '../../nodeUtils';
|
|
|
|
import { NodeTaint, NodeLabel } from './types';
|
|
|
|
export function createNewLabel(): NodeLabel {
|
|
return {
|
|
key: '',
|
|
value: '',
|
|
needsDeletion: false,
|
|
isNew: true,
|
|
isChanged: false,
|
|
isSystem: false,
|
|
};
|
|
}
|
|
|
|
export function createNewTaint(): NodeTaint {
|
|
return {
|
|
key: '',
|
|
value: '',
|
|
effect: 'NoSchedule',
|
|
needsDeletion: false,
|
|
isNew: true,
|
|
isChanged: false,
|
|
};
|
|
}
|
|
|
|
export function createTaint(taint: Taint): NodeTaint {
|
|
return {
|
|
key: taint.key,
|
|
value: taint.value ?? '',
|
|
// We need to cast the effect to the correct type. This seems reasonable because of the docs
|
|
// https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/#concepts
|
|
// The allowed values for the effect field are: NoExecute, NoSchedule, PreferNoSchedule
|
|
effect: taint.effect as TaintEffect,
|
|
needsDeletion: false,
|
|
isNew: false,
|
|
isChanged: false,
|
|
};
|
|
}
|
|
|
|
export function createLabel(label: [string, string]): NodeLabel {
|
|
const [key, value] = label;
|
|
const isSystem = isSystemLabel(key);
|
|
const baseLabelValues = {
|
|
key,
|
|
value,
|
|
isNew: false,
|
|
isUsed: false,
|
|
isChanged: false,
|
|
};
|
|
if (isSystem) {
|
|
// omit needsDeletion, so the delete button is hidden
|
|
return { ...baseLabelValues, isSystem: true };
|
|
}
|
|
return { ...baseLabelValues, needsDeletion: false, isSystem: false };
|
|
}
|