You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mt...@apache.org on 2015/09/19 03:31:32 UTC

[26/50] git commit: updated refs/heads/sf-plugins to 157efc3

Adding GUI plug-in for root admins to control infrastructure for shared volumes


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/be5f7da9
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/be5f7da9
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/be5f7da9

Branch: refs/heads/sf-plugins
Commit: be5f7da964bc2527fd87b8c15b0d654b1aaaafef
Parents: 756c5ce
Author: Mike Tutkowski <mi...@solidfire.com>
Authored: Wed Jul 15 18:20:37 2015 -0600
Committer: Mike Tutkowski <mi...@solidfire.com>
Committed: Fri Sep 18 19:28:21 2015 -0600

----------------------------------------------------------------------
 ui/plugins/plugins.js                           |   3 +-
 ui/plugins/sfAdministration/config.js           |   9 +
 ui/plugins/sfAdministration/icon.png            | Bin 0 -> 7943 bytes
 ui/plugins/sfAdministration/sfAdministration.js | 284 +++++++++++++++++++
 4 files changed, 295 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be5f7da9/ui/plugins/plugins.js
----------------------------------------------------------------------
diff --git a/ui/plugins/plugins.js b/ui/plugins/plugins.js
index 6e5557f..d115eef 100644
--- a/ui/plugins/plugins.js
+++ b/ui/plugins/plugins.js
@@ -17,6 +17,7 @@
 (function($, cloudStack) {
   cloudStack.plugins = [
     // 'testPlugin',
-    // 'sfSharedVolume'
+    // 'sfSharedVolume',
+    // 'sfAdministration'
   ];
 }(jQuery, cloudStack));

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be5f7da9/ui/plugins/sfAdministration/config.js
----------------------------------------------------------------------
diff --git a/ui/plugins/sfAdministration/config.js b/ui/plugins/sfAdministration/config.js
new file mode 100644
index 0000000..7e8bb61
--- /dev/null
+++ b/ui/plugins/sfAdministration/config.js
@@ -0,0 +1,9 @@
+(function (cloudStack) {
+  cloudStack.plugins.sfSharedVolume.config = {
+    title: 'SolidFire Administration',
+    desc: 'SolidFire Administration',
+    externalLink: 'http://www.solidfire.com/',
+    authorName: 'Mike Tutkowski',
+    authorEmail: 'mike.tutkowski@solidfire.com'
+  };
+}(cloudStack));
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be5f7da9/ui/plugins/sfAdministration/icon.png
----------------------------------------------------------------------
diff --git a/ui/plugins/sfAdministration/icon.png b/ui/plugins/sfAdministration/icon.png
new file mode 100644
index 0000000..a313d35
Binary files /dev/null and b/ui/plugins/sfAdministration/icon.png differ

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be5f7da9/ui/plugins/sfAdministration/sfAdministration.js
----------------------------------------------------------------------
diff --git a/ui/plugins/sfAdministration/sfAdministration.js b/ui/plugins/sfAdministration/sfAdministration.js
new file mode 100644
index 0000000..c836576
--- /dev/null
+++ b/ui/plugins/sfAdministration/sfAdministration.js
@@ -0,0 +1,284 @@
+(function (cloudStack) {
+  cloudStack.plugins.sfAdministration = function(plugin) {
+    plugin.ui.addSection({
+      id: 'sfAdministration',
+      title: 'sfAdministration',
+      preFilter: function(args) {
+        return isAdmin();
+      },
+      listView: {
+        id: 'sfAdministration',
+        fields: {
+          name: { label: 'label.name' },
+          iqn: { label: 'MVIP' },
+          size: { label: 'Username' },
+          miniops: { label: 'label.zone' }
+        },
+        dataProvider: function(args) {
+          plugin.ui.apiCall('listSolidFireClusters', {
+            success: function(json) {
+              var sfclustersfiltered = [];
+              var sfclusters = json.listsolidfireclustersresponse.sfcluster;
+              var search = args.filterBy.search.value == null ? "" : args.filterBy.search.value.toLowerCase();
+
+              if (search == "") {
+                sfclustersfiltered = sfclusters;
+              }
+              else {
+                for (i = 0; i < sfclusters.length; i++) {
+                  sfcluster = sfclusters[i];
+
+                  if (sfcluster.name.toLowerCase().indexOf(search) > -1 ) {
+                    sfclustersfiltered.push(sfcluster);
+                  }
+                }
+              }
+
+              args.response.success({ data: sfclustersfiltered });
+            },
+            error: function(errorMessage) {
+              args.response.error(errorMessage);
+            }
+          });
+        },
+        actions: {
+          add: {
+            label: 'Add Reference to Cluster',
+            preFilter: function(args) {
+              return true;
+            },
+            messages: {
+              confirm: function(args) {
+                return 'Please fill in the following data to add a new reference to a cluster.';
+              },
+              notification: function(args) {
+                return 'Add Reference to Cluster';
+              }
+            },
+            createForm: {
+              title: 'Add Reference to Cluster',
+              desc: 'Please fill in the following data to add a new reference to a cluster.',
+              fields: {
+                mvip: {
+                  label: 'MVIP',
+                  validation: {
+                    required: true
+                  }
+                },
+                username: {
+                  label: 'label.username',
+                  docID: 'helpUserUsername',
+                  validation: {
+                    required: true
+                  }
+                },
+                password: {
+                  label: 'label.password',
+                  docID: 'helpUserPassword',
+                  isPassword: true,
+                  validation: {
+                    required: true
+                  }
+                },
+                totalCapacity: {
+                  label: 'Total Capacity',
+                  validation: {
+                    required: true,
+                    number: true
+                  }
+                },
+                totalMinIops: {
+                  label: 'Total Min IOPS',
+                  validation: {
+                    required: true,
+                    number: true
+                  }
+                },
+                totalMaxIops: {
+                  label: 'Total Max IOPS',
+                  validation: {
+                    required: true,
+                    number: true
+                  }
+                },
+                totalBurstIops: {
+                  label: 'Total Burst IOPS',
+                  validation: {
+                    required: true,
+                    number: true
+                  }
+                },
+                availabilityZone: {
+                  label: 'label.availability.zone',
+                  docID: 'helpVolumeAvailabilityZone',
+                  validation: {
+                    required: true
+                  },
+                  select: function(args) {
+                    $.ajax({
+                      url: createURL("listZones&available=true"),
+                      dataType: "json",
+                      async: true,
+                      success: function(json) {
+                        var zoneObjs = json.listzonesresponse.zone;
+
+                        args.response.success({
+                          descriptionField: 'name',
+                          data: zoneObjs
+                        });
+                      }
+                    });
+                  }
+                }
+              }
+            },
+            action: function(args) {
+              var data = {
+                mvip: args.data.mvip,
+                username: args.data.username,
+                password: args.data.password,
+                totalcapacity: args.data.totalcapacity,
+                totalminiops: args.data.totalminiops,
+                totalmaxiops: args.data.totalmaxiops,
+                totalburstiops: args.data.totalburstiops,
+                availabilityzone: args.data.availabilityzone
+              };
+
+              $.ajax({
+                url: createURL('createReferenceToSolidFireCluster'),
+                data: data,
+                success: function(json) {
+                  var sfclusterObj = json.createreferencetosolidfireclusterresponse.apicreatereferencetosolidfirecluster;
+
+                  args.response.success({
+                    data: sfclusterObj
+                  });
+                },
+                error: function(json) {
+                  args.response.error(parseXMLHttpResponse(json));
+                }
+              });
+            }
+          }
+        },
+        detailView: {
+          name: 'label.details',
+          actions: {
+            edit: {
+              label: 'label.edit',
+              messages: {
+                notification: function(args) {
+                  return 'Edit Cluster';
+                }
+              },
+              action: function (args) {
+                var params = [];
+
+                params.push("&name=" + args.context.sfClusters[0].name);
+                params.push("&totalcapacity=" + args.data.totalcapacity);
+                params.push("&totalminiops=" + args.data.totalminiops);
+                params.push("&totalmaxiops=" + args.data.totalmaxiops);
+                params.push("&totalburstiops=" + args.data.totalburstiops);
+
+                $.ajax({
+                  url: createURL('updateReferenceToSolidFireCluster' + params.join("")),
+                  success: function(json) {
+                    var sfclusterObj = json.updatereferencetosolidfireclusterresponse.apiupdatereferencetosolidfirecluster;
+
+                    args.response.success({
+                      data: sfclusterObj
+                    });
+                  },
+                  error: function(json) {
+                    args.response.error(parseXMLHttpResponse(json));
+                  }
+                });
+              }
+            },
+            remove: {
+              label: 'Delete Reference to Cluster',
+              messages: {
+                confirm: function(args) {
+                  return 'Are you sure you would like to delete this reference to a SolidFire cluster?';
+                },
+                notification: function(args) {
+                  return 'Delete Reference to Cluster';
+                }
+              },
+              action: function(args) {
+                $.ajax({
+                  url: createURL('deleteReferenceToSolidFireCluster&name=' + args.context.sfSharedVolumes[0].name),
+                  success: function(json) {
+                    args.response.success();
+                  },
+                  error: function(json) {
+                    args.response.error(parseXMLHttpResponse(json));
+                  }
+                });
+              }
+            }
+          },
+          tabs: {
+            details: {
+              title: 'label.details',
+              preFilter: function(args) {
+                return [];
+              },
+              fields: [
+                {
+                  name: {
+                    label: 'label.name'
+                  }
+                },
+                {
+                  uuid: {
+                    label: 'label.id'
+                  },
+                  mvip: {
+                    label: 'MVIP'
+                  },
+                  username: {
+                    label: 'Username'
+                  },
+                  totalcapacity: {
+                    label: 'Total Capacity',
+                    isEditable: true
+                  },
+                  miniops: {
+                    label: 'Total Min IOPS',
+                    isEditable: true
+                  },
+                  maxiops: {
+                    label: 'Total Max IOPS',
+                    isEditable: true
+                  },
+                  burstiops: {
+                    label: 'Total Burst IOPS',
+                    isEditable: true
+                  },
+                  zone: {
+                    label: 'Zone'
+                  }
+                }
+              ],
+              dataProvider: function(args) {
+                $.ajax({
+                  url: createURL("listSolidFireClusters&name=" + args.context.sfClusters[0].name),
+                  dataType: "json",
+                  async: true,
+                  success: function(json) {
+                    var jsonObj = json.listsolidfireclustersresponse.sfcluster[0];
+
+                    args.response.success({
+                      data: jsonObj
+                    });
+                  }
+                });
+              }
+            }
+          }
+        }
+      }
+    });
+  };
+}(cloudStack));
\ No newline at end of file