From c02197ae86ba90ee4553fa437a1200e64915649f Mon Sep 17 00:00:00 2001 From: Niels de Vos Date: Sat, 23 Nov 2013 14:30:40 -0700 Subject: [PATCH] Add Gluster to the list of protocols in the Management Server Gluster can now be used for Primary Storage just like NFS. This change adds the Gluster protocol to the Management Server: Infrastructure -> Primary Storage -> Add Primary Storage And also add the option to create Primary Storage on Gluster when following the 'Add Zone' wizard from: Infrastructure -> Zones -> Add Zone Some screenshots and verification: - http://blog.nixpanic.net/2013/12/using-gluster-as-primary-storage-in.html --- .../classes/resources/messages.properties | 1 + ui/dictionary.jsp | 1 + ui/scripts/sharedFunctions.js | 9 +++ ui/scripts/system.js | 69 ++++++++++++++++++- ui/scripts/zoneWizard.js | 51 +++++++++++++- 5 files changed, 127 insertions(+), 4 deletions(-) diff --git a/client/WEB-INF/classes/resources/messages.properties b/client/WEB-INF/classes/resources/messages.properties index bd4a27d52cb..a1752f274ed 100644 --- a/client/WEB-INF/classes/resources/messages.properties +++ b/client/WEB-INF/classes/resources/messages.properties @@ -603,6 +603,7 @@ label.full=Full label.gateway=Gateway label.general.alerts=General Alerts label.generating.url=Generating URL +label.gluster.volume=Volume label.go.step.2=Go to Step 2 label.go.step.3=Go to Step 3 label.go.step.4=Go to Step 4 diff --git a/ui/dictionary.jsp b/ui/dictionary.jsp index 7ccb46650e7..bf48417cd47 100644 --- a/ui/dictionary.jsp +++ b/ui/dictionary.jsp @@ -607,6 +607,7 @@ dictionary = { 'label.gateway': '', 'label.general.alerts': '', 'label.generating.url': '', +'label.gluster.volume': '', 'label.go.step.2': '', 'label.go.step.3': '', 'label.go.step.4': '', diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js index 9fa70e3bda4..f0afea508cc 100644 --- a/ui/scripts/sharedFunctions.js +++ b/ui/scripts/sharedFunctions.js @@ -1340,6 +1340,15 @@ var processPropertiesInImagestoreObject = function(jsonObj) { return url; } + function glusterURL(server, path) { + var url; + if (server.indexOf("://") == -1) + url = "gluster://" + server + path; + else + url = server + path; + return url; + } + //VM Instance diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 8159124f069..1f64a525bda 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -15171,6 +15171,10 @@ id: "clvm", description: "CLVM" }); + items.push({ + id: "gluster", + description: "Gluster" + }); args.response.success({ data: items }); @@ -15277,6 +15281,8 @@ $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); $form.find('.form-item[rel=rbdsecret]').hide(); + + $form.find('.form-item[rel=glustervolume]').hide(); } else if (protocol == "SMB") { //"SMB" show almost the same fields as "nfs" does, except 3 more SMB-specific fields. $form.find('.form-item[rel=server]').css('display', 'inline-block'); @@ -15302,6 +15308,8 @@ $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); $form.find('.form-item[rel=rbdsecret]').hide(); + + $form.find('.form-item[rel=glustervolume]').hide(); } else if (protocol == "ocfs2") { //ocfs2 is the same as nfs, except no server field. $form.find('.form-item[rel=server]').hide(); @@ -15327,6 +15335,8 @@ $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); $form.find('.form-item[rel=rbdsecret]').hide(); + + $form.find('.form-item[rel=glustervolume]').hide(); } else if (protocol == "PreSetup") { $form.find('.form-item[rel=server]').hide(); $form.find('.form-item[rel=server]').find(".value").find("input").val("localhost"); @@ -15351,6 +15361,8 @@ $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); $form.find('.form-item[rel=rbdsecret]').hide(); + + $form.find('.form-item[rel=glustervolume]').hide(); } else if (protocol == "iscsi") { $form.find('.form-item[rel=server]').css('display', 'inline-block'); $form.find('.form-item[rel=server]').find(".value").find("input").val(""); @@ -15373,6 +15385,8 @@ $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); $form.find('.form-item[rel=rbdsecret]').hide(); + + $form.find('.form-item[rel=glustervolume]').hide(); } else if ($(this).val() == "clvm") { $form.find('.form-item[rel=server]').hide(); $form.find('.form-item[rel=server]').find(".value").find("input").val("localhost"); @@ -15395,6 +15409,8 @@ $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); $form.find('.form-item[rel=rbdsecret]').hide(); + + $form.find('.form-item[rel=glustervolume]').hide(); } else if (protocol == "vmfs") { $form.find('.form-item[rel=server]').css('display', 'inline-block'); $form.find('.form-item[rel=server]').find(".value").find("input").val(""); @@ -15417,6 +15433,8 @@ $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); $form.find('.form-item[rel=rbdsecret]').hide(); + + $form.find('.form-item[rel=glustervolume]').hide(); } else if (protocol == "SharedMountPoint") { //"SharedMountPoint" show the same fields as "nfs" does. $form.find('.form-item[rel=server]').hide(); @@ -15442,6 +15460,8 @@ $form.find('.form-item[rel=rbdpool]').hide(); $form.find('.form-item[rel=rbdid]').hide(); $form.find('.form-item[rel=rbdsecret]').hide(); + + $form.find('.form-item[rel=glustervolume]').hide(); } else if (protocol == "rbd") { $form.find('.form-item[rel=rbdmonitor]').css('display', 'inline-block'); $form.find('.form-item[rel=rbdmonitor]').find(".name").find("label").text("RADOS Monitor:"); @@ -15466,6 +15486,33 @@ $form.find('.form-item[rel=smbUsername]').hide(); $form.find('.form-item[rel=smbPassword]').hide(); $form.find('.form-item[rel=smbDomain]').hide(); + + $form.find('.form-item[rel=glustervolume]').hide(); + } else if (protocol == "gluster") { + $form.find('.form-item[rel=server]').css('display', 'inline-block'); + $form.find('.form-item[rel=server]').find(".value").find("input"); + + $form.find('.form-item[rel=glustervolume]').css('display', 'inline-block'); + $form.find('.form-item[rel=glustervolume]').find(".name").find("label").text("Volume:"); + + $form.find('.form-item[rel=path]').hide(); + + $form.find('.form-item[rel=smbUsername]').hide(); + $form.find('.form-item[rel=smbPassword]').hide(); + $form.find('.form-item[rel=smbDomain]').hide(); + + $form.find('.form-item[rel=iqn]').hide(); + $form.find('.form-item[rel=lun]').hide(); + + $form.find('.form-item[rel=volumegroup]').hide(); + + $form.find('.form-item[rel=vCenterDataCenter]').hide(); + $form.find('.form-item[rel=vCenterDataStore]').hide(); + + $form.find('.form-item[rel=rbdmonitor]').hide(); + $form.find('.form-item[rel=rbdpool]').hide(); + $form.find('.form-item[rel=rbdid]').hide(); + $form.find('.form-item[rel=rbdsecret]').hide(); } else { $form.find('.form-item[rel=server]').css('display', 'inline-block'); $form.find('.form-item[rel=server]').find(".value").find("input").val(""); @@ -15486,6 +15533,8 @@ $form.find('.form-item[rel=smbUsername]').hide(); $form.find('.form-item[rel=smbPassword]').hide(); $form.find('.form-item[rel=smbDomain]').hide(); + + $form.find('.form-item[rel=glustervolume]').hide(); } }); @@ -15613,7 +15662,16 @@ }, isHidden: true }, - + + //gluster + glustervolume: { + label: 'label.gluster.volume', + validation: { + required: true + }, + isHidden: true + }, + //always appear (begin) storageTags: { label: 'label.storage.tags', @@ -15698,6 +15756,12 @@ path = "/" + path; path += "/" + args.data.vCenterDataStore; url = vmfsURL("dummy", path); + } else if (args.data.protocol == "gluster") { + var glustervolume = args.data.glustervolume; + + if (glustervolume.substring(0, 1) != "/") + glustervolume = "/" + glustervolume; + url = glusterURL(server, glustervolume); } else { var iqn = args.data.iqn; if (iqn.substring(0, 1) != "/") @@ -16903,8 +16967,7 @@ } }, //SMB (end) - - + //S3 (begin) accesskey: { label: 'label.s3.access_key', diff --git a/ui/scripts/zoneWizard.js b/ui/scripts/zoneWizard.js index fd5705be7e3..26915868749 100755 --- a/ui/scripts/zoneWizard.js +++ b/ui/scripts/zoneWizard.js @@ -1486,6 +1486,10 @@ id: "clvm", description: "CLVM" }); + items.push({ + id: "gluster", + description: "Gluster" + }); args.response.success({ data: items }); @@ -1587,8 +1591,9 @@ $form.find('[rel=vCenterDataCenter]').hide(); $form.find('[rel=vCenterDataStore]').hide(); + $form.find('[rel=glustervolume]').hide(); } else if (protocol == "SMB") { //"SMB" show almost the same fields as "nfs" does, except 3 more SMB-specific fields. - $form.find('[rel=server]').css('display', 'block'); + $form.find('[rel=server]').css('display', 'block'); $form.find('[rel=server]').find(".value").find("input").val(""); $form.find('[rel=path]').css('display', 'block'); @@ -1604,6 +1609,8 @@ $form.find('[rel=vCenterDataCenter]').hide(); $form.find('[rel=vCenterDataStore]').hide(); + + $form.find('[rel=glustervolume]').hide(); } else if (protocol == "ocfs2") { //ocfs2 is the same as nfs, except no server field. $form.find('[rel=server]').hide(); $form.find('[rel=server]').find(".value").find("input").val(""); @@ -1621,6 +1628,8 @@ $form.find('[rel=vCenterDataCenter]').hide(); $form.find('[rel=vCenterDataStore]').hide(); + + $form.find('[rel=glustervolume]').hide(); } else if (protocol == "PreSetup") { $form.find('[rel=server]').hide(); $form.find('[rel=server]').find(".value").find("input").val("localhost"); @@ -1639,6 +1648,8 @@ $form.find('[rel=vCenterDataCenter]').hide(); $form.find('[rel=vCenterDataStore]').hide(); + + $form.find('[rel=glustervolume]').hide(); } else if (protocol == "iscsi") { $form.find('[rel=server]').css('display', 'block'); $form.find('[rel=server]').find(".value").find("input").val(""); @@ -1656,6 +1667,8 @@ $form.find('[rel=vCenterDataCenter]').hide(); $form.find('[rel=vCenterDataStore]').hide(); + + $form.find('[rel=glustervolume]').hide(); } else if ($(this).val() == "clvm") { $form.find('[rel=server]').hide(); $form.find('[rel=server]').find(".value").find("input").val("localhost"); @@ -1673,6 +1686,8 @@ $form.find('[rel=vCenterDataCenter]').hide(); $form.find('[rel=vCenterDataStore]').hide(); + + $form.find('[rel=glustervolume]').hide(); } else if (protocol == "vmfs") { $form.find('[rel=server]').css('display', 'block'); $form.find('[rel=server]').find(".value").find("input").val(""); @@ -1690,6 +1705,8 @@ $form.find('[rel=vCenterDataCenter]').css('display', 'block'); $form.find('[rel=vCenterDataStore]').css('display', 'block'); + + $form.find('[rel=glustervolume]').hide(); } else if (protocol == "SharedMountPoint") { //"SharedMountPoint" show the same fields as "nfs" does. $form.find('[rel=server]').hide(); $form.find('[rel=server]').find(".value").find("input").val("localhost"); @@ -1707,6 +1724,27 @@ $form.find('[rel=vCenterDataCenter]').hide(); $form.find('[rel=vCenterDataStore]').hide(); + + $form.find('[rel=glustervolume]').hide(); + } else if (protocol == "gluster") { + $form.find('[rel=server]').css('display', 'block'); + $form.find('[rel=server]').find(".value").find("input").val(""); + + $form.find('[rel=path]').hide(); + + $form.find('[rel=smbUsername]').hide(); + $form.find('[rel=smbPassword]').hide(); + $form.find('[rel=smbDomain]').hide(); + + $form.find('[rel=iqn]').hide(); + $form.find('[rel=lun]').hide(); + + $form.find('[rel=volumegroup]').hide(); + + $form.find('[rel=vCenterDataCenter]').hide(); + $form.find('[rel=vCenterDataStore]').hide(); + + $form.find('[rel=glustervolume]').css('display', 'block'); } else { $form.find('[rel=server]').css('display', 'block'); $form.find('[rel=server]').find(".value").find("input").val(""); @@ -1722,6 +1760,8 @@ $form.find('[rel=vCenterDataCenter]').hide(); $form.find('[rel=vCenterDataStore]').hide(); + + $form.find('[rel=glustervolume]').hide(); } }); @@ -1810,6 +1850,15 @@ isHidden: true }, + //gluster + glustervolume: { + label: 'label.gluster.volume', + validation: { + required: true + }, + isHidden: true + }, + //always appear (begin) storageTags: { label: 'label.storage.tags',