From d2892602a587dbf7bea0d7bdf0791032ea2c4e32 Mon Sep 17 00:00:00 2001 From: Robert Patrick Date: Wed, 1 Feb 2023 08:47:01 -0600 Subject: [PATCH] adding support for Verrazzano 1.5 component generation --- webui/src/js/models/k8s-domain-definition.js | 2 +- .../utils/k8s-domain-v9-resource-generator.js | 25 ------ webui/src/js/utils/vz-component-deployer.js | 3 +- .../utils/vz-component-resource-generator.js | 81 +++++-------------- .../vz-component-wko-v8-resource-generator.js | 73 +++++++++++++++++ .../vz-component-wko-v9-resource-generator.js | 74 +++++++++++++++++ .../js/viewModels/vz-component-code-view.js | 3 +- 7 files changed, 173 insertions(+), 88 deletions(-) create mode 100644 webui/src/js/utils/vz-component-wko-v8-resource-generator.js create mode 100644 webui/src/js/utils/vz-component-wko-v9-resource-generator.js diff --git a/webui/src/js/models/k8s-domain-definition.js b/webui/src/js/models/k8s-domain-definition.js index b0b3a2734..57eaf262e 100644 --- a/webui/src/js/models/k8s-domain-definition.js +++ b/webui/src/js/models/k8s-domain-definition.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. + * Copyright (c) 2021, 2023, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; diff --git a/webui/src/js/utils/k8s-domain-v9-resource-generator.js b/webui/src/js/utils/k8s-domain-v9-resource-generator.js index fff315819..1b7e83447 100644 --- a/webui/src/js/utils/k8s-domain-v9-resource-generator.js +++ b/webui/src/js/utils/k8s-domain-v9-resource-generator.js @@ -321,11 +321,6 @@ define(['models/wkt-project', 'utils/k8s-domain-configmap-generator', 'js-yaml', function getServerPodForCluster(cluster) { const serverPod = _getServerPod(getJavaOptionsForCluster(cluster), getUserMemArgsForCluster(cluster), getKubernetesResourcesForCluster(cluster)) || {}; - const affinity = _getAffinityForServerPod(100); - if (affinity) { - serverPod.affinity = affinity; - } - return Object.keys(serverPod).length > 0 ? serverPod : null; } @@ -433,26 +428,6 @@ define(['models/wkt-project', 'utils/k8s-domain-configmap-generator', 'js-yaml', return foundValue ? resources : null; } - function _getAffinityForServerPod(weight) { - return { - podAntiAffinity: { - preferredDuringSchedulingIgnoredDuringExecution: [{ - weight: weight, - podAffinityTerm: { - topologyKey: 'kubernetes.io/hostname', - labelSelector: { - matchExpressions: [{ - key: 'weblogic.clusterName', - operator: 'In', - values: ['$(CLUSTER_NAME)'], - }], - }, - }, - }], - }, - }; - } - function _getClusterName(domainUid, clusterName) { return `${domainUid}-${clusterName.replaceAll('_', '-')}`; } diff --git a/webui/src/js/utils/vz-component-deployer.js b/webui/src/js/utils/vz-component-deployer.js index b4eb30649..813c13bce 100644 --- a/webui/src/js/utils/vz-component-deployer.js +++ b/webui/src/js/utils/vz-component-deployer.js @@ -202,7 +202,8 @@ function(VzActionsBase, project, wktConsole, i18n, projectIo, dialogHelper, vali } // Create the components needed for deployment - const vzResourceGenerator = new VerrazzanoComponentResourceGenerator(); + const vzInstalledVersion = this.project.vzInstall.actualInstalledVersion.value || undefined; + const vzResourceGenerator = new VerrazzanoComponentResourceGenerator(vzInstalledVersion); const vzConfigMapGenerator = new VerrazzanoComponentConfigMapGenerator(); const components = [ vzResourceGenerator.generate().join('\n') ]; if (vzConfigMapGenerator.shouldCreateConfigMap()) { diff --git a/webui/src/js/utils/vz-component-resource-generator.js b/webui/src/js/utils/vz-component-resource-generator.js index 8e26d3873..5dfecf658 100644 --- a/webui/src/js/utils/vz-component-resource-generator.js +++ b/webui/src/js/utils/vz-component-resource-generator.js @@ -1,78 +1,39 @@ /** * @license - * Copyright (c) 2022, Oracle and/or its affiliates. + * Copyright (c) 2022, 2023, Oracle and/or its affiliates. * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ */ 'use strict'; -define(['models/wkt-project', 'utils/k8s-domain-resource-generator', 'utils/vz-helper', 'js-yaml', 'utils/i18n', - 'utils/wkt-logger'], -function(project, K8sDomainResourceGenerator, VerrazzanoHelper, jsYaml) { +define(['models/wkt-project', 'utils/vz-component-wko-v8-resource-generator', + 'utils/vz-component-wko-v9-resource-generator', 'utils/wkt-logger'], +function(project, VerrazzanoComponentWkoV8ResourceGenerator, VerrazzanoComponentWkoV9ResourceGenerator, wktLogger) { - // Note that the specific version number doesn't really matter. What is important is until Verrazzano - // starts distributing WKO 4.x, we use a 3.x version number to get the right Domain resource spec. - // - const WKO3_VERSION = '3.4.3'; + const WKO_V9_SWITCHOVER_VERSION = '1.5.0'; + const DEFAULT_VERRAZZANO_VERSION = WKO_V9_SWITCHOVER_VERSION; class VerrazzanoComponentResourceGenerator { - constructor() { + constructor(verrazzanoVersion = DEFAULT_VERRAZZANO_VERSION) { this.project = project; - this.k8sDomainResourceGenerator = new K8sDomainResourceGenerator(WKO3_VERSION); - this._vzHelper = undefined; + this.verrazzanoComponentResourceGenerator = _getVerrazzanoComponentResourceGenerator(verrazzanoVersion); } - generate() { - const { domainResource } = this.k8sDomainResourceGenerator.generate(false); - - const component = { - apiVersion: this._getComponentApiVersion(), - kind: 'Component', - metadata: { - name: this.project.vzComponent.componentName.value, - namespace: this.project.k8sDomain.kubernetesNamespace.value, - }, - spec: { - workload: { - apiVersion: this._getWorkloadApiVersion(), - kind: 'VerrazzanoWebLogicWorkload', - spec: { - template: domainResource - } - } - } - }; - return jsYaml.dump(component).split('\n'); - } - - _getComponentApiVersion() { - let result = ''; - - const vzHelper = this._getVerrazzanoHelper(); - if (vzHelper) { - result = vzHelper.getComponentApiVersion(); - } - return result; - } - - _getWorkloadApiVersion() { - let result = ''; - - const vzHelper = this._getVerrazzanoHelper(); - if (vzHelper) { - result = vzHelper.getWorkloadApiVersion(); - } - return result; + generate(generateYaml = true) { + return this.verrazzanoComponentResourceGenerator.generate(generateYaml); } + } - _getVerrazzanoHelper() { - if (!this._vzHelper) { - const vzVersion = this.project.vzInstall.actualInstalledVersion.value; - if (vzVersion) { - this._vzHelper = new VerrazzanoHelper(vzVersion); - } - } - return this._vzHelper; + function _getVerrazzanoComponentResourceGenerator(verrazzanoVersion) { + let generator; + if (window.api.utils.compareVersions(verrazzanoVersion, WKO_V9_SWITCHOVER_VERSION) < 0) { + wktLogger.debug('Using Verrazzano version %s to create Verrazzano component WKO V8 resource generator', verrazzanoVersion); + generator = new VerrazzanoComponentWkoV8ResourceGenerator(); + } else { + wktLogger.debug('Using Verrazzano version %s to create Verrazzano component WKO V9 resource generator', verrazzanoVersion); + generator = new VerrazzanoComponentWkoV9ResourceGenerator(); } + return generator; } + return VerrazzanoComponentResourceGenerator; }); diff --git a/webui/src/js/utils/vz-component-wko-v8-resource-generator.js b/webui/src/js/utils/vz-component-wko-v8-resource-generator.js new file mode 100644 index 000000000..623fad532 --- /dev/null +++ b/webui/src/js/utils/vz-component-wko-v8-resource-generator.js @@ -0,0 +1,73 @@ +/** + * @license + * Copyright (c) 2022, 2023, Oracle and/or its affiliates. + * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ + */ +'use strict'; + +define(['models/wkt-project', 'utils/k8s-domain-v8-resource-generator', 'utils/vz-helper', 'js-yaml', 'utils/i18n', + 'utils/wkt-logger'], +function(project, K8sDomainV8ResourceGenerator, VerrazzanoHelper, jsYaml) { + + class VerrazzanoComponentWkoV8ResourceGenerator { + constructor() { + this.project = project; + this.k8sDomainResourceGenerator = new K8sDomainV8ResourceGenerator(); + this._vzHelper = undefined; + } + + generate() { + const { domainResource } = this.k8sDomainResourceGenerator.generate(false); + + const component = { + apiVersion: this._getComponentApiVersion(), + kind: 'Component', + metadata: { + name: this.project.vzComponent.componentName.value, + namespace: this.project.k8sDomain.kubernetesNamespace.value, + }, + spec: { + workload: { + apiVersion: this._getWorkloadApiVersion(), + kind: 'VerrazzanoWebLogicWorkload', + spec: { + template: domainResource + } + } + } + }; + return jsYaml.dump(component).split('\n'); + } + + _getComponentApiVersion() { + let result = ''; + + const vzHelper = this._getVerrazzanoHelper(); + if (vzHelper) { + result = vzHelper.getComponentApiVersion(); + } + return result; + } + + _getWorkloadApiVersion() { + let result = ''; + + const vzHelper = this._getVerrazzanoHelper(); + if (vzHelper) { + result = vzHelper.getWorkloadApiVersion(); + } + return result; + } + + _getVerrazzanoHelper() { + if (!this._vzHelper) { + const vzVersion = this.project.vzInstall.actualInstalledVersion.value; + if (vzVersion) { + this._vzHelper = new VerrazzanoHelper(vzVersion); + } + } + return this._vzHelper; + } + } + return VerrazzanoComponentWkoV8ResourceGenerator; +}); diff --git a/webui/src/js/utils/vz-component-wko-v9-resource-generator.js b/webui/src/js/utils/vz-component-wko-v9-resource-generator.js new file mode 100644 index 000000000..d75490c89 --- /dev/null +++ b/webui/src/js/utils/vz-component-wko-v9-resource-generator.js @@ -0,0 +1,74 @@ +/** + * @license + * Copyright (c) 2022, 2023, Oracle and/or its affiliates. + * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ + */ +'use strict'; + +define(['models/wkt-project', 'utils/k8s-domain-v9-resource-generator', 'utils/vz-helper', 'js-yaml', 'utils/i18n', + 'utils/wkt-logger'], +function(project, K8sDomainV9ResourceGenerator, VerrazzanoHelper, jsYaml) { + + class VerrazzanoComponentWkoV9ResourceGenerator { + constructor() { + this.project = project; + this.k8sDomainResourceGenerator = new K8sDomainV9ResourceGenerator(); + this._vzHelper = undefined; + } + + generate() { + const { domainResource, clusters } = this.k8sDomainResourceGenerator.generate(false); + + const component = { + apiVersion: this._getComponentApiVersion(), + kind: 'Component', + metadata: { + name: this.project.vzComponent.componentName.value, + namespace: this.project.k8sDomain.kubernetesNamespace.value, + }, + spec: { + workload: { + apiVersion: this._getWorkloadApiVersion(), + kind: 'VerrazzanoWebLogicWorkload', + spec: { + template: domainResource, + clusters: clusters + } + } + } + }; + return jsYaml.dump(component).split('\n'); + } + + _getComponentApiVersion() { + let result = ''; + + const vzHelper = this._getVerrazzanoHelper(); + if (vzHelper) { + result = vzHelper.getComponentApiVersion(); + } + return result; + } + + _getWorkloadApiVersion() { + let result = ''; + + const vzHelper = this._getVerrazzanoHelper(); + if (vzHelper) { + result = vzHelper.getWorkloadApiVersion(); + } + return result; + } + + _getVerrazzanoHelper() { + if (!this._vzHelper) { + const vzVersion = this.project.vzInstall.actualInstalledVersion.value; + if (vzVersion) { + this._vzHelper = new VerrazzanoHelper(vzVersion); + } + } + return this._vzHelper; + } + } + return VerrazzanoComponentWkoV9ResourceGenerator; +}); diff --git a/webui/src/js/viewModels/vz-component-code-view.js b/webui/src/js/viewModels/vz-component-code-view.js index 89f20666b..609998d73 100644 --- a/webui/src/js/viewModels/vz-component-code-view.js +++ b/webui/src/js/viewModels/vz-component-code-view.js @@ -77,8 +77,9 @@ function (accUtils, ko, project, VerrazzanoComponentScriptGenerator, VerrazzanoC this.componentText = ko.observable(); this.configMapText = ko.observable(); + this.vzVersion = this.project.vzInstall.actualInstalledVersion.observable() || undefined; this.vzComponentConfigMapGenerator = new VerrazzanoComponentConfigMapGenerator(); - this.vzComponentResourceGenerator = new VerrazzanoComponentResourceGenerator(); + this.vzComponentResourceGenerator = new VerrazzanoComponentResourceGenerator(this.vzVersion); this.renderScript = (selectedSubview) => { switch (selectedSubview) {