Skip to content
Open
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
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
Expand All @@ -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}
Expand All @@ -20,6 +20,7 @@ skipNodeEmails: true
nodes: definedInOnBeforeInstall

settings:
onBeforeInit: return settings;
fields:
- caption: Scaling Strategy
type: list
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down
236 changes: 143 additions & 93 deletions scripts/beforeInit.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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
Expand Up @@ -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",
Expand Down Expand Up @@ -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
}, {
Expand Down