Skip to content

JE-61515 #403

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

Open
wants to merge 27 commits into
base: v2.2.0
Choose a base branch
from
Open
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
13 changes: 7 additions & 6 deletions manifest.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
type: install
jpsVersion: '1.7.2'
name: WordPress Cluster Kit v2
id: wordpress-cluster
name: WordPress Cluster Kit v2 JE-61515
id: wordpress-cluster-je-61515
categories:
- apps/clusters
- apps/content-management
@@ -11,7 +11,7 @@ description:
short: WordPress Cluster with built-in kit v2 for choosing optimal servers, database clustering type, scaling mode and a set of advanced features for highly-loaded projects
logo: /images/wp-cluster-kit.svg

baseUrl: https://raw.githubusercontent.com/jelastic-jps/wordpress-cluster/v2.2.0
baseUrl: https://raw.githubusercontent.com/sych74/wordpress-cluster/v2.2.0

onBeforeInit: /scripts/beforeInit.js?_r=${fn.random}
onBeforeInstall: /scripts/beforeInstall.js?_r=${fn.random}
@@ -20,6 +20,7 @@ skipNodeEmails: true
nodes: definedInOnBeforeInstall

settings:
onBeforeInit: return settings;
fields:
- caption: Scaling Strategy
type: list
@@ -44,7 +45,7 @@ settings:
- caption: Advanced Features
type: displayfield
name: displayfield
markup:
markup: ""

- caption: Install LiteSpeed High-Performance Web Server (Additional License Fee)
type: checkbox
@@ -126,12 +127,12 @@ settings:
disabled: false
tooltip: "WooCommerce is a free open-source e-commerce plugin designed specifically for WordPress. This is a great platform for a store of any size."

- type: displayfield
- type: spinner
hideLabel: true
hidden: true
name: bl_count
value: 2
markup:
markup: ""

mixins:
- https://raw.githubusercontent.com/jelastic-jps/wordpress-cluster/master/configs/vers.yaml
236 changes: 143 additions & 93 deletions scripts/beforeInit.js
Original file line number Diff line number Diff line change
@@ -4,92 +4,86 @@ import com.hivext.api.core.utils.Transport;

var cdnAppid = "c05ffa5b45628a2a0c95467ebca8a0b4test";
var lsAppid = "9e6afcf310004ac84060f90ff41a5aba";
var group = jelastic.billing.account.GetAccount(appid, session);
var isCDN = jelastic.dev.apps.GetApp(cdnAppid);
var isLS = jelastic.dev.apps.GetApp(lsAppid);

//checking quotas
var perEnv = "environment.maxnodescount",
maxEnvs = "environment.maxcount",
perNodeGroup = "environment.maxsamenodescount",
maxCloudletsPerRec = "environment.maxcloudletsperrec";
maxEnvs = "environment.maxcount",
perNodeGroup = "environment.maxsamenodescount",
maxCloudletsPerRec = "environment.maxcloudletsperrec",
extIP = "environment.externalip.enabled",
extIPperEnv = "environment.externalip.maxcount",
extIPperNode = "environment.externalip.maxcount.per.node";

var nodesPerEnvWO_Bl = 9,
nodesPerEnvWO_GlusterFS = 7,
nodesPerEnvMin = 6,
nodesPerGroupMin = 2,
maxCloudlets = 16,
markup = "", cur = null, text = "used", prod = true;
nodesPerEnvWO_GlusterFS = 7,
nodesPerEnvMin = 6,
nodesPerGroupMin = 2,
maxCloudlets = 16,
markup = "", cur = null, prod = true, le_markup = "", le = true, warn_text = "";

var hasCollaboration = (parseInt("${fn.compareEngine(7.0)}", 10) >= 0),
quotas = [], group;

if (hasCollaboration) {
quotas = [
{ quota : { name: perEnv, description: getQuotaDescription(perEnv) }, value: parseInt('${quota.environment.maxnodescount}', 10) },
{ quota : { name: maxEnvs, description: getQuotaDescription(maxEnvs) }, value: parseInt('${quota.environment.maxcount}', 10) },
{ quota : { name: perNodeGroup, description: getQuotaDescription(perNodeGroup) }, value: parseInt('${quota.environment.maxsamenodescount}', 10) },
{ quota : { name: maxCloudletsPerRec, description: getQuotaDescription(maxCloudletsPerRec) }, value: parseInt('${quota.environment.maxcloudletsperrec}', 10) },
{ quota : { name: extIP, description: getQuotaDescription(extIP) }, value: parseInt('${quota.environment.externalip.enabled}', 10) },
{ quota : { name: extIPperEnv, description: getQuotaDescription(extIPperEnv) }, value: parseInt('${quota.environment.externalip.maxcount}', 10) },
{ quota : { name: extIPperNode, description: getQuotaDescription(extIPperNode) }, value: parseInt('${quota.environment.externalip.maxcount.per.node}', 10) }
];
group = { groupType: '${account.groupType}' };
} else {
quotas.push(jelastic.billing.account.GetQuotas(perEnv).array[0]);
quotas.push(jelastic.billing.account.GetQuotas(maxEnvs).array[0]);
quotas.push(jelastic.billing.account.GetQuotas(perNodeGroup).array[0]);
quotas.push(jelastic.billing.account.GetQuotas(maxCloudletsPerRec).array[0]);
quotas.push(jelastic.billing.account.GetQuotas(extIP).array[0]);
quotas.push(jelastic.billing.account.GetQuotas(extIPperEnv).array[0]);
quotas.push(jelastic.billing.account.GetQuotas(extIPperNode).array[0]);
group = jelastic.billing.account.GetAccount(appid, session);
}

var settings = jps.settings;
var fields = {};
for (var i = 0, field; field = jps.settings.fields[i]; i++)
fields[field.name] = field;

var quotas = jelastic.billing.account.GetQuotas(perEnv + ";"+maxEnvs+";" + perNodeGroup + ";" + maxCloudletsPerRec ).array;
var group = jelastic.billing.account.GetAccount(appid, session);
for (var i = 0; i < quotas.length; i++){
var q = quotas[i], n = toNative(q.quota.name);

if (n == maxCloudletsPerRec && maxCloudlets > q.value){
err(q, "required", maxCloudlets, true);
prod = false;
markup = err(q, "required", maxCloudlets);
prod = false; break;
}

if (n == perEnv && nodesPerEnvMin > q.value){
if (!markup) err(q, "required", nodesPerEnvMin, true);
prod = false;
markup = err(q, "required", nodesPerEnvMin);
prod = false; break;
}

if (n == perNodeGroup && nodesPerGroupMin > q.value){
if (!markup) err(q, "required", nodesPerGroupMin, true);
prod = false;
}

if (n == perEnv && nodesPerEnvMin == q.value){
fields["glusterfs"].value = false;
fields["glusterfs"].disabled = true;
fields["galera"].value = false;
fields["galera"].disabled = true;
fields["bl_count"].value = 1;
fields["displayfield"].markup = "Some advanced features are not available. Please upgrade your account.";
fields["displayfield"].cls = "warning";
fields["displayfield"].hideLabel = true;
fields["displayfield"].height = 25;
if (n == perNodeGroup && nodesPerGroupMin > q.value){
markup = err(q, "required", nodesPerGroupMin);
prod = false; break;
}

if (n == perEnv && nodesPerEnvWO_GlusterFS == q.value){
fields["glusterfs"].value = false;
fields["glusterfs"].disabled = true;
fields["bl_count"].value = 1;
fields["displayfield"].markup = "Some advanced features are not available. Please upgrade your account.";
fields["displayfield"].cls = "warning";
fields["displayfield"].hideLabel = true;
fields["displayfield"].height = 25;
if (n == extIP && !q.value){
le_markup = err(q, "required", 1);
le = false; break;
}

if (n == perEnv && q.value == 8){
fields["glusterfs"].value = false;
fields["glusterfs"].disabled = true;
fields["bl_count"].value = 2;
fields["displayfield"].markup = "Some advanced features are not available. Please upgrade your account.";
fields["displayfield"].cls = "warning";
fields["displayfield"].hideLabel = true;
fields["displayfield"].height = 25;

if (n == extIPperEnv && q.value < 2){
le_markup = err(q, "required", 2);
le = false; break;
}

if (n == perEnv && nodesPerEnvWO_Bl == q.value){
fields["bl_count"].value = 1;
}

if (n == perNodeGroup && nodesPerGroupMin == q.value){
fields["glusterfs"].value = false;
fields["glusterfs"].disabled = true;
fields["galera"].value = false;
fields["galera"].disabled = true;
fields["displayfield"].markup = "Some advanced features are not available. Please upgrade your account.";
fields["displayfield"].cls = "warning";
fields["displayfield"].hideLabel = true;
fields["displayfield"].height = 25;

if (n == extIPperNode && q.value < 1){
le_markup = err(q, "required", 1);
le = false; break;
}

if (isLS.result == 0 || isLS.result == Response.PERMISSION_DENIED) {
@@ -100,52 +94,108 @@ for (var i = 0; i < quotas.length; i++){
fields["ls-addon"].value = false;
fields["ls-addon"].showIf = null;
}

if (isCDN.result == 0 || isCDN.result == Response.PERMISSION_DENIED) {
fields["cdn-addon"].hidden = false;
fields["cdn-addon"].value = true;
} else {
fields["cdn-addon"].hidden = true;
fields["cdn-addon"].value = false;
}

if (n == perEnv && nodesPerEnvWO_GlusterFS == q.value){
disableFields(["glusterfs"]);
fields["bl_count"].value = 1;
setDisplayWarning("displayfield", "Some advanced features are not available.", 25);
markup = err(q, "required", 8);
warn_text = "GlusterFS is not available. Only one load balancer will be installed. " + markup + " Please upgrade your account.";
addDisplayWarning(warn_text, 30);
}

if (n == perEnv && q.value == 8){
disableFields(["glusterfs"]);
fields["bl_count"].value = 2;
setDisplayWarning("displayfield", "Some advanced features are not available.", 25);
markup = err(q, "required", perEnv + 1);
warn_text = "GlusterFS is not available. " + markup + " Please upgrade your account.";
addDisplayWarning(warn_text, 30);
}

if (n == perEnv && nodesPerEnvWO_Bl == q.value){
fields["bl_count"].value = 1;
markup = err(q, "required", nodesPerEnvWO_Bl + 1);
warn_text = "Only one load balancer will be installed. " + markup + " Please upgrade your account.";
addDisplayWarning(warn_text, 30);
}

if (n == perNodeGroup && nodesPerGroupMin == q.value){
disableFields(["glusterfs", "galera"]);
setDisplayWarning("displayfield", "Some advanced features are not available.", 25);
markup = err(q, "required", nodesPerGroupMin + 1);
warn_text = "GlusterFS and Galera cluster are not available. " + markup + " Please upgrade your account.";
addDisplayWarning(warn_text, 30);
}

if (n == perEnv && nodesPerEnvMin == q.value){
disableFields(["glusterfs", "galera"]);
fields["bl_count"].value = 1;
setDisplayWarning("displayfield", "Some advanced features are not available.", 25);
markup = err(q, "required", nodesPerEnvMin + 1);
warn_text = "GlusterFS and Galera cluster are not available. Only one load balancer will be installed. " + markup + " Please upgrade your account.";
addDisplayWarning(warn_text, 30);
}
}

if (!le) {
disableFields(["le-addon"]);
setDisplayWarning("displayfield", "Some advanced features are not available.", 25);
warn_text = warn_text + " L'ets Encrypt is not available. " + le_markup + "Please upgrade your account.";
addDisplayWarning(warn_text, 30);
}

if (!prod || group.groupType == 'trial') {
fields["ls-addon"].disabled = true;
fields["ls-addon"].value = false;
fields["loadGrowth"].disabled = true;
fields["galera"].disabled = true;
fields["galera"].value = false;
fields["glusterfs"].disabled = true;
fields["glusterfs"].value = false;
fields["le-addon"].disabled = true;
fields["le-addon"].value = false;
fields["cdn-addon"].disabled = true;
fields["cdn-addon"].value = false;
fields["mu-addon"].disabled = true;
fields["displayfield"].markup = "Advanced features are not available.";
fields["displayfield"].cls = "warning";
fields["displayfield"].hideLabel = true;
fields["displayfield"].height = 25;
fields["bl_count"].markup = "WordPress cluster is not available. " + markup + "Please upgrade your account.";
if (group.groupType == 'trial')
fields["bl_count"].markup = "WordPress cluster is not available for " + group.groupType + ". Please upgrade your account.";
fields["bl_count"].cls = "warning";
fields["bl_count"].hidden = false;
fields["bl_count"].height = 30;


disableFields(["ls-addon", "loadGrowth", "galera", "glusterfs", "le-addon", "cdn-addon", "mu-addon", "woocommerce"]);
setDisplayWarning("displayfield", "Advanced features are not available.", 25);
warn_text = (group.groupType == 'trial')
? "WordPress cluster is not available for " + group.groupType + ". Please upgrade your account."
: "WordPress cluster is not available. " + markup + " Please upgrade your account.";
addDisplayWarning(warn_text, 30);
settings.submitType = 'upgrade';
}

function disableFields(names) {
for (var i = 0; i < names.length; i++) {
if (fields[names[i]]) {
fields[names[i]].value = false;
fields[names[i]].disabled = true;
}
}
}

function addDisplayWarning(warn_text, height) {
settings.fields.push(
{"type": "compositefield","height": 0,"hideLabel": true,"width": 0,"items": [{"height": 0,"type": "string","required": true}]}
{"type": "displayfield", "cls": "warning", "height": height, "hideLabel": true, "markup": warn_text}
);
}

function setDisplayWarning(field, warn_text, height) {
fields[field].markup = warn_text;
fields[field].cls = "warning";
fields[field].hideLabel = true;
fields[field].hidden = false;
fields[field].height = height;
}

function getQuotaDescription(name) {
return jelastic.billing.account.GetQuotas(name).array[0].quota.description;
}

function err(e, text, cur){
var m = (e.quota.description || e.quota.name) + " - " + e.value + ", " + text + " - " + cur + ". ";
return m;
}

return {
result: 0,
settings: settings
};

function err(e, text, cur, override){
var m = (e.quota.description || e.quota.name) + " - " + e.value + ", " + text + " - " + cur + ". ";
if (override) markup = m; else markup += m;
}
8 changes: 4 additions & 4 deletions scripts/beforeInstall.js
Original file line number Diff line number Diff line change
@@ -67,7 +67,7 @@ resp.nodes.push({
if ('${settings.ls-addon:false}'== 'true') {
resp.nodes.push({
nodeType: "litespeedadc",
count: ${settings.bl.nodes:2},
count: ${settings.bl.nodes:[settings.bl_count]},
cloudlets: ${settings.bl.cloudlets:8},
diskLimit: "${settings.bl.diskspace:[quota.disk.limitation]}",
nodeGroup: "bl",
@@ -96,9 +96,9 @@ if ('${settings.ls-addon:false}'== 'true') {
} else {
resp.nodes.push({
nodeType: "nginx",
count: ${settings.bl_count:2},
flexibleCloudlets: ${settings.bl_flexibleCloudlets:8},
fixedCloudlets: ${settings.bl_fixedCloudlets:1},
count: ${settings.bl.nodes:[settings.bl_count]},
cloudlets: ${settings.bl.cloudlets:8},
diskLimit: "${settings.bl.diskspace:[quota.disk.limitation]}",
nodeGroup: "bl",
restartDelay: 10
}, {