mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	-Split 'dictionary.jsp' into two files -> 'dictionary.jsp' and 'dictionary2.jsp' -- this is due to JSP file constraints as the localization object is getting quite long -Per change above, 'dictionary' object is now split into an additonal 'dictionary2' object, which is merged with the main dict object on page load -All new dictionary mappings should be added to 'dictionary2' now. Signed-off-by: Brian Federle <brian.federle@citrix.com>
		
			
				
	
	
		
			320 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			320 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // 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.lbStickyPolicy = {
 | |
|         dialog: function(args) {
 | |
|             return function(args) {
 | |
|                 var success = args.response.success;
 | |
|                 var context = args.context;
 | |
| 
 | |
|                 var network;
 | |
|                 if ('vpc' in args.context) { //from VPC section
 | |
|                     var data = {
 | |
|                         listAll: true,
 | |
|                         supportedservices: 'Lb'
 | |
|                     };
 | |
|                     if (args.context.ipAddresses[0].associatednetworkid == null) {
 | |
|                         $.extend(data, {
 | |
|                             vpcid: args.context.vpc[0].id
 | |
|                         });
 | |
|                     } else {
 | |
|                         $.extend(data, {
 | |
|                             id: args.context.ipAddresses[0].associatednetworkid
 | |
|                         });
 | |
|                     }
 | |
| 
 | |
|                     $.ajax({
 | |
|                         url: createURL("listNetworks"), //check whether the VPC has a network including Lb service
 | |
|                         data: data,
 | |
|                         async: false,
 | |
|                         success: function(json) {
 | |
|                             var items = json.listnetworksresponse.network;
 | |
|                             if (items != null && items.length > 0) {
 | |
|                                 network = items[0];
 | |
|                             }
 | |
|                         }
 | |
|                     });
 | |
|                 } else { //from Guest Network section
 | |
|                     network = args.context.networks[0];
 | |
|                 }
 | |
| 
 | |
|                 var $item = args.$item;
 | |
| 
 | |
|                 var lbService = $.grep(network.service, function(service) {
 | |
|                     return service.name == 'Lb';
 | |
|                 })[0];
 | |
| 
 | |
|                 var stickinessCapabilities = JSON.parse($.grep(
 | |
|                     lbService.capability,
 | |
|                     function(capability) {
 | |
|                         return capability.name == 'SupportedStickinessMethods';
 | |
|                     }
 | |
|                 )[0].value);
 | |
| 
 | |
|                 var baseFields = {
 | |
|                     stickyName: {
 | |
|                         label: 'label.sticky.name',
 | |
|                         validation: {
 | |
|                             required: true
 | |
|                         }
 | |
|                     }
 | |
|                 };
 | |
| 
 | |
|                 $.map(
 | |
|                     $.map(
 | |
|                         stickinessCapabilities,
 | |
|                         function(c) {
 | |
|                             return c.paramlist;
 | |
|                         }
 | |
|                     ),
 | |
|                     function(p) {
 | |
|                         baseFields[p.paramname] = {
 | |
|                             label: _l('label.sticky.' + p.paramname),
 | |
|                             isHidden: true,
 | |
|                             isBoolean: p.isflag,
 | |
|                             validation: {
 | |
|                                 required: p.required
 | |
|                             }
 | |
|                         };
 | |
|                     }
 | |
|                 );
 | |
| 
 | |
|                 var conditionalFields = {
 | |
|                     methodname: {
 | |
|                         label: 'label.stickiness.method',
 | |
|                         select: function(args) {
 | |
|                             var $select = args.$select;
 | |
|                             var $form = $select.closest('form');
 | |
|                             var stickyOptions = [];
 | |
| 
 | |
|                             stickinessCapabilities.push({
 | |
|                                 methodname: 'None',
 | |
|                                 paramlist: []
 | |
|                             });
 | |
|                             $(stickinessCapabilities).each(function() {
 | |
|                                 var stickyCapability = this;
 | |
| 
 | |
|                                 stickyOptions.push({
 | |
|                                     id: stickyCapability.methodname,
 | |
|                                     description: stickyCapability.methodname
 | |
|                                 });
 | |
|                             });
 | |
| 
 | |
|                             stickyOptions = stickyOptions.sort(function() {
 | |
|                                 return this.id != 'None';
 | |
|                             });
 | |
| 
 | |
|                             args.response.success({
 | |
|                                 data: stickyOptions
 | |
|                             }, 500);
 | |
| 
 | |
|                             $select.change(function() {
 | |
|                                 var value = $select.val();
 | |
|                                 var showFields = [];
 | |
|                                 var targetMethod = $.grep(stickinessCapabilities, function(stickyCapability) {
 | |
|                                     return stickyCapability.methodname == value;
 | |
|                                 })[0];
 | |
|                                 var visibleParams = $.map(targetMethod.paramlist, function(param) {
 | |
|                                     return param.paramname;
 | |
|                                 });
 | |
| 
 | |
|                                 $select.closest('.form-item').siblings('.form-item').each(function() {
 | |
|                                     var $field = $(this);
 | |
|                                     var id = $field.attr('rel');
 | |
| 
 | |
|                                     if ($.inArray(id, visibleParams) > -1) {
 | |
|                                         $field.css('display', 'inline-block');
 | |
|                                         $field.attr('sticky-method', value);
 | |
|                                     } else {
 | |
|                                         $field.hide();
 | |
|                                         $field.attr('sticky-method', null);
 | |
|                                     }
 | |
|                                 });
 | |
| 
 | |
|                                 // Name always is required
 | |
|                                 if ($select.val() != 'None') {
 | |
|                                     $select.closest('.form-item').siblings('.form-item[rel=stickyName]')
 | |
|                                         .css('display', 'inline-block');
 | |
|                                 }
 | |
| 
 | |
|                                 $select.closest(':ui-dialog').dialog('option', 'position', 'center');
 | |
|                             });
 | |
|                         }
 | |
|                     }
 | |
|                 };
 | |
| 
 | |
|                 var fields = $.extend(conditionalFields, baseFields);
 | |
| 
 | |
|                 if (args.data) {
 | |
|                     var populatedFields = $.map(fields, function(field, id) {
 | |
|                         return id;
 | |
|                     });
 | |
| 
 | |
|                     $(populatedFields).each(function() {
 | |
|                         var id = this;
 | |
|                         var field = fields[id];
 | |
|                         var dataItem = args.data[id];
 | |
| 
 | |
|                         if (field.isBoolean) {
 | |
|                             field.isChecked = dataItem ? true : false;
 | |
|                         } else {
 | |
|                             field.defaultValue = dataItem;
 | |
|                         }
 | |
|                     });
 | |
|                 }
 | |
| 
 | |
|                 cloudStack.dialog.createForm({
 | |
|                     form: {
 | |
|                         title: 'Configure Sticky Policy',
 | |
|                         desc: 'Please complete the following fields',
 | |
|                         fields: fields
 | |
|                     },
 | |
|                     after: function(args) {
 | |
|                         // Remove fields not applicable to sticky method
 | |
|                         args.$form.find('.form-item:hidden').remove();
 | |
| 
 | |
|                         var data = cloudStack.serializeForm(args.$form);
 | |
| 
 | |
|                         /* $item indicates that this is an existing sticky rule;
 | |
|                re-create sticky rule with new parameters */
 | |
|                         if ($item) {
 | |
|                             var $loading = $('<div>').addClass('loading-overlay');
 | |
| 
 | |
|                             $loading.prependTo($item);
 | |
|                             cloudStack.lbStickyPolicy.actions.recreate(
 | |
|                                 $item.data('multi-custom-data').id,
 | |
|                                 $item.data('multi-custom-data').lbRuleID,
 | |
|                                 data,
 | |
|                                 function() { // Complete
 | |
|                                     $(window).trigger('cloudStack.fullRefresh');
 | |
|                                 },
 | |
|                                 function(error) { // Error
 | |
|                                     $(window).trigger('cloudStack.fullRefresh');
 | |
|                                 }
 | |
|                             );
 | |
|                         } else {
 | |
|                             success({
 | |
|                                 data: data
 | |
|                             });
 | |
|                         }
 | |
|                     }
 | |
|                 });
 | |
|             };
 | |
|         },
 | |
| 
 | |
|         actions: {
 | |
|             add: function(lbRuleID, data, complete, error) {
 | |
|                 var stickyURLData = '';
 | |
|                 var stickyParams = $.map(data, function(value, key) {
 | |
|                     return key;
 | |
|                 });
 | |
| 
 | |
|                 var notParams = ['methodname', 'stickyName'];
 | |
| 
 | |
|                 var index = 0;
 | |
|                 $(stickyParams).each(function() {
 | |
|                     var param = '¶m[' + index + ']';
 | |
|                     var name = this.toString();
 | |
|                     var value = data[name];
 | |
| 
 | |
|                     if (!value || $.inArray(name, notParams) > -1) return true;
 | |
|                     if (value == 'on') value = true;
 | |
| 
 | |
|                     stickyURLData += param + '.name=' + name + param + '.value=' + value;
 | |
| 
 | |
|                     index++;
 | |
| 
 | |
|                     return true;
 | |
|                 });
 | |
| 
 | |
|                 $.ajax({
 | |
|                     url: createURL('createLBStickinessPolicy' + stickyURLData),
 | |
|                     data: {
 | |
|                         lbruleid: lbRuleID,
 | |
|                         name: data.stickyName,
 | |
|                         methodname: data.methodname
 | |
|                     },
 | |
|                     success: function(json) {
 | |
|                         cloudStack.ui.notifications.add({
 | |
|                                 desc: 'Add new LB sticky rule',
 | |
|                                 section: 'Network',
 | |
|                                 poll: pollAsyncJobResult,
 | |
|                                 _custom: {
 | |
|                                     jobId: json.createLBStickinessPolicy.jobid
 | |
|                                 }
 | |
|                             },
 | |
|                             complete, {},
 | |
|                             error, {}
 | |
|                         );
 | |
|                     },
 | |
|                     error: function(json) {
 | |
|                         complete();
 | |
|                         cloudStack.dialog.notice({
 | |
|                             message: parseXMLHttpResponse(json)
 | |
|                         });
 | |
|                     }
 | |
|                 });
 | |
|             },
 | |
|             'delete': function(stickyRuleID, complete, error) {
 | |
|                 $.ajax({
 | |
|                     url: createURL('deleteLBStickinessPolicy'),
 | |
|                     data: {
 | |
|                         id: stickyRuleID
 | |
|                     },
 | |
|                     success: function(json) {
 | |
|                         cloudStack.ui.notifications.add({
 | |
|                                 desc: 'Remove previous LB sticky rule',
 | |
|                                 section: 'Network',
 | |
|                                 poll: pollAsyncJobResult,
 | |
|                                 _custom: {
 | |
|                                     jobId: json.deleteLBstickinessrruleresponse.jobid
 | |
|                                 }
 | |
|                             },
 | |
|                             complete, {},
 | |
|                             error, {}
 | |
|                         );
 | |
|                     },
 | |
|                     error: function(json) {
 | |
|                         complete();
 | |
|                         cloudStack.dialog.notice({
 | |
|                             message: parseXMLHttpResponse(json)
 | |
|                         });
 | |
|                     }
 | |
|                 });
 | |
|             },
 | |
|             recreate: function(stickyRuleID, lbRuleID, data, complete, error) {
 | |
|                 var addStickyPolicy = function() {
 | |
|                     cloudStack.lbStickyPolicy.actions.add(
 | |
|                         lbRuleID,
 | |
|                         data,
 | |
|                         complete,
 | |
|                         error
 | |
|                     );
 | |
|                 };
 | |
| 
 | |
|                 // Delete existing rule
 | |
|                 if (data.methodname !== 'None') {
 | |
|                     addStickyPolicy();
 | |
|                 } else {
 | |
|                     cloudStack.lbStickyPolicy.actions['delete'](stickyRuleID, complete, error);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     };
 | |
| }(jQuery, cloudStack));
 |