From 5d235f690d4d8a5413a4dc0e530e1760dee3514a Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Mon, 15 Apr 2013 14:56:44 -0700 Subject: [PATCH] Add new 'affinity' UI section for managing affinity groups --- ui/scripts/affinity.js | 147 +++++++++++++++++++++++++++++++ ui/scripts/cloudStack.js | 9 +- ui/scripts/ui-custom/affinity.js | 2 +- 3 files changed, 153 insertions(+), 5 deletions(-) create mode 100644 ui/scripts/affinity.js diff --git a/ui/scripts/affinity.js b/ui/scripts/affinity.js new file mode 100644 index 00000000000..8bfd8447dd6 --- /dev/null +++ b/ui/scripts/affinity.js @@ -0,0 +1,147 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +(function(cloudStack) { + cloudStack.sections.affinityGroups = { + title: 'label.affinity.groups', + listView: { + id: 'affinityGroups', + fields: { + name: { label: 'label.name' }, + type: { label: 'label.type' } + }, + dataProvider: function(args) { + args.response.success({ + data: [ + { id: 1, name: 'Affinity Group 1', type: 'Affinity' }, + { id: 2, name: 'Affinity Group 2', type: 'Anti-affinity' }, + { id: 3, name: 'Anti-affinity Group', type: 'Anti-affinity' } + ] + }); + }, + actions: { + add: { + label: 'label.add.affinity.group', + + messages: { + confirm: function(args) { + return 'message.add.volume'; + }, + notification: function(args) { + return 'label.add.affinity.group'; + } + }, + + createForm: { + title: 'label.add.affinity.group', + fields: { + name: { + label: 'label.name', + validation: { required: true } + }, + type: { + label: 'label.availability.zone', + select: function(args) { + args.response.success({ + data: [ + { id: 'Affinity', description: 'Affinity' }, + { id: 'AntiAffinity', description: 'Anti-Affinity' } + ] + }); + } + }, + availabilityZone: { + label: 'label.availability.zone', + select: function(args) { + $.ajax({ + url: createURL("listZones&available=true"), + dataType: "json", + async: true, + success: function(json) { + var items = json.listzonesresponse.zone; + args.response.success({descriptionField: 'name', data: items}); + } + }); + } + }, + } + }, + + action: function(args) { + args.response.success(); + }, + + notification: { + poll: function(args) { args.complete(); } + } + } + }, + detailView: { + actions: { + edit: { + label: 'label.edit', + action: function(args) { + args.response.success(); + }, + messages: { + notification: function(args) { return 'label.edit.affinity.group'; } + } + }, + remove: { + label: 'label.delete.affinity.group', + action: function(args) { + args.response.success(); + }, + messages: { + confirm: function(args) { + return 'message.delete.affinity.group'; + }, + notification: function(args) { + return 'label.delete.affinity.group'; + } + }, + notification: { + // poll: pollAsyncJobResult, + poll: function(args) { args.complete(); } + } + } + }, + + viewAll: { path: 'instances', label: 'label.instances' }, + + tabs: { + details: { + title: 'label.details', + fields: [ + { + name: { label: 'label.name', isEditable: true } + }, + { + type: { label: 'label.type', isCompact: true } + } + ], + + dataProvider: function(args) { + setTimeout(function() { + args.response.success({ data: args.context.affinityGroups[0] }); + }, 20); + } + } + } + } + } + }; +})(cloudStack); diff --git a/ui/scripts/cloudStack.js b/ui/scripts/cloudStack.js index a8bca91769c..3e9bef00382 100644 --- a/ui/scripts/cloudStack.js +++ b/ui/scripts/cloudStack.js @@ -22,16 +22,16 @@ var sections = []; if(isAdmin()) { - sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "domains", "events", "system", "global-settings", "configuration", "projects", "regions"]; + sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "domains", "events", "system", "global-settings", "configuration", "projects", "regions", "affinityGroups"]; } else if(isDomainAdmin()) { - sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "domains", "events", "projects"]; + sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "domains", "events", "projects", "affinityGroups"]; } else if (g_userProjectsEnabled) { - sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "events", "projects"]; + sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "events", "projects", "affinityGroups"]; } else { //normal user - sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "events"]; + sections = ["dashboard", "instances", "storage", "network", "templates", "accounts", "events", "affinityGroups"]; } if (cloudStack.plugins.length) { @@ -46,6 +46,7 @@ */ dashboard: {}, instances: {}, + affinityGroups: {}, storage: {}, network: {}, templates: {}, diff --git a/ui/scripts/ui-custom/affinity.js b/ui/scripts/ui-custom/affinity.js index 281ea2f6037..1012e7b4f02 100644 --- a/ui/scripts/ui-custom/affinity.js +++ b/ui/scripts/ui-custom/affinity.js @@ -69,7 +69,7 @@ }).dialog({ dialogClass: 'multi-edit-add-list panel', width: 825, - title: _l('label.select.vm.for.static.nat'), + title: _l('label.affinity.groups'), buttons: [ { text: _l('label.apply'),