dashboard/models/service.js

115 lines
3.0 KiB
JavaScript

import find from 'lodash/find';
export const DEFAULT_SERVICE_TYPES = [
{
id: 'ClusterIP',
label: 'servicesPage.serviceTypes.clusterIp.label',
description: 'servicesPage.serviceTypes.clusterIp.description',
bannerAbbrv: 'servicesPage.serviceTypes.clusterIp.abbrv',
},
{
id: 'ExternalName',
label: 'servicesPage.serviceTypes.externalName.label',
description: 'servicesPage.serviceTypes.externalName.description',
bannerAbbrv: 'servicesPage.serviceTypes.externalName.abbrv',
},
{
id: 'Headless',
label: 'servicesPage.serviceTypes.headless.label',
description: 'servicesPage.serviceTypes.headless.description',
bannerAbbrv: 'servicesPage.serviceTypes.headless.abbrv',
},
{
id: 'LoadBalancer',
label: 'servicesPage.serviceTypes.loadBalancer.label',
description: 'servicesPage.serviceTypes.loadBalancer.description',
bannerAbbrv: 'servicesPage.serviceTypes.loadBalancer.abbrv',
},
{
id: 'NodePort',
label: 'servicesPage.serviceTypes.nodePort.label',
description: 'servicesPage.serviceTypes.nodePort.description',
bannerAbbrv: 'servicesPage.serviceTypes.nodePort.abbrv',
},
];
export const HEADLESS = (() => {
const headless = find(DEFAULT_SERVICE_TYPES, ['id', 'Headless']);
return headless.id;
})();
export const CLUSTERIP = (() => {
const clusterIp = find(DEFAULT_SERVICE_TYPES, ['id', 'ClusterIP']);
return clusterIp.id;
})();
export default {
// if not a function it does exist, why?
customValidationRules() {
return [
{
nullable: false,
path: 'metadata.name',
required: true,
translationKey: 'generic.name',
type: 'dnsLabel',
},
{
nullable: false,
path: 'spec',
required: true,
type: 'array',
validators: ['servicePort'],
},
{
nullable: true,
path: 'spec',
required: true,
type: 'string',
validators: ['clusterIp'],
},
{
nullable: true,
path: 'spec',
required: true,
type: 'array',
validators: ['externalName'],
},
];
},
details() {
return [{
label: this.t('generic.type'),
content: this.serviceType.id,
}];
},
serviceType() {
const serviceType = this.value?.spec?.type;
const clusterIp = this.value?.spec?.clusterIP;
const defaultService = find(DEFAULT_SERVICE_TYPES, ['id', CLUSTERIP]);
if (serviceType) {
if (serviceType === CLUSTERIP && clusterIp === 'None') {
return HEADLESS;
} else {
return serviceType;
}
}
return defaultService;
},
proxyUrl() {
return (proto, port) => {
const view = this.linkFor('view');
const idx = view.lastIndexOf(`/`);
return `${ view.slice(0, idx) }/${ proto }:${ this.metadata.name }:${ port }/proxy`;
};
}
};