Skip to content

adding support for Verrazzano 1.5 component generation #202

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion webui/src/js/models/k8s-domain-definition.js
Original file line number Diff line number Diff line change
@@ -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';
Expand Down
25 changes: 0 additions & 25 deletions webui/src/js/utils/k8s-domain-v9-resource-generator.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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('_', '-')}`;
}
Expand Down
3 changes: 2 additions & 1 deletion webui/src/js/utils/vz-component-deployer.js
Original file line number Diff line number Diff line change
Expand Up @@ -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()) {
Expand Down
81 changes: 21 additions & 60 deletions webui/src/js/utils/vz-component-resource-generator.js
Original file line number Diff line number Diff line change
@@ -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 = '<UNKNOWN>';

const vzHelper = this._getVerrazzanoHelper();
if (vzHelper) {
result = vzHelper.getComponentApiVersion();
}
return result;
}

_getWorkloadApiVersion() {
let result = '<UNKNOWN>';

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;
});
73 changes: 73 additions & 0 deletions webui/src/js/utils/vz-component-wko-v8-resource-generator.js
Original file line number Diff line number Diff line change
@@ -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 = '<UNKNOWN>';

const vzHelper = this._getVerrazzanoHelper();
if (vzHelper) {
result = vzHelper.getComponentApiVersion();
}
return result;
}

_getWorkloadApiVersion() {
let result = '<UNKNOWN>';

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;
});
74 changes: 74 additions & 0 deletions webui/src/js/utils/vz-component-wko-v9-resource-generator.js
Original file line number Diff line number Diff line change
@@ -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 = '<UNKNOWN>';

const vzHelper = this._getVerrazzanoHelper();
if (vzHelper) {
result = vzHelper.getComponentApiVersion();
}
return result;
}

_getWorkloadApiVersion() {
let result = '<UNKNOWN>';

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;
});
3 changes: 2 additions & 1 deletion webui/src/js/viewModels/vz-component-code-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down