ui/lib/shared/addon/components/cru-cluster-template-questions/component.js

253 lines
7.3 KiB
JavaScript

import Component from '@ember/component';
import layout from './template';
import { computed, set } from '@ember/object';
import { inject as service } from '@ember/service';
import C from 'shared/utils/constants';
const HEADERS = [
{
translationKey: 'clusterTemplateQuestions.table.question',
name: 'question',
sort: ['question'],
searchField: 'variable',
},
{
translationKey: 'clusterTemplateQuestions.table.type',
name: 'type',
sort: ['type'],
width: '150px',
},
{
translationKey: 'clusterTemplateQuestions.table.answer',
name: 'answer',
sort: ['answer'],
searchField: 'default',
width: '250px',
},
{
translationKey: 'clusterTemplateQuestions.table.required',
name: 'required',
width: '70px',
},
];
const clusterTemplateTranslationMap = [
{
key: 'defaultClusterRoleForProjectMembers',
translationKey: 'clusterTemplateQuestions.schemaLabels.defaultClusterRoleForProjectMembers'
},
{
key: 'defaultPodSecurityPolicyTemplateId',
translationKey: 'clusterTemplateQuestions.schemaLabels.defaultPodSecurityPolicyTemplateId'
},
{
key: 'desiredAgentImage',
translationKey: 'clusterTemplateQuestions.schemaLabels.desiredAgentImage'
},
{
key: 'desiredAuthImage',
translationKey: 'clusterTemplateQuestions.schemaLabels.desiredAuthImage'
},
{
key: 'dockerRootDir',
translationKey: 'clusterTemplateQuestions.schemaLabels.dockerRootDir'
},
{
key: 'enableClusterAlerting',
translationKey: 'clusterTemplateQuestions.schemaLabels.enableClusterAlerting'
},
{
key: 'enableClusterMonitoring',
translationKey: 'clusterTemplateQuestions.schemaLabels.enableClusterMonitoring'
},
{
key: 'enableNetworkPolicy',
translationKey: 'clusterTemplateQuestions.schemaLabels.enableNetworkPolicy'
},
{
key: 'localClusterAuthEndpoint',
translationKey: 'clusterTemplateQuestions.schemaLabels.localClusterAuthEndpoint'
},
{
key: 'caCerts',
translationKey: 'clusterTemplateQuestions.schemaLabels.caCerts'
},
{
key: 'fqdn',
translationKey: 'clusterTemplateQuestions.schemaLabels.fqdn'
},
{
key: 'addonJobTimeout',
translationKey: 'clusterTemplateQuestions.schemaLabels.addonJobTimeout'
},
{
key: 'addons',
translationKey: 'clusterTemplateQuestions.schemaLabels.addons'
},
{
key: 'addonsInclude',
translationKey: 'clusterTemplateQuestions.schemaLabels.addonsInclude'
},
{
key: 'authentication',
translationKey: 'clusterTemplateQuestions.schemaLabels.authentication'
},
{
key: 'authorization',
translationKey: 'clusterTemplateQuestions.schemaLabels.authorization'
},
{
key: 'bastionHost',
translationKey: 'clusterTemplateQuestions.schemaLabels.bastionHost'
},
{
key: 'cloudProvider',
translationKey: 'clusterTemplateQuestions.schemaLabels.cloudProvider'
},
{
key: 'clusterName',
translationKey: 'clusterTemplateQuestions.schemaLabels.clusterName'
},
{
key: 'dns',
translationKey: 'clusterTemplateQuestions.schemaLabels.dns'
},
{
key: 'ignoreDockerVersion',
translationKey: 'clusterTemplateQuestions.schemaLabels.ignoreDockerVersion'
},
{
key: 'ingress',
translationKey: 'clusterTemplateQuestions.schemaLabels.ingress'
},
{
key: 'kubernetesVersion',
translationKey: 'clusterTemplateQuestions.schemaLabels.kubernetesVersion'
},
{
key: 'monitoring',
translationKey: 'clusterTemplateQuestions.schemaLabels.monitoring'
},
{
key: 'network',
translationKey: 'clusterTemplateQuestions.schemaLabels.network'
},
{
key: 'prefixPath',
translationKey: 'clusterTemplateQuestions.schemaLabels.prefixPath'
},
{
key: 'privateRegistries',
translationKey: 'clusterTemplateQuestions.schemaLabels.privateRegistries'
},
{
key: 'restore',
translationKey: 'clusterTemplateQuestions.schemaLabels.restore'
},
{
key: 'rotateCertificates',
translationKey: 'clusterTemplateQuestions.schemaLabels.rotateCertificates'
},
{
key: 'services',
translationKey: 'clusterTemplateQuestions.schemaLabels.services'
},
{
key: 'sshAgentAuth',
translationKey: 'clusterTemplateQuestions.schemaLabels.sshAgentAuth'
},
{
key: 'sshCertPath',
translationKey: 'clusterTemplateQuestions.schemaLabels.sshCertPath'
},
{
key: 'sshKeyPath',
translationKey: 'clusterTemplateQuestions.schemaLabels.sshKeyPath'
}
];
const IGNORED_FIELDS = C.CLUSTER_TEMPLATE_IGNORED_OVERRIDES;
export default Component.extend({
globalStore: service(),
intl: service(),
layout,
questionsHeaders: HEADERS,
ignoreFields: IGNORED_FIELDS,
translationMap: clusterTemplateTranslationMap,
sortBy: 'name',
searchText: '',
applyClusterTemplate: false,
allQuestions: null,
schemaQuestions: null,
descending: false,
bulkActions: false,
actions: {
addQuestion() {
this.addQuestion();
},
},
filteredQuestions: computed('allQuestions.[]', function() {
let {
allQuestions = [],
ignoreFields,
} = this;
allQuestions = ( allQuestions || []).slice();
allQuestions.forEach((q) => {
if (ignoreFields.includes(q.variable)) {
set(q, 'isBuiltIn', true);
}
});
return (allQuestions || []);
}),
rows: computed('filteredQuestions.[]', function() {
const {
filteredQuestions: allQuestions,
applyClusterTemplate,
clusterTemplateCreate,
ignoreFields,
} = this;
return (allQuestions || []).filter((question) => {
if (applyClusterTemplate) {
// on apply we want to ignore all fields that have a UI componet and any UI only ovverrides like backupTarget that only have a UI componet and no property target on the cluster.
return !ignoreFields.includes(question.variable) && !question.variable.includes('azureCloudProvider') && !question.variable.startsWith('uiOverride');
} else {
// hide question will only persist on the first time we create a RKE Template revision because the field is not on the question schema so we cant rely on this only
if (question.hasOwnProperty('hideQuestion') && question.hideQuestion === false) {
return true;
} else if (!question.hasOwnProperty('hideQuestion')) {
if (question.variable) {
if (clusterTemplateCreate && question.variable.startsWith('uiOverride')) {
return false;
} else {
return true
}
} else {
// this is an empty override added from add override button
return true;
}
}
return false;
}
});
}),
addQuestion() {
throw new Error('add question override is required');
},
removeQuestion() {
throw new Error('remove question override is required');
},
});