mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			1331 lines
		
	
	
		
			47 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			1331 lines
		
	
	
		
			47 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.sections.instances = {
 | |
|     title: 'label.instances',
 | |
|     id: 'instances',
 | |
|     listView: {
 | |
|       section: 'instances',
 | |
|       filters: {
 | |
|         all: { label: 'ui.listView.filters.all' },
 | |
|         mine: { label: 'ui.listView.filters.mine' },
 | |
|         running: { label: 'state.Running' },
 | |
|         stopped: { label: 'state.Stopped' },
 | |
|         destroyed: {
 | |
|           preFilter: function(args) {
 | |
|             if (isAdmin() || isDomainAdmin())
 | |
|               return true;
 | |
|             else
 | |
|               return false;
 | |
|           },
 | |
|           label: 'state.Destroyed'
 | |
|         }
 | |
|       },			
 | |
| 			preFilter: function(args) {
 | |
| 				var hiddenFields = [];
 | |
| 				if(!isAdmin()) {				
 | |
| 					hiddenFields.push('instancename');
 | |
| 				}			
 | |
| 				return hiddenFields;
 | |
| 			},			
 | |
|       fields: {        
 | |
|         displayname: { label: 'label.display.name' },
 | |
| 				name: { label: 'label.host.name' },
 | |
|         zonename: { label: 'label.zone.name' },
 | |
|         state: {
 | |
|           label: 'label.state',         
 | |
|           indicator: {
 | |
|             'Running': 'on',
 | |
|             'Stopped': 'off',
 | |
|             'Destroyed': 'off',
 | |
|             'Error': 'off'
 | |
|           }
 | |
|         }
 | |
|       },
 | |
| 
 | |
|       // List view actions
 | |
|       actions: {
 | |
|         // Add instance wizard
 | |
|         add: {
 | |
|           label: 'label.vm.add',
 | |
| 
 | |
|           action: {
 | |
|             custom: cloudStack.uiCustom.instanceWizard(cloudStack.instanceWizard)
 | |
|           },
 | |
| 
 | |
|           messages: {            
 | |
|             notification: function(args) {              
 | |
|               return 'label.vm.add'; 
 | |
|             }
 | |
|           },
 | |
|           notification: {
 | |
|             poll: pollAsyncJobResult
 | |
|           }
 | |
|         },
 | |
|         start: {
 | |
|           label: 'label.action.start.instance' ,
 | |
|           action: function(args) {
 | |
|             $.ajax({
 | |
|               url: createURL("startVirtualMachine&id=" + args.context.instances[0].id),
 | |
|               dataType: "json",
 | |
|               async: true,
 | |
|               success: function(json) {
 | |
|                 var jid = json.startvirtualmachineresponse.jobid;
 | |
|                 args.response.success(
 | |
|                   {_custom:
 | |
|                    {jobId: jid,
 | |
|                     getUpdatedItem: function(json) {
 | |
|                       return json.queryasyncjobresultresponse.jobresult.virtualmachine;
 | |
|                     },
 | |
|                     getActionFilter: function() {
 | |
|                       return vmActionfilter;
 | |
|                     }
 | |
|                    }
 | |
|                   }
 | |
|                 );
 | |
|               }
 | |
|             });
 | |
|           },
 | |
|           messages: {
 | |
|             confirm: function(args) {
 | |
|               return 'message.action.start.instance';
 | |
|             },
 | |
|             notification: function(args) {
 | |
|               return 'label.action.start.instance';
 | |
|             },
 | |
| 						complete: function(args) {						  
 | |
| 							if(args.password != null) {
 | |
| 								alert('Password of the VM is ' + args.password);
 | |
| 							}
 | |
| 							return 'label.action.start.instance';
 | |
| 						}			
 | |
|           },
 | |
|           notification: {
 | |
|             poll: pollAsyncJobResult
 | |
|           }
 | |
|         },
 | |
|         stop: {
 | |
|           label: 'label.action.stop.instance',
 | |
|           addRow: 'false',
 | |
|           createForm: {
 | |
|             title: 'label.action.stop.instance',
 | |
|             desc: 'message.action.stop.instance',
 | |
|             fields: {
 | |
|               forced: {
 | |
|                 label: 'force.stop',
 | |
|                 isBoolean: true,
 | |
|                 isChecked: false
 | |
|               }
 | |
|             }
 | |
|           },
 | |
|           action: function(args) {
 | |
|             var array1 = [];
 | |
|             array1.push("&forced=" + (args.data.forced == "on"));
 | |
|             $.ajax({
 | |
|               url: createURL("stopVirtualMachine&id=" + args.context.instances[0].id + array1.join("")),
 | |
|               dataType: "json",
 | |
|               async: true,
 | |
|               success: function(json) {
 | |
|                 var jid = json.stopvirtualmachineresponse.jobid;
 | |
|                 args.response.success(
 | |
|                   {_custom:
 | |
|                    {jobId: jid,
 | |
|                     getUpdatedItem: function(json) {
 | |
|                       return json.queryasyncjobresultresponse.jobresult.virtualmachine;
 | |
|                     },
 | |
|                     getActionFilter: function() {
 | |
|                       return vmActionfilter;
 | |
|                     }
 | |
|                    }
 | |
|                   }
 | |
|                 );
 | |
|               }
 | |
|             });
 | |
|           },
 | |
|           messages: {
 | |
|             confirm: function(args) {
 | |
|               return 'message.action.stop.instance';
 | |
|             },
 | |
| 
 | |
|             notification: function(args) {
 | |
|               return 'label.action.stop.instance';
 | |
|             }
 | |
|           },
 | |
|           notification: {
 | |
|             poll: pollAsyncJobResult
 | |
|           }
 | |
|         },
 | |
|         restart: {
 | |
|           label: 'instances.actions.reboot.label',
 | |
|           action: function(args) {
 | |
|             $.ajax({
 | |
|               url: createURL("rebootVirtualMachine&id=" + args.context.instances[0].id),
 | |
|               dataType: "json",
 | |
|               async: true,
 | |
|               success: function(json) {
 | |
|                 var jid = json.rebootvirtualmachineresponse.jobid;
 | |
|                 args.response.success(
 | |
|                   {_custom:
 | |
|                    {jobId: jid,
 | |
|                     getUpdatedItem: function(json) {
 | |
|                       return json.queryasyncjobresultresponse.jobresult.virtualmachine;
 | |
|                     },
 | |
|                     getActionFilter: function() {
 | |
|                       return vmActionfilter;
 | |
|                     }
 | |
|                    }
 | |
|                   }
 | |
|                 );
 | |
|               }
 | |
|             });
 | |
|           },
 | |
|           messages: {
 | |
|             confirm: function(args) {
 | |
|               return 'message.action.reboot.instance';
 | |
|             },
 | |
|             notification: function(args) {
 | |
|               return 'instances.actions.reboot.label';
 | |
|             }
 | |
|           },
 | |
|           notification: {
 | |
|             poll: pollAsyncJobResult
 | |
|           }
 | |
|         },
 | |
|         destroy: {
 | |
|           label: 'label.action.destroy.instance',
 | |
|           messages: {
 | |
|             confirm: function(args) {
 | |
|               return 'message.action.destroy.instance';
 | |
|             },            
 | |
|             notification: function(args) {
 | |
|               return 'label.action.destroy.instance';
 | |
|             }
 | |
|           },
 | |
|           action: function(args) {
 | |
|             $.ajax({
 | |
|               url: createURL("destroyVirtualMachine&id=" + args.context.instances[0].id),
 | |
|               dataType: "json",
 | |
|               async: true,
 | |
|               success: function(json) {
 | |
|                 var jid = json.destroyvirtualmachineresponse.jobid;
 | |
|                 args.response.success(
 | |
|                   {_custom:
 | |
|                    {jobId: jid,
 | |
|                     getUpdatedItem: function(json) {
 | |
|                       return json.queryasyncjobresultresponse.jobresult.virtualmachine;
 | |
|                     },
 | |
|                     getActionFilter: function() {
 | |
|                       return vmActionfilter;
 | |
|                     }
 | |
|                    }
 | |
|                   }
 | |
|                 );
 | |
|               }
 | |
|             });
 | |
|           },
 | |
|           notification: {
 | |
|             poll: pollAsyncJobResult
 | |
|           }
 | |
|         },
 | |
|         restore: {     
 | |
| 					label: 'label.action.restore.instance',
 | |
| 					messages: {
 | |
| 						confirm: function(args) {
 | |
| 							return 'message.action.restore.instance';
 | |
| 						},
 | |
| 						notification: function(args) {
 | |
| 							return 'label.action.restore.instance';
 | |
| 						}
 | |
| 					},					
 | |
|           action: function(args) {
 | |
|             $.ajax({
 | |
|               url: createURL("recoverVirtualMachine&id=" + args.context.instances[0].id),
 | |
|               dataType: "json",
 | |
|               async: true,
 | |
|               success: function(json) {
 | |
|                 var item = json.recovervirtualmachineresponse.virtualmachine;
 | |
|                 args.response.success({data:item});
 | |
|               }
 | |
|             });
 | |
|           }
 | |
|         }
 | |
|       },
 | |
| 
 | |
|       dataProvider: function(args) {
 | |
|         var array1 = [];
 | |
|         if(args.filterBy != null) {
 | |
|           if(args.filterBy.kind != null) {
 | |
|             switch(args.filterBy.kind) {
 | |
|             case "all":
 | |
|               array1.push("&listAll=true");
 | |
|               break;
 | |
|             case "mine":
 | |
|               if (!args.context.projects) array1.push("&domainid=" + g_domainid + "&account=" + g_account);
 | |
|               break;
 | |
|             case "running":
 | |
|               array1.push("&listAll=true&state=Running");
 | |
|               break;
 | |
|             case "stopped":
 | |
|               array1.push("&listAll=true&state=Stopped");
 | |
|               break;
 | |
|             case "destroyed":
 | |
|               array1.push("&listAll=true&state=Destroyed");
 | |
|               break;
 | |
|             }
 | |
|           }
 | |
|           if(args.filterBy.search != null && args.filterBy.search.by != null && args.filterBy.search.value != null) {
 | |
|             switch(args.filterBy.search.by) {
 | |
|             case "name":
 | |
|               if(args.filterBy.search.value.length > 0)
 | |
|                 array1.push("&keyword=" + args.filterBy.search.value);
 | |
|               break;
 | |
|             }
 | |
|           }
 | |
|         }
 | |
| 
 | |
|         if("hosts" in args.context)
 | |
|           array1.push("&hostid=" + args.context.hosts[0].id);
 | |
| 
 | |
|         $.ajax({
 | |
|           url: createURL("listVirtualMachines&page=" + args.page + "&pagesize=" + pageSize + array1.join("")),
 | |
|           dataType: "json",
 | |
|           async: true,
 | |
|           success: function(json) {
 | |
|             var items = json.listvirtualmachinesresponse.virtualmachine;
 | |
| 
 | |
|             args.response.success({
 | |
|               actionFilter: vmActionfilter,
 | |
|               data: items
 | |
|             });
 | |
|           }
 | |
|         });
 | |
|       },
 | |
| 
 | |
|       detailView: {
 | |
|         name: 'Instance details',
 | |
|         viewAll: { path: 'storage.volumes', label: 'label.volumes' },
 | |
|         tabFilter: function(args) {
 | |
|           var hiddenTabs = [];
 | |
|           var zoneNetworktype;
 | |
|           $.ajax({
 | |
|             url: createURL("listZones&id=" + args.context.instances[0].zoneid),
 | |
|             dataType: "json",
 | |
|             async: false,
 | |
|             success: function(json) {
 | |
|               zoneNetworktype = json.listzonesresponse.zone[0].networktype;
 | |
|             }
 | |
|           });
 | |
|           if(zoneNetworktype == "Basic") { //Basic zone has only one guest network (only one NIC)
 | |
|             var includingSecurityGroupService = false;
 | |
|             $.ajax({
 | |
|               url: createURL("listNetworks&id=" + args.context.instances[0].nic[0].networkid),
 | |
|               dataType: "json",
 | |
|               async: false,
 | |
|               success: function(json) {
 | |
|                 var items = json.listnetworksresponse.network;
 | |
|                 if(items != null && items.length > 0) {
 | |
|                   var networkObj = items[0];    //basic zone has only one guest network
 | |
|                   var serviceObjArray = networkObj.service;
 | |
|                   for(var k = 0; k < serviceObjArray.length; k++) {
 | |
|                     if(serviceObjArray[k].name == "SecurityGroup") {
 | |
|                       includingSecurityGroupService = true;
 | |
|                       break;
 | |
|                     }
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             });
 | |
|             if(includingSecurityGroupService == false)
 | |
|               hiddenTabs.push("securityGroups");
 | |
|           }
 | |
|           else { //Advanced zone
 | |
|             hiddenTabs.push("securityGroups");
 | |
|           }
 | |
|           return hiddenTabs;
 | |
|         },
 | |
|         actions: {
 | |
|           start: {
 | |
|             label: 'label.action.start.instance' ,
 | |
|             action: function(args) {
 | |
|               $.ajax({
 | |
|                 url: createURL("startVirtualMachine&id=" + args.context.instances[0].id),
 | |
|                 dataType: "json",
 | |
|                 async: true,
 | |
|                 success: function(json) {
 | |
|                   var jid = json.startvirtualmachineresponse.jobid;
 | |
|                   args.response.success(
 | |
|                     {_custom:
 | |
|                      {jobId: jid,
 | |
|                       getUpdatedItem: function(json) {
 | |
|                         return json.queryasyncjobresultresponse.jobresult.virtualmachine;
 | |
|                       },
 | |
|                       getActionFilter: function() {
 | |
|                         return vmActionfilter;
 | |
|                       }
 | |
|                      }
 | |
|                     }
 | |
|                   );
 | |
|                 }
 | |
|               });
 | |
|             },
 | |
|             messages: {
 | |
|               confirm: function(args) {
 | |
|                 return 'message.action.start.instance';
 | |
|               },
 | |
|               notification: function(args) {
 | |
|                 return 'label.action.start.instance';
 | |
|               },							
 | |
| 							complete: function(args) {						  
 | |
| 								if(args.password != null) {
 | |
| 									alert('Password of the VM is ' + args.password);
 | |
| 								}
 | |
| 								return 'label.action.start.instance';
 | |
| 							}			
 | |
|             },
 | |
|             notification: {
 | |
|               poll: pollAsyncJobResult
 | |
|             }
 | |
|           },
 | |
|           stop: {
 | |
|             label: 'label.action.stop.instance',
 | |
|             createForm: {
 | |
|               title: 'Stop instance',
 | |
|               desc: 'message.action.stop.instance',
 | |
|               fields: {
 | |
|                 forced: {
 | |
|                   label: 'force.stop',
 | |
|                   isBoolean: true,
 | |
|                   isChecked: false
 | |
|                 }
 | |
|               }
 | |
|             },
 | |
|             action: function(args) {
 | |
|               var array1 = [];
 | |
|               array1.push("&forced=" + (args.data.forced == "on"));
 | |
|               $.ajax({
 | |
|                 url: createURL("stopVirtualMachine&id=" + args.context.instances[0].id + array1.join("")),
 | |
|                 dataType: "json",
 | |
|                 async: true,
 | |
|                 success: function(json) {
 | |
|                   var jid = json.stopvirtualmachineresponse.jobid;
 | |
|                   args.response.success(
 | |
|                     {_custom:
 | |
|                      {jobId: jid,
 | |
|                       getUpdatedItem: function(json) {
 | |
|                         return json.queryasyncjobresultresponse.jobresult.virtualmachine;
 | |
|                       },
 | |
|                       getActionFilter: function() {
 | |
|                         return vmActionfilter;
 | |
|                       }
 | |
|                      }
 | |
|                     }
 | |
|                   );
 | |
|                 }
 | |
|               });
 | |
|             },
 | |
|             messages: {
 | |
|               confirm: function(args) {
 | |
|                 return 'message.action.stop.instance';
 | |
|               },
 | |
|               notification: function(args) {
 | |
|                 return 'label.action.stop.instance';
 | |
|               }
 | |
|             },
 | |
|             notification: {
 | |
|               poll: pollAsyncJobResult
 | |
|             }
 | |
|           },
 | |
|           restart: {
 | |
|             label: 'label.action.reboot.instance',
 | |
|             action: function(args) {
 | |
|               $.ajax({
 | |
|                 url: createURL("rebootVirtualMachine&id=" + args.context.instances[0].id),
 | |
|                 dataType: "json",
 | |
|                 async: true,
 | |
|                 success: function(json) {
 | |
|                   var jid = json.rebootvirtualmachineresponse.jobid;
 | |
|                   args.response.success(
 | |
|                     {_custom:
 | |
|                      {jobId: jid,
 | |
|                       getUpdatedItem: function(json) {
 | |
|                         return json.queryasyncjobresultresponse.jobresult.virtualmachine;
 | |
|                       },
 | |
|                       getActionFilter: function() {
 | |
|                         return vmActionfilter;
 | |
|                       }
 | |
|                      }
 | |
|                     }
 | |
|                   );
 | |
|                 }
 | |
|               });
 | |
|             },
 | |
|             messages: {
 | |
|               confirm: function(args) {
 | |
|                 return 'message.action.reboot.instance';
 | |
|               },
 | |
|               notification: function(args) {
 | |
|                 return 'label.action.reboot.instance';
 | |
|               }
 | |
|             },
 | |
|             notification: {
 | |
|               poll: pollAsyncJobResult
 | |
|             }
 | |
|           },
 | |
|           destroy: {
 | |
|             label: 'label.action.destroy.instance',
 | |
|             messages: {
 | |
|               confirm: function(args) {
 | |
|                 return 'message.action.destroy.instance';
 | |
|               },
 | |
|               notification: function(args) {
 | |
|                 return 'label.action.destroy.instance';
 | |
|               }
 | |
|             },
 | |
|             action: function(args) {
 | |
|               $.ajax({
 | |
|                 url: createURL("destroyVirtualMachine&id=" + args.context.instances[0].id),
 | |
|                 dataType: "json",
 | |
|                 async: true,
 | |
|                 success: function(json) {
 | |
|                   var jid = json.destroyvirtualmachineresponse.jobid;
 | |
|                   args.response.success(
 | |
|                     {_custom:
 | |
|                      {jobId: jid,
 | |
|                       getUpdatedItem: function(json) {
 | |
|                         return json.queryasyncjobresultresponse.jobresult.virtualmachine;
 | |
|                       },
 | |
|                       getActionFilter: function() {
 | |
|                         return vmActionfilter;
 | |
|                       }
 | |
|                      }
 | |
|                     }
 | |
|                   );
 | |
|                 }
 | |
|               });
 | |
|             },
 | |
|             notification: {
 | |
|               poll: pollAsyncJobResult
 | |
|             }
 | |
|           },
 | |
|           restore: {
 | |
|             label: 'label.action.restore.instance',
 | |
|             messages: {
 | |
|               confirm: function(args) {
 | |
|                 return 'message.action.restore.instance';
 | |
|               },
 | |
|               notification: function(args) {
 | |
|                 return 'label.action.restore.instance';
 | |
|               }
 | |
|             },
 | |
|             action: function(args) {
 | |
|               $.ajax({
 | |
|                 url: createURL("recoverVirtualMachine&id=" + args.context.instances[0].id),
 | |
|                 dataType: "json",
 | |
|                 async: true,
 | |
|                 success: function(json) {
 | |
|                   var item = json.recovervirtualmachineresponse.virtualmachine;
 | |
|                   args.response.success({data:item});
 | |
|                 }
 | |
|               });
 | |
|             },
 | |
|             notification: {
 | |
|               poll: function(args) {
 | |
|                 args.complete({ data: { state: 'Stopped' }});
 | |
|               }
 | |
|             }
 | |
|           },
 | |
| 
 | |
|           edit: {
 | |
|             label: 'Edit',
 | |
|             action: function(args) {
 | |
|               var array1 = [];							
 | |
| 							if(args.data.displayname != args.context.instances[0].displayname)
 | |
|                 array1.push("&displayName=" + args.data.displayname);
 | |
| 								
 | |
|               array1.push("&group=" + args.data.group);
 | |
|               array1.push("&ostypeid=" + args.data.guestosid);
 | |
|               //array1.push("&haenable=" + haenable);
 | |
| 
 | |
|               $.ajax({
 | |
|                 url: createURL("updateVirtualMachine&id=" + args.context.instances[0].id + array1.join("")),
 | |
|                 dataType: "json",
 | |
|                 success: function(json) {
 | |
|                   var item = json.updatevirtualmachineresponse.virtualmachine;
 | |
|                   args.response.success({data:item});
 | |
|                 }
 | |
|               });
 | |
|             }
 | |
|           },
 | |
| 
 | |
|           attachISO: {
 | |
|             label: 'label.action.attach.iso',
 | |
|             createForm: {
 | |
|               title: 'label.action.attach.iso',             
 | |
|               fields: {
 | |
|                 iso: {
 | |
|                   label: 'ISO',
 | |
|                   select: function(args) {
 | |
| 									  var items = [];
 | |
| 										var map = {};
 | |
|                     $.ajax({
 | |
|                       url: createURL("listIsos&isReady=true&isofilter=featured"),
 | |
|                       dataType: "json",
 | |
|                       async: false,
 | |
|                       success: function(json) {
 | |
|                         var isos = json.listisosresponse.iso;                        
 | |
|                         $(isos).each(function() {
 | |
|                           items.push({id: this.id, description: this.displaytext});
 | |
| 													map[this.id] = 1;
 | |
|                         });                        
 | |
|                       }
 | |
|                     });
 | |
| 										$.ajax({
 | |
|                       url: createURL("listIsos&isReady=true&isofilter=community"),
 | |
|                       dataType: "json",
 | |
|                       async: false,
 | |
|                       success: function(json) {
 | |
|                         var isos = json.listisosresponse.iso;                        
 | |
|                         $(isos).each(function() {												  
 | |
| 													if(!(this.id in map)) {
 | |
|                             items.push({id: this.id, description: this.displaytext});
 | |
| 														map[this.id] = 1;
 | |
| 													}
 | |
|                         });                        
 | |
|                       }
 | |
|                     });
 | |
| 										$.ajax({
 | |
|                       url: createURL("listIsos&isReady=true&isofilter=selfexecutable"),
 | |
|                       dataType: "json",
 | |
|                       async: false,
 | |
|                       success: function(json) {
 | |
|                         var isos = json.listisosresponse.iso;                        
 | |
|                         $(isos).each(function() {												 
 | |
| 													if(!(this.id in map)) {
 | |
|                             items.push({id: this.id, description: this.displaytext});
 | |
| 														map[this.id] = 1;
 | |
| 													}
 | |
|                         });                             
 | |
|                       }
 | |
|                     });
 | |
| 																				
 | |
| 										args.response.success({data: items});
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             },
 | |
|             action: function(args) {
 | |
|               $.ajax({
 | |
|                 url: createURL("attachIso&virtualmachineid=" + args.context.instances[0].id + "&id=" + args.data.iso),
 | |
|                 dataType: "json",
 | |
|                 async: true,
 | |
|                 success: function(json) {
 | |
|                   var jid = json.attachisoresponse.jobid;
 | |
|                   args.response.success(
 | |
|                     {_custom:
 | |
|                      {jobId: jid,
 | |
|                       getUpdatedItem: function(json) {
 | |
|                         return json.queryasyncjobresultresponse.jobresult.virtualmachine;
 | |
|                       },
 | |
|                       getActionFilter: function() {
 | |
|                         return vmActionfilter;
 | |
|                       }
 | |
|                      }
 | |
|                     }
 | |
|                   );
 | |
|                 }
 | |
|               });
 | |
|             },
 | |
|             messages: {             
 | |
|               notification: function(args) {
 | |
|                 return 'label.action.attach.iso';
 | |
|               }
 | |
|             },
 | |
|             notification: {
 | |
|               poll: pollAsyncJobResult
 | |
|             }
 | |
|           },
 | |
| 
 | |
|           detachISO: {
 | |
|             label: 'label.action.detach.iso',
 | |
|             messages: {
 | |
|               confirm: function(args) {
 | |
|                 return 'message.detach.iso.confirm';
 | |
|               },
 | |
|               notification: function(args) {
 | |
|                 return 'label.action.detach.iso';
 | |
|               }
 | |
|             },
 | |
|             action: function(args) {
 | |
|               $.ajax({
 | |
|                 url: createURL("detachIso&virtualmachineid=" + args.context.instances[0].id),
 | |
|                 dataType: "json",
 | |
|                 async: true,
 | |
|                 success: function(json) {
 | |
|                   var jid = json.detachisoresponse.jobid;
 | |
|                   args.response.success(
 | |
|                     {_custom:
 | |
|                      {jobId: jid,
 | |
|                       getUpdatedItem: function(json) {
 | |
|                         return json.queryasyncjobresultresponse.jobresult.virtualmachine;
 | |
|                       },
 | |
|                       getActionFilter: function() {
 | |
|                         return vmActionfilter;
 | |
|                       }
 | |
|                      }
 | |
|                     }
 | |
|                   );
 | |
|                 }
 | |
|               });
 | |
|             },
 | |
|             notification: {
 | |
|               poll: pollAsyncJobResult
 | |
|             }
 | |
|           },
 | |
| 
 | |
|           resetPassword: {
 | |
|             label: 'label.action.reset.password',
 | |
|             messages: {
 | |
|               confirm: function(args) {
 | |
|                 return 'message.action.instance.reset.password';
 | |
|               },
 | |
|               notification: function(args) {
 | |
|                 return 'label.action.reset.password';
 | |
|               },
 | |
|               complete: function(args) {
 | |
|                 return 'Password has been reset to ' + args.password;
 | |
|               }
 | |
|             },
 | |
| 
 | |
|             preAction: function(args) {
 | |
|               var jsonObj = args.context.instances[0];
 | |
|               if (jsonObj.passwordenabled == false) {
 | |
|                 cloudStack.dialog.notice({ message: 'message.reset.password.warning.notPasswordEnabled' });
 | |
|                 return false;
 | |
|               }
 | |
|               else if (jsonObj.state != 'Stopped') {
 | |
|                 cloudStack.dialog.notice({ message: 'message.reset.password.warning.notStopped' });
 | |
|                 return false;
 | |
|               }
 | |
|               return true;
 | |
|             },
 | |
| 
 | |
|             action: function(args) {
 | |
|               $.ajax({
 | |
|                 url: createURL("resetPasswordForVirtualMachine&id=" + args.context.instances[0].id),
 | |
|                 dataType: "json",
 | |
|                 async: true,
 | |
|                 success: function(json) {
 | |
|                   var jid = json.resetpasswordforvirtualmachineresponse.jobid;
 | |
|                   args.response.success(
 | |
|                     {_custom:
 | |
|                      {jobId: jid,
 | |
|                       getUpdatedItem: function(json) {
 | |
|                         return json.queryasyncjobresultresponse.jobresult.virtualmachine;
 | |
|                       },
 | |
|                       getActionFilter: function() {
 | |
|                         return vmActionfilter;
 | |
|                       }
 | |
|                      }
 | |
|                     }
 | |
|                   );
 | |
|                 }
 | |
|               });
 | |
|             },
 | |
|             notification: {
 | |
|               poll: pollAsyncJobResult
 | |
|             }
 | |
|           },
 | |
| 
 | |
|           changeService: {
 | |
|             label: 'label.action.change.service',
 | |
|             messages: {
 | |
|               notification: function(args) {
 | |
|                 return 'label.action.change.service';
 | |
|               }
 | |
|             },
 | |
|             createForm: {
 | |
|               title: 'label.action.change.service',
 | |
|               desc: '',
 | |
|               fields: {
 | |
|                 serviceOffering: {
 | |
|                   label: 'label.compute.offering',
 | |
|                   select: function(args) {
 | |
|                     $.ajax({
 | |
|                       url: createURL("listServiceOfferings&VirtualMachineId=" + args.context.instances[0].id),
 | |
|                       dataType: "json",
 | |
|                       async: true,
 | |
|                       success: function(json) {
 | |
|                         var serviceofferings = json.listserviceofferingsresponse.serviceoffering;
 | |
|                         var items = [];
 | |
|                         $(serviceofferings).each(function() {
 | |
|                           items.push({id: this.id, description: this.displaytext});
 | |
|                         });
 | |
|                         args.response.success({data: items});
 | |
|                       }
 | |
|                     });
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             },
 | |
| 
 | |
|             preAction: function(args) {
 | |
|               var jsonObj = args.context.instances[0];
 | |
|               if (jsonObj.state != 'Stopped') {
 | |
|                 cloudStack.dialog.notice({ message: 'message.action.change.service.warning.for.instance' });
 | |
|                 return false;
 | |
|               }
 | |
|               return true;
 | |
|             },
 | |
| 
 | |
|             action: function(args) {
 | |
|               $.ajax({
 | |
|                 url: createURL("changeServiceForVirtualMachine&id=" + args.context.instances[0].id + "&serviceOfferingId=" + args.data.serviceOffering),
 | |
|                 dataType: "json",
 | |
|                 async: true,
 | |
|                 success: function(json) {
 | |
|                   var jsonObj = json.changeserviceforvirtualmachineresponse.virtualmachine;
 | |
|                   args.response.success({data: jsonObj});
 | |
|                 }
 | |
|               });
 | |
|             },
 | |
|             notification: {
 | |
|               poll: function(args) {
 | |
|                 args.complete();
 | |
|               }
 | |
|             }
 | |
|           },
 | |
| 
 | |
|           createTemplate: {
 | |
|             label: 'label.create.template',
 | |
|             messages: {
 | |
|               confirm: function(args) {
 | |
|                 return 'message.create.template';
 | |
|               },
 | |
|               notification: function(args) {
 | |
|                 return 'label.create.template';
 | |
|               }
 | |
|             },
 | |
|             createForm: {
 | |
|               title: 'label.create.template',
 | |
|               desc: 'label.create.template',
 | |
|               preFilter: cloudStack.preFilter.createTemplate,
 | |
|               fields: {
 | |
|                 name: { label: 'label.name', validation: { required: true }},
 | |
|                 displayText: { label: 'label.description', validation: { required: true }},
 | |
|                 osTypeId: {
 | |
|                   label: 'label.os.type',
 | |
|                   select: function(args) {
 | |
|                     $.ajax({
 | |
|                       url: createURL("listOsTypes"),
 | |
|                       dataType: "json",
 | |
|                       async: true,
 | |
|                       success: function(json) {
 | |
|                         var ostypes = json.listostypesresponse.ostype;
 | |
|                         var items = [];
 | |
|                         $(ostypes).each(function() {
 | |
|                           items.push({id: this.id, description: this.description});
 | |
|                         });
 | |
|                         args.response.success({data: items});
 | |
|                       }
 | |
|                     });
 | |
|                   }
 | |
|                 },
 | |
|                 isPublic: { label: 'label.public', isBoolean: true },
 | |
|                 url: { label: 'image.directory', validation: { required: true } }
 | |
|               }
 | |
|             },
 | |
|             action: function(args) {
 | |
|               /*
 | |
|                var isValid = true;
 | |
|                isValid &= validateString("Name", $thisDialog.find("#create_template_name"), $thisDialog.find("#create_template_name_errormsg"));
 | |
|                isValid &= validateString("Display Text", $thisDialog.find("#create_template_desc"), $thisDialog.find("#create_template_desc_errormsg"));
 | |
|                isValid &= validateString("Image Directory", $thisDialog.find("#image_directory"), $thisDialog.find("#image_directory_errormsg"), false); //image directory is required when creating template from VM whose hypervisor is BareMetal
 | |
|                if (!isValid)
 | |
|                return;
 | |
|                $thisDialog.dialog("close");
 | |
|                */
 | |
| 
 | |
|               var array1 = [];
 | |
|               array1.push("&name=" + todb(args.data.name));
 | |
|               array1.push("&displayText=" + todb(args.data.displayText));
 | |
|               array1.push("&osTypeId=" + args.data.osTypeId);
 | |
| 
 | |
|               //array1.push("&isPublic=" + args.data.isPublic);
 | |
|               array1.push("&isPublic=" + (args.data.isPublic=="on"));  //temporary, before Brian fixes it.
 | |
| 
 | |
|               array1.push("&url=" + todb(args.data.url));
 | |
| 
 | |
|               $.ajax({
 | |
|                 url: createURL("createTemplate&virtualmachineid=" + args.context.instances[0].id + array1.join("")),
 | |
|                 dataType: "json",
 | |
|                 async: true,
 | |
|                 success: function(json) {
 | |
|                   var jid = json.createtemplateresponse.jobid;
 | |
|                   args.response.success(
 | |
|                     {_custom:
 | |
|                      {jobId: jid,
 | |
|                       getUpdatedItem: function(json) {
 | |
|                         return {}; //no properties in this VM needs to be updated
 | |
|                       },
 | |
|                       getActionFilter: function() {
 | |
|                         return vmActionfilter;
 | |
|                       }
 | |
|                      }
 | |
|                     }
 | |
|                   );
 | |
|                 }
 | |
|               });
 | |
|             },
 | |
|             notification: {
 | |
|               poll: pollAsyncJobResult
 | |
|             }
 | |
|           },
 | |
| 
 | |
|           migrate: {
 | |
|             label: 'label.migrate.instance.to.host',
 | |
|             messages: {
 | |
|               confirm: function(args) {
 | |
|                 return 'message.migrate.instance.to.host';
 | |
|               },
 | |
|               notification: function(args) {
 | |
|                 return 'label.migrate.instance.to.host';
 | |
|               }
 | |
|             },
 | |
|             createForm: {
 | |
|               title: 'label.migrate.instance.to.host',
 | |
|               desc: '',
 | |
|               fields: {
 | |
|                 hostId: {
 | |
|                   label: 'label.host',
 | |
|                   validation: { required: true },
 | |
|                   select: function(args) {
 | |
|                     $.ajax({
 | |
|                       url: createURL("listHosts&VirtualMachineId=" + args.context.instances[0].id),
 | |
|                       //url: createURL("listHosts"),	//for testing only, comment it out before checking in.
 | |
|                       dataType: "json",
 | |
|                       async: true,
 | |
|                       success: function(json) {
 | |
|                         var hosts = json.listhostsresponse.host;
 | |
|                         var items = [];
 | |
|                         $(hosts).each(function() {
 | |
|                           items.push({id: this.id, description: (this.name + " (" + (this.suitableformigration? "Suitable": "Not Suitable") + ")")});
 | |
|                         });
 | |
|                         args.response.success({data: items});
 | |
|                       }
 | |
|                     });
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             },
 | |
|             action: function(args) {
 | |
|               $.ajax({
 | |
|                 url: createURL("migrateVirtualMachine&hostid=" + args.data.hostId + "&virtualmachineid=" + args.context.instances[0].id),
 | |
|                 dataType: "json",
 | |
|                 async: true,
 | |
|                 success: function(json) {
 | |
|                   var jid = json.migratevirtualmachineresponse.jobid;
 | |
|                   args.response.success(
 | |
|                     {_custom:
 | |
|                      {jobId: jid,
 | |
|                       getUpdatedItem: function(json) {
 | |
|                         return json.queryasyncjobresultresponse.jobresult.virtualmachine;
 | |
|                         /*
 | |
|                          var vmObj;
 | |
|                          $.ajax({
 | |
|                          url: createURL("listVirtualMachines&id=" + args.context.instances[0].id),
 | |
|                          dataType: "json",
 | |
|                          async: false,
 | |
|                          success: function(json) {
 | |
|                          var items =  json.listvirtualmachinesresponse.virtualmachine;
 | |
|                          if(items != null && items.length > 0) {
 | |
|                          vmObj = items[0];
 | |
|                          }
 | |
|                          }
 | |
|                          });
 | |
|                          return vmObj;
 | |
|                          */
 | |
|                       },
 | |
|                       getActionFilter: function() {
 | |
|                         return vmActionfilter;
 | |
|                       }
 | |
|                      }
 | |
|                     }
 | |
|                   );
 | |
|                 }
 | |
|               });
 | |
|             },
 | |
|             notification: {
 | |
|               poll: pollAsyncJobResult
 | |
|             }
 | |
|           },
 | |
| 
 | |
|           migrateToAnotherStorage: {
 | |
|             label: 'label.migrate.instance.to.ps',
 | |
|             messages: {
 | |
|               confirm: function(args) {
 | |
|                 return 'message.migrate.instance.to.ps';
 | |
|               },
 | |
|               notification: function(args) {
 | |
|                 return 'label.migrate.instance.to.ps';
 | |
|               }
 | |
|             },
 | |
|             createForm: {
 | |
|               title: 'label.migrate.instance.to.ps',
 | |
|               desc: '',
 | |
|               fields: {
 | |
|                 storageId: {
 | |
|                   label: 'label.primary.storage',
 | |
|                   validation: { required: true },
 | |
|                   select: function(args) {
 | |
|                     $.ajax({
 | |
|                       url: createURL("listStoragePools&zoneid=" + args.context.instances[0].zoneid),
 | |
|                       dataType: "json",
 | |
|                       async: true,
 | |
|                       success: function(json) {
 | |
|                         var pools = json.liststoragepoolsresponse.storagepool;
 | |
|                         var items = [];
 | |
|                         $(pools).each(function() {
 | |
|                           items.push({id: this.id, description: this.name});
 | |
|                         });
 | |
|                         args.response.success({data: items});
 | |
|                       }
 | |
|                     });
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             },
 | |
|             action: function(args) {
 | |
|               $.ajax({
 | |
|                 url: createURL("migrateVirtualMachine&storageid=" + args.data.storageId + "&virtualmachineid=" + args.context.instances[0].id),
 | |
|                 dataType: "json",
 | |
|                 async: true,
 | |
|                 success: function(json) {
 | |
|                   var jid = json.migratevirtualmachineresponse.jobid;
 | |
|                   args.response.success(
 | |
|                     {_custom:
 | |
|                      {jobId: jid,
 | |
|                       getUpdatedItem: function(json) {
 | |
|                         return json.queryasyncjobresultresponse.jobresult.virtualmachine;
 | |
|                       },
 | |
|                       getActionFilter: function() {
 | |
|                         return vmActionfilter;
 | |
|                       }
 | |
|                      }
 | |
|                     }
 | |
|                   );
 | |
|                 }
 | |
|               });
 | |
|             },
 | |
|             notification: {
 | |
|               poll: pollAsyncJobResult
 | |
|             }
 | |
|           },
 | |
| 
 | |
|           viewConsole: {
 | |
|             label: 'label.view.console',  
 | |
|             action: {
 | |
|               externalLink: {
 | |
|                 url: function(args) {
 | |
|                   return clientConsoleUrl + '?cmd=access&vm=' + args.context.instances[0].id;
 | |
|                 },
 | |
|                 title: function(args) {						
 | |
|                   return args.context.instances[0].id.substr(0,8);  //title in window.open() can't have space nor longer than 8 characters. Otherwise, IE browser will have error.
 | |
|                 },
 | |
|                 width: 820,
 | |
|                 height: 640
 | |
|               }
 | |
|             }
 | |
|           }
 | |
|         },
 | |
|         tabs: {
 | |
|           // Details tab
 | |
|           details: {
 | |
|             title: 'label.details',
 | |
| 
 | |
|             preFilter: function(args) {
 | |
|               var hiddenFields;
 | |
|               if(isAdmin()) {
 | |
|                 hiddenFields = [];
 | |
|               }
 | |
|               else {
 | |
|                 hiddenFields = ["hypervisor"];
 | |
|               }
 | |
| 
 | |
|               if (!args.context.instances[0].publicip) {
 | |
|                 hiddenFields.push('publicip');
 | |
|               }
 | |
|               												
 | |
| 							if(!isAdmin()) {				
 | |
| 								hiddenFields.push('instancename');
 | |
| 							}			
 | |
| 														
 | |
|               return hiddenFields;
 | |
|             },
 | |
| 
 | |
|             fields: [
 | |
|               {  
 | |
|                 displayname: { label: 'label.display.name', isEditable: true },		
 | |
|                 name: { label: 'label.host.name' },								
 | |
|                 state: { 
 | |
| 								  label: 'label.state',
 | |
| 									pollAgainIfValueIsIn: { 
 | |
| 										'Starting': 1,
 | |
| 										'Stopping': 1
 | |
| 									},
 | |
| 									pollAgainFn: function(context) { //???	
 | |
|                     var toClearInterval = false; 								  
 | |
| 										$.ajax({
 | |
| 											url: createURL("listVirtualMachines&id=" + context.instances[0].id),
 | |
| 											dataType: "json",
 | |
| 											async: false,
 | |
| 											success: function(json) {	
 | |
| 												var jsonObj = json.listvirtualmachinesresponse.virtualmachine[0];   
 | |
| 												if(jsonObj.state != context.instances[0].state) { 
 | |
| 													toClearInterval = true;	//to clear interval	
 | |
| 												}						
 | |
| 											}
 | |
| 										});	
 | |
|                     return toClearInterval;										
 | |
| 									}								
 | |
| 								},                       
 | |
|                 hypervisor: { label: 'label.hypervisor' },
 | |
|                 templatename: { label: 'label.template' },
 | |
|                 guestosid: {
 | |
|                   label: 'label.os.type',
 | |
|                   isEditable: true,
 | |
|                   select: function(args) {
 | |
|                     $.ajax({
 | |
|                       url: createURL("listOsTypes"),
 | |
|                       dataType: "json",
 | |
|                       async: true,
 | |
|                       success: function(json) {
 | |
|                         var ostypes = json.listostypesresponse.ostype;
 | |
|                         var items = [];
 | |
|                         $(ostypes).each(function() {
 | |
|                           items.push({id: this.id, description: this.description});
 | |
|                         });
 | |
|                         args.response.success({data: items});
 | |
|                       }
 | |
|                     });
 | |
|                   }
 | |
|                 },              
 | |
|                                 
 | |
|                 /*
 | |
| 								isoid: {
 | |
|                   label: 'label.attached.iso',
 | |
|                   isEditable: false,
 | |
|                   converter: function(isoid) {
 | |
|                     return cloudStack.converters.toBooleanText(isoid != null);
 | |
|                   }
 | |
|                 },
 | |
| 								*/
 | |
| 								isoname: { label: 'label.attached.iso' },
 | |
| 								
 | |
| 								serviceofferingname: { label: 'label.compute.offering' },
 | |
| 								haenable: { label: 'label.ha.enabled', converter:cloudStack.converters.toBooleanText },
 | |
| 								publicip: { label: 'label.public.ip' },								
 | |
| 								
 | |
| 								group: { label: 'label.group', isEditable: true },
 | |
| 								zonename: { label: 'label.zone.name', isEditable: false },
 | |
| 								hostname: { label: 'label.host' },                
 | |
| 								publicip: { label: 'label.public.ip' },  
 | |
|                 domain: { label: 'label.domain' },
 | |
|                 account: { label: 'label.account' },
 | |
|                 created: { label: 'label.created', converter: cloudStack.converters.toLocalDate },
 | |
| 								name: { label: 'label.name' },
 | |
| 								id: { label: 'label.id' }
 | |
|               }
 | |
|             ],
 | |
|             
 | |
|             tags: cloudStack.api.tags({ resourceType: 'UserVm', contextId: 'instances' }),
 | |
| 
 | |
|             dataProvider: function(args) {						 
 | |
| 							$.ajax({
 | |
| 								url: createURL("listVirtualMachines&id=" + args.context.instances[0].id),
 | |
| 								dataType: "json",
 | |
| 								async: true,
 | |
| 								success: function(json) {				
 | |
|                   var jsonObj;					
 | |
|                   if(json.listvirtualmachinesresponse.virtualmachine != null && json.listvirtualmachinesresponse.virtualmachine.length > 0)                  
 | |
| 									  jsonObj = json.listvirtualmachinesresponse.virtualmachine[0]; 
 | |
| 									else
 | |
| 									  jsonObj = $.extend(args.context.instances[0], {state: "Destroyed"}); //after a regular user destroys a VM, listVirtualMachines API will no longer returns this destroyed VM to the regular user.
 | |
| 																			
 | |
| 									args.response.success(
 | |
| 										{
 | |
| 											actionFilter: vmActionfilter,
 | |
| 											data: jsonObj
 | |
| 										}
 | |
| 									);		
 | |
| 								}
 | |
| 							});
 | |
|             }
 | |
|           },
 | |
| 
 | |
|           /**
 | |
|            * NICs tab
 | |
|            */
 | |
|           nics: {
 | |
|             title: 'label.nics',
 | |
|             multiple: true,
 | |
|             fields: [
 | |
|               {
 | |
|                 name: { label: 'label.name', header: true },
 | |
|                 networkname: {label: 'Network Name' },
 | |
|                 ipaddress: { label: 'label.ip.address' },
 | |
|                 type: { label: 'label.type' },
 | |
|                 gateway: { label: 'label.gateway' },
 | |
|                 netmask: { label: 'label.netmask' },
 | |
|                 isdefault: {
 | |
|                   label: 'label.is.default',
 | |
|                   converter: function(data) {
 | |
|                     return data ? _l('label.yes') : _l('label.no');
 | |
|                   }
 | |
|                 }
 | |
|               }
 | |
|             ],
 | |
|             dataProvider: function(args) {
 | |
|                     $.ajax({
 | |
|                      url:createURL("listVirtualMachines&details=nics&id=" + args.context.instances[0].id),
 | |
|                      dataType: "json",
 | |
|                      async:true,
 | |
|                      success:function(json) {
 | |
|                      // Handling the display of network name for a VM under the NICS tabs
 | |
|                      args.response.success({
 | |
|                      data: $.map(json.listvirtualmachinesresponse.virtualmachine[0].nic, function(nic, index) {
 | |
|                      var name = 'NIC ' + (index + 1);                    
 | |
|                      if (nic.isdefault) {
 | |
|                           name += ' (' + _l('label.default') + ')';
 | |
|                           }
 | |
|                      return $.extend(nic, {
 | |
|                         name: name
 | |
|                                });
 | |
|                             })
 | |
|                         });
 | |
|                      }
 | |
|                 });
 | |
|               }
 | |
|           },
 | |
| 
 | |
|            /**
 | |
|            * Security Groups tab
 | |
|            */
 | |
|           securityGroups: {
 | |
|             title: 'label.menu.security.groups',
 | |
|             multiple: true,
 | |
|             fields: [
 | |
|               {
 | |
|                 id: { label: 'ID' },
 | |
|                 name: { label: 'label.name' },
 | |
|                 description: { label: 'label.description' }
 | |
|               }
 | |
|             ],
 | |
|             dataProvider: function(args) {
 | |
|               args.response.success({data: args.context.instances[0].securitygroup});
 | |
|             }
 | |
|           },
 | |
| 
 | |
|           /**
 | |
|            * Statistics tab
 | |
|            */
 | |
|           stats: {
 | |
|             title: 'label.statistics',
 | |
|             fields: {
 | |
|               totalCPU: { label: 'label.total.cpu' },
 | |
|               cpuused: { label: 'label.cpu.utilized' },
 | |
|               networkkbsread: { label: 'label.network.read' },
 | |
|               networkkbswrite: { label: 'label.network.write' }
 | |
|             },
 | |
|             dataProvider: function(args) {
 | |
|               var jsonObj = args.context.instances[0];
 | |
|               args.response.success({
 | |
|                 data: {
 | |
|                   totalCPU: jsonObj.cpunumber + " x " + cloudStack.converters.convertHz(jsonObj.cpuspeed),
 | |
|                   cpuused: jsonObj.cpuused,
 | |
|                   networkkbsread: (jsonObj.networkkbsread == null)? "N/A": cloudStack.converters.convertBytes(jsonObj.networkkbsread * 1024),
 | |
|                   networkkbswrite: (jsonObj.networkkbswrite == null)? "N/A": cloudStack.converters.convertBytes(jsonObj.networkkbswrite * 1024)
 | |
|                 }
 | |
|               });
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   var vmActionfilter = cloudStack.actionFilter.vmActionFilter = function(args) {
 | |
|     var jsonObj = args.context.item;
 | |
|     var allowedActions = [];
 | |
| 
 | |
|     if (jsonObj.state == 'Destroyed') {
 | |
|       if(isAdmin() || isDomainAdmin()) {
 | |
|         allowedActions.push("restore");
 | |
|       }
 | |
|     }
 | |
|     else if (jsonObj.state == 'Running') {     
 | |
|       allowedActions.push("stop");
 | |
|       allowedActions.push("restart");
 | |
|       allowedActions.push("destroy");
 | |
|       allowedActions.push("changeService");
 | |
| 
 | |
|       if (isAdmin())
 | |
|         allowedActions.push("migrate");
 | |
| 
 | |
|       if (jsonObj.isoid == null)
 | |
|         allowedActions.push("attachISO");
 | |
|       else
 | |
|         allowedActions.push("detachISO");
 | |
| 
 | |
|       allowedActions.push("resetPassword");
 | |
| 
 | |
|       if(jsonObj.hypervisor == "BareMetal") {
 | |
|         allowedActions.push("createTemplate");
 | |
|       }
 | |
| 
 | |
|       allowedActions.push("viewConsole");
 | |
|     }
 | |
|     else if (jsonObj.state == 'Stopped') {
 | |
|       allowedActions.push("edit");
 | |
|       allowedActions.push("start");
 | |
|       allowedActions.push("destroy");
 | |
| 
 | |
|       if(isAdmin())
 | |
|         allowedActions.push("migrateToAnotherStorage");
 | |
| 
 | |
|       if (jsonObj.isoid == null)	{
 | |
|         allowedActions.push("attachISO");
 | |
|       }
 | |
|       else {
 | |
|         allowedActions.push("detachISO");
 | |
|       }
 | |
|       allowedActions.push("resetPassword");
 | |
|       allowedActions.push("changeService");
 | |
|       if(jsonObj.hypervisor == "BareMetal") {
 | |
|         allowedActions.push("createTemplate");
 | |
|       }
 | |
|     }
 | |
|     else if (jsonObj.state == 'Starting') {
 | |
|     //  allowedActions.push("stop");
 | |
|     }
 | |
|     else if (jsonObj.state == 'Error') {
 | |
|       allowedActions.push("destroy");
 | |
|     }
 | |
|     return allowedActions;
 | |
|   }
 | |
| 
 | |
| })(jQuery, cloudStack);
 |