portainer/app/react/kubernetes/cluster/NodeView/NodeDetails/nodeFormUtils.ts

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 };
}