2012-01-26 15:31:25 -08:00

2074 lines
70 KiB
JavaScript

(function($, cloudStack) {
var testProviderActionFilter = function(args) {
if (!cloudStack._testProviderStatus) cloudStack._testProviderStatus = 'disabled';
if (cloudStack._testProviderStatus == 'disabled') {
cloudStack._testProviderStatus = 'enabled';
return ['enable', 'start'];
} else {
cloudStack._testProviderStatus = 'disabled';
return ['disable', 'stop'];
}
};
cloudStack.sections.system = {
title: 'System',
id: 'system',
// System dashboard
dashboard: {
dataProvider: function(args) {
args.response.success({
data: {
zoneCount: 3,
podCount: 4,
clusterCount: 4,
hostCount: 4,
cpuCapacityTotal: '15000 GHZ',
memCapacityTotal: '15.08 GB',
storageCapacityTotal: '10.74 TB'
}
});
}
},
zoneDashboard: function(args) {
setTimeout(function() {
args.response.success({
data: {
8: {
used: 12,
total: 24,
percent: 50
},
5: {
used: 12,
total: 24,
percent: 50
},
0: {
used: '1 GB',
total: '10 GB',
percent: 10
},
1: {
used: '1 ghZ',
total: '10 ghz',
percent: 10
},
2: {
used: '25 GB',
total: '100 GB',
percent: 25
},
6: {
used: '600 GB',
total: '1000 GB',
percent: 60
}
}
});
}, 200);
},
// Network-as-a-service configuration
naas: {
providerListView: {
id: 'networkProviders',
fields: {
name: { label: 'Name' },
state: { label: 'State', indicator: { 'Enabled': 'on', 'Disabled': 'off' } }
},
dataProvider: function(args) {
args.response.success({
data: [
{
id: 'netscaler',
name: 'NetScaler',
state: 'Enabled'
},
{
id: 'srx',
name: 'SRX',
state: 'Enabled'
},
{
id: 'f5',
name: 'F5',
state: 'Enabled'
},
{
id: 'virtualRouter',
name: 'Virtual Router',
state: 'Enabled'
},
{
id: 'securityGroups',
name: 'Security Groups',
state: 'Enabled'
}
]
});
},
detailView: function(args) {
return cloudStack.sections.system.naas.networkProviders.types[
args.context.networkProviders[0].id
];
}
},
mainNetworks: {
'public': {
detailView: {
actions: {
edit: {
label: 'Edit network details',
action: function(args) {
args.response.success();
}
}
},
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'name' },
displaytext: { label: 'displaytext' }
},
{
broadcastdomaintype: { label: 'broadcastdomaintype' },
traffictype: { label: 'traffictype' },
gateway: { label: 'gateway' },
netmask: { label: 'netmask' },
startip: { isEditable: true, label: 'startip' },
endip: { isEditable: true, label: 'endip' },
zoneid: { label: 'zoneid' },
networkofferingid: { label: 'networkofferingid' },
networkofferingname: { label: 'networkofferingname' },
networkofferingdisplaytext: { label: 'networkofferingdisplaytext' },
networkofferingavailability: { label: 'networkofferingavailability' },
isshared: { label: 'isshared' },
issystem: { label: 'issystem' },
state: { label: 'state' },
related: { label: 'related' },
broadcasturi: { label: 'broadcasturi' },
dns1: { label: 'dns1' },
type: { label: 'type' }
}
],
dataProvider: function(args) {
args.response.success({
data: testData.data.networks[0]
});
}
},
ipAddresses: {
title: 'IP Addresses',
custom: function(args) {
return $('<div></div>').multiEdit({
context: args.context,
noSelect: true,
fields: {
'gateway': { edit: true, label: 'Gateway' },
'netmask': { edit: true, label: 'Netmask' },
'vlanid': { edit: true, label: 'VLAN', isOptional: true },
'startip': { edit: true, label: 'Start IP' },
'endip': { edit: true, label: 'End IP' },
'add-rule': { label: 'Add', addButton: true }
},
add: {
label: 'Add',
action: function(args) {
setTimeout(function() {
args.response.success({
notification: {
label: 'Added IP address',
poll: testData.notifications.testPoll
}
});
}, 500);
}
},
actions: {
destroy: {
label: 'Remove Rule',
action: function(args) {
setTimeout(function() {
args.response.success({
notification: {
label: 'Removed IP address',
poll: testData.notifications.testPoll
}
});
}, 500);
}
}
},
dataProvider: function(args) {
setTimeout(function() {
args.response.success({
data: [
{
gateway: '10.223.110.223',
netmask: '255.255.255.0',
vlanid: '1480'
}
]
});
}, 100);
}
});
}
}
}
}
},
'storage': {
detailView: {
actions: {
edit: {
label: 'Edit network details',
action: function(args) {
args.response.success();
}
}
},
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'name' },
displaytext: { label: 'displaytext' }
},
{
broadcastdomaintype: { label: 'broadcastdomaintype' },
traffictype: { label: 'traffictype' },
gateway: { label: 'gateway' },
netmask: { label: 'netmask' },
startip: { isEditable: true, label: 'startip' },
endip: { isEditable: true, label: 'endip' },
zoneid: { label: 'zoneid' },
networkofferingid: { label: 'networkofferingid' },
networkofferingname: { label: 'networkofferingname' },
networkofferingdisplaytext: { label: 'networkofferingdisplaytext' },
networkofferingavailability: { label: 'networkofferingavailability' },
isshared: { label: 'isshared' },
issystem: { label: 'issystem' },
state: { label: 'state' },
related: { label: 'related' },
broadcasturi: { label: 'broadcasturi' },
dns1: { label: 'dns1' },
type: { label: 'type' }
}
],
dataProvider: function(args) {
args.response.success({
data: testData.data.networks[0]
});
}
},
ipAddresses: {
title: 'IP Addresses',
custom: function(args) {
return $('<div></div>').multiEdit({
context: args.context,
noSelect: true,
fields: {
'gateway': { edit: true, label: 'Gateway' },
'netmask': { edit: true, label: 'Netmask' },
'vlanid': { edit: true, label: 'VLAN', isOptional: true },
'startip': { edit: true, label: 'Start IP' },
'endip': { edit: true, label: 'End IP' },
'add-rule': { label: 'Add', addButton: true }
},
add: {
label: 'Add',
action: function(args) {
setTimeout(function() {
args.response.success({
notification: {
label: 'Added IP address',
poll: testData.notifications.testPoll
}
});
}, 500);
}
},
actions: {
destroy: {
label: 'Remove Rule',
action: function(args) {
setTimeout(function() {
args.response.success({
notification: {
label: 'Removed IP address',
poll: testData.notifications.testPoll
}
});
}, 500);
}
}
},
dataProvider: function(args) {
setTimeout(function() {
args.response.success({
data: [
{
gateway: '10.223.110.223',
netmask: '255.255.255.0',
vlanid: '1480'
}
]
});
}, 100);
}
});
}
}
}
}
},
'management': {
detailView: {
viewAll: { path: '_zone.pods', label: 'Pods' },
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'Name' }
}
],
dataProvider: function(args) {
args.response.success({ data: testData.data.networks[0] });
}
}
}
}
},
'guest': {
detailView: {
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'Name' }
}
],
dataProvider: function(args) {
args.response.success({ data: testData.data.networks[0] });
}
},
network: {
title: 'Network',
listView: {
section: 'networks',
id: 'networks',
fields: {
name: { label: 'Name' },
startip: { label: 'Start IP' },
endip: { label: 'End IP' },
vlan: { label: 'VLAN' }
},
actions: {
add: {
label: 'Add network',
createForm: {
title: 'Add network',
desc: 'Please fill in the following to add a guest network',
fields: {
vlan: {
label: 'VLAN ID',
validation: { required: true }
},
gateway: {
label: 'Gateway',
validation: { required: true }
},
netmask: {
label: 'Netmask',
validation: { required: true }
},
ipRange: {
label: 'IP Range',
range: ['startip', 'endip'],
validation: { required: true }
}
}
},
action: function(args) {
args.response.success();
},
messages: {
notification: function(args) {
return 'Added guest network';
}
},
notification: { poll: testData.notifications.testPoll }
}
},
dataProvider: testData.dataProvider.listView('networks')
}
}
}
}
}
},
networks: {
listView: {
id: 'physicalNetworks',
hideToolbar: true,
fields: {
name: { label: 'Name' },
state: { label: 'State', indicator: { 'Enabled': 'on', 'Disabled': 'off' }},
vlan: { label: 'VLAN Range' }
}
},
dataProvider: function(args) {
setTimeout(function() {
args.response.success({
data: args.context.zones[0].name == 'San Jose' ? [
{ id: 1, name: 'Network A', state: 'Enabled', vlan: '1480-1559' },
{ id: 2, name: 'Network B', state: 'Disabled', vlan: '1222-2000' },
{ id: 3, name: 'Network C', state: 'Enabeld', vlan: '2333-2455' }
] : [
{ id: 1, name: 'Network A', state: 'Enabled', vlan: '1480-1559' }
]
});
}, 300);
}
},
trafficTypes: {
dataProvider: function(args) {
setTimeout(function() {
args.response.success({
data: [
{ id: 3, name: 'Public' },
{ id: 1, name: 'Guest' },
{ id: 2, name: 'Management' },
{ id: 4, name: 'Storage' }
]
});
}, 300);
}
},
networkProviders: {
// Returns state of each network provider type
statusCheck: function(args) {
return {
virtualRouter: 'enabled',
netscaler: 'not-configured',
f5: 'disabled',
srx: 'enabled',
securityGroups: 'enabled'
};
},
statusLabels: {
enabled: 'Enabled',
'not-configured': 'Not setup',
disabled: 'Disabled'
},
types: {
// Virtual router list view
virtualRouter: {
isMaximized: true,
type: 'detailView',
id: 'virtualRouter-providers',
label: 'Virtual Router',
fields: {
name: { label: 'Name' },
ipaddress: { label: 'IP Address' },
state: { label: 'Status', indicator: { 'Enabled': 'on' } }
},
providerActionFilter: testProviderActionFilter,
providerActions: {
disable: {
label: 'Disable',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Disabled virtual router provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
enable: {
label: 'Enable',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Enable virtual router provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
stop: {
label: 'Shutdown',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Shutdown virtual router provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
start: {
label: 'Start',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Started virtual router provider'; }
},
notification: { poll: testData.notifications.testPoll }
}
},
tabs: {
network: {
title: 'Network',
fields: [
{
name: { label: 'Name' }
},
{
id: { label: 'ID' },
ipaddress: { label: 'IP Address' },
state: { label: 'State' }
},
{
accounts: { label: 'Accounts' },
instances: { label: 'Instances' },
volumes: { label: 'Volumes' }
},
{
Vpn: { label: 'VPN' },
Dhcp: { label: 'DHCP' },
Dns: { label: 'DNS' },
Gateway: { label: 'Gateway' },
Firewall: { label: 'Firewall' },
Lb: { label: 'Load Balancer' },
UserData: { label: 'UserData' },
SourceNat: { label: 'Source NAT' },
StaticNat: { label: 'Static NAT' }
}
],
dataProvider: function(args) {
setTimeout(function() {
args.response.success({
data: {
id: '123918801030a-s-d-s123',
name: 'Router0001B',
ipaddress: '192.168.1.155',
state: 'Enabled',
accounts: 12,
instances: 14,
volumes: 23,
Vpn: 'On',
Dhcp: 'On',
Dns: 'On',
Gateway: 'On',
Firewall: 'On',
Lb: 'On',
UserData: 'On',
SourceNat: 'On',
StaticNat: 'On'
}
});
}, 500);
}
},
instances: {
title: 'Instances',
listView: {
label: 'Virtual Appliances',
fields: {
name: { label: 'Name' },
hostname: { label: 'Hostname' },
publicip: { label: 'Public IP' },
publicmacaddress: { label: 'Public MAC' },
state: { label: 'Status', indicator: { 'Running': 'on', 'Stopped': 'off' } }
},
dataProvider: testData.dataProvider.listView('virtualAppliances')
}
}
}
},
// NetScaler list view
netscaler: {
type: 'detailView',
id: 'netscaler-providers',
label: 'NetScaler',
viewAll: { label: 'NetScaler Providers', path: '_zone.netscalerProviders' },
actions: {
add: {
label: 'Add new NetScaler',
createForm: {
title: 'Add NetScaler Device',
desc: 'Please enter your NetScaler device\'s information to add it to your network.',
fields: {
name: {
label: 'Name',
validation: { required: true },
defaultValue: 'New_NetScaler'
},
ipaddress: {
label: 'IP Address',
validation: { required: true }
},
supportedServices: {
label: 'Supported Services',
isBoolean: true,
multiArray: {
serviceA: { label: 'Service A' },
serviceB: { label: 'Service B' },
serviceC: { label: 'Service C' }
}
},
username: {
label: 'Username',
validation: { required: true }
},
password: {
label: 'Password',
isPassword: true,
validation: { required: true }
},
type: {
label: 'NetScaler Model',
select: function(args) {
args.response.success({
data: [
{
id: 'mpx',
description: 'NetScaler MPX'
},
{
id: 'adc',
description: 'NetScaler ADC'
}
]
});
}
},
enabled: {
label: 'Enable',
isBoolean: true
}
}
},
action: function(args) {
args.response.success();
},
messages: {
notification: function(args) {
return 'Added new NetScaler';
}
},
notification: {
poll: testData.notifications.testPoll
}
},
disable: {
label: 'Disable',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Disabled NetScaler provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
enable: {
label: 'Enable',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Enable NetScaler provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
stop: {
label: 'Shutdown',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Shutdown NetScaler provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
start: {
label: 'Start',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Started NetScaler provider'; }
},
notification: { poll: testData.notifications.testPoll }
}
},
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'Name' }
},
{
state: { label: 'Status' }
}
],
dataProvider: function(args) {
setTimeout(function() {
args.response.success({
data: {
name: 'NetScaler Provider',
state: 'Enabled'
}
});
}, 500);
}
}
}
},
// F5 list view
f5: {
type: 'detailView',
id: 'f5-providers',
label: 'F5',
viewAll: { label: 'F5 Providers', path: '_zone.f5Providers' },
actions: {
disable: {
label: 'Disable',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Disabled F5 provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
enable: {
label: 'Enable',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Enable F5 provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
stop: {
label: 'Shutdown',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Shutdown F5 provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
start: {
label: 'Start',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Started F5 provider'; }
},
notification: { poll: testData.notifications.testPoll }
}
},
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'Name' }
},
{
state: { label: 'Status' }
}
],
dataProvider: function(args) {
setTimeout(function() {
args.response.success({
data: {
name: 'F5 Provider',
state: 'Enabled'
}
});
}, 500);
}
}
}
},
// SRX list view
srx: {
type: 'detailView',
id: 'srx-providers',
label: 'SRX',
viewAll: { label: 'SRX Providers', path: '_zone.srxProviders' },
actions: {
disable: {
label: 'Disable',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Disabled SRX provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
enable: {
label: 'Enable',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Enable SRX provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
stop: {
label: 'Shutdown',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Shutdown SRX provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
start: {
label: 'Start',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Started SRX provider'; }
},
notification: { poll: testData.notifications.testPoll }
}
},
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'Name' }
},
{
state: { label: 'Status' }
}
],
dataProvider: function(args) {
setTimeout(function() {
args.response.success({
data: {
name: 'SRX Provider',
state: 'Enabled'
}
});
}, 500);
}
}
}
},
// Security groups list view
securityGroups: {
type: 'detailView',
id: 'securityGroups-providers',
label: 'Security Groups',
viewAll: { label: 'Security Groups', path: 'network.securityGroups' },
actions: {
disable: {
label: 'Disable',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Disabled Security Groups provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
enable: {
label: 'Enable',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Enable Security Groups provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
stop: {
label: 'Shutdown',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Shutdown Security Groups provider'; }
},
notification: { poll: testData.notifications.testPoll }
},
start: {
label: 'Start',
action: function(args) {
setTimeout(args.response.success, 100);
},
messages: {
notification: function() { return 'Started Security Groups provider'; }
},
notification: { poll: testData.notifications.testPoll }
}
},
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'Name' }
},
{
state: { label: 'Status' }
}
],
dataProvider: function(args) {
setTimeout(function() {
args.response.success({
data: {
name: 'SRX Provider',
state: 'Enabled'
}
});
}, 500);
}
}
}
}
}
}
},
show: cloudStack.uiCustom.physicalResources({
sections: {
physicalResources: {
type: 'select',
title: 'Physical Resources',
listView: {
id: 'physicalResources',
label: 'Physical Resources',
fields: {
name: { label: 'Zone' },
dns1: { label: 'DNS' },
internaldns1: { label: 'Internal DNS' },
networktype: { label: 'Network Type' },
allocationstate: { label: 'State' }
},
dataProvider: testData.dataProvider.listView('zones'),
actions: {
add: {
label: 'Add zone',
action: {
custom: cloudStack.uiCustom.zoneWizard(
cloudStack.zoneWizard
)
},
messages: {
confirm: function(args) {
return 'Are you sure you want to add a zone?';
},
notification: function(args) {
return 'Created new zone';
}
},
notification: {
poll: testData.notifications.customPoll(testData.data.zones[0])
}
}
},
detailView: {
isMaximized: true,
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'Zone', isEditable: true }
},
{
id: { label: 'ID' },
allocationstate: { label: 'Allocation State' },
dns1: { label: 'DNS 1', isEditable: true },
dns2: { label: 'DNS 2', isEditable: true },
internaldns1: { label: 'Internal DNS 1', isEditable: true },
internaldns2: { label: 'Internal DNS 2', isEditable: true },
networktype: { label: 'Network Type' },
securitygroupsenabled: {
label: 'Security Groups Enabled'
},
domain: {
label: 'Network domain',
isEditable: true
}
}
],
dataProvider: testData.dataProvider.detailView('zones')
},
compute: {
title: 'Compute',
custom: cloudStack.uiCustom.systemChart('compute')
},
network: {
title: 'Network',
custom: cloudStack.uiCustom.systemChart('network')
},
resources: {
title: 'Resources',
custom: cloudStack.uiCustom.systemChart('resources')
},
systemVMs: {
title: 'System VMs',
listView: {
label: 'System VMs',
id: 'systemVMs',
hideToolbar: true,
fields: {
name: { label: 'Name' },
systemvmtype: {
label: 'Type',
converter: function(args) {
if(args == "consoleproxy")
return "Console Proxy VM";
else if(args == "secondarystoragevm")
return "Secondary Storage VM";
}
},
zonename: { label: 'Zone' },
state: {
label: 'Status',
indicator: {
'Running': 'on',
'Stopped': 'off',
'Error': 'off'
}
}
},
dataProvider: testData.dataProvider.listView('instances'),
detailView: {
name: 'System VM details',
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'Name' }
},
{
id: { label: 'ID' },
state: { label: 'State' },
systemvmtype: {
label: 'Type'
},
zonename: { label: 'Zone' },
publicip: { label: 'Public IP' },
privateip: { label: 'Private IP' },
linklocalip: { label: 'Link local IP' },
hostname: { label: 'Host' },
gateway: { label: 'Gateway' },
created: { label: 'Created' },
activeviewersessions: { label: 'Active sessions' }
}
],
dataProvider: testData.dataProvider.detailView('instances')
}
}
}
}
}
}
}
}
},
virtualAppliances: {
type: 'select',
title: 'Virtual Appliances',
id: 'virtualAppliances',
listView: {
label: 'Virtual Appliances',
fields: {
name: { label: 'Name' },
hostname: { label: 'Hostname' },
publicip: { label: 'Public IP' },
publicmacaddress: { label: 'Public MAC' },
state: { label: 'Status' }
},
dataProvider: testData.dataProvider.listView('virtualAppliances')
}
},
systemVMs: {
type: 'select',
title: 'System VMs',
listView: {
label: 'System VMs',
fields: {
name: { label: 'Name' },
zonename: { label: 'Zone' },
hostname: { label: 'Hostname' },
privateip: { label: 'Private IP' },
publicip: { label: 'Public IP' },
state: { label: 'Status' }
},
dataProvider: testData.dataProvider.listView('systemVMs')
}
}
}
}),
subsections: {
// Provider list views
netscalerProviders: {
id: 'netscalerProviders',
title: 'NetScaler Providers',
listView: {
label: 'NetScaler Providers',
fields: {
name: { label: 'Name' },
ipAddress: { label: 'IP Address' },
gateway: { label: 'Gateway' },
netmask: { label: 'Netmask' }
},
actions: {
add: {
label: 'Add new NetScaler',
createForm: {
title: 'Add NetScaler Device',
desc: 'Please enter your NetScaler device\'s information to add it to your network.',
fields: {
name: {
label: 'Name',
validation: { required: true },
defaultValue: 'New_NetScaler'
},
ipaddress: {
label: 'IP Address',
validation: { required: true }
},
supportedServices: {
label: 'Supported Services',
isBoolean: true,
multiArray: {
serviceA: { label: 'Service A' },
serviceB: { label: 'Service B' },
serviceC: { label: 'Service C' }
}
},
username: {
label: 'Username',
validation: { required: true }
},
password: {
label: 'Password',
isPassword: true,
validation: { required: true }
},
type: {
label: 'NetScaler Model',
select: function(args) {
args.response.success({
data: [
{
id: 'mpx',
description: 'NetScaler MPX'
},
{
id: 'adc',
description: 'NetScaler ADC'
}
]
});
}
},
enabled: {
label: 'Enable',
isBoolean: true
}
}
},
action: function(args) {
args.response.success();
},
messages: {
notification: function(args) {
return 'Added new NetScaler';
}
},
notification: {
poll: testData.notifications.testPoll
}
}
},
dataProvider: function(args) {
args.response.success({
data: [
{
name: 'ns-1',
ipAddress: '192.168.1.10',
gateway: '192.168.1.1',
netmask: '255.255.255.0'
},
{
name: 'ns-2',
ipAddress: '192.168.1.11',
gateway: '192.168.1.1',
netmask: '255.255.255.0'
}
]
});
}
}
},
f5Providers: {
id: 'f5Provider',
title: 'F5 Providers',
listView: {
label: 'F5 Providers',
fields: {
name: { label: 'Name' },
ipAddress: { label: 'IP Address' },
gateway: { label: 'Gateway' },
netmask: { label: 'Netmask' }
},
dataProvider: function(args) {
args.response.success({
data: [
{
name: 'f5-1',
ipAddress: '192.168.1.10',
gateway: '192.168.1.1',
netmask: '255.255.255.0'
},
{
name: 'f5-2',
ipAddress: '192.168.1.11',
gateway: '192.168.1.1',
netmask: '255.255.255.0'
}
]
});
}
}
},
srxProviders: {
id: 'srxProviders',
title: 'SRX Providers',
listView: {
label: 'SRX Providers',
fields: {
name: { label: 'Name' },
ipAddress: { label: 'IP Address' },
gateway: { label: 'Gateway' },
netmask: { label: 'Netmask' }
},
dataProvider: function(args) {
args.response.success({
data: [
{
name: 'srx-1',
ipAddress: '192.168.1.10',
gateway: '192.168.1.1',
netmask: '255.255.255.0'
},
{
name: 'srx-2',
ipAddress: '192.168.1.11',
gateway: '192.168.1.1',
netmask: '255.255.255.0'
}
]
});
}
}
},
systemVMs: {
type: 'select',
title: 'System VMs',
listView: {
label: 'System VMs',
fields: {
name: { label: 'Name' },
zonename: { label: 'Zone' },
hostname: { label: 'Hostname' },
privateip: { label: 'Private IP' },
publicip: { label: 'Public IP' },
state: { label: 'Status' }
},
dataProvider: testData.dataProvider.listView('systemVMs')
}
},
networks: {
sectionSelect: { label: 'Network type' },
sections: {
publicNetwork: {
type: 'select',
title: 'Public network',
listView: {
section: 'networks',
id: 'networks',
fields: {
name: { label: 'Name' },
startip: { label: 'Start IP' },
endip: { label: 'End IP' },
type: { label: 'Type' }
},
dataProvider: testData.dataProvider.listView('networks'),
detailView: {
viewAll: { label: 'Hosts', path: 'instances' },
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'name' },
displaytext: { label: 'displaytext' }
},
{
broadcastdomaintype: { label: 'broadcastdomaintype' },
traffictype: { label: 'traffictype' },
gateway: { label: 'gateway' },
netmask: { label: 'netmask' },
startip: { label: 'startip' },
endip: { label: 'endip' },
zoneid: { label: 'zoneid' },
networkofferingid: { label: 'networkofferingid' },
networkofferingname: { label: 'networkofferingname' },
networkofferingdisplaytext: { label: 'networkofferingdisplaytext' },
networkofferingavailability: { label: 'networkofferingavailability' },
isshared: { label: 'isshared' },
issystem: { label: 'issystem' },
state: { label: 'state' },
related: { label: 'related' },
broadcasturi: { label: 'broadcasturi' },
dns1: { label: 'dns1' },
type: { label: 'type' }
}
],
dataProvider: testData.dataProvider.detailView('networks')
}
}
}
}
},
directNetwork: {
title: 'Direct network',
type: 'select',
listView: {
section: 'networks',
id: 'networks',
fields: {
name: { label: 'Name' },
startip: { label: 'Start IP' },
endip: { label: 'End IP' },
type: { label: 'Type' }
},
dataProvider: testData.dataProvider.listView('networks'),
detailView: {
viewAll: { label: 'Hosts', path: 'instances' },
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'name' },
displaytext: { label: 'displaytext' }
},
{
broadcastdomaintype: { label: 'broadcastdomaintype' },
traffictype: { label: 'traffictype' },
gateway: { label: 'gateway' },
netmask: { label: 'netmask' },
startip: { label: 'startip' },
endip: { label: 'endip' },
zoneid: { label: 'zoneid' },
networkofferingid: { label: 'networkofferingid' },
networkofferingname: { label: 'networkofferingname' },
networkofferingdisplaytext: { label: 'networkofferingdisplaytext' },
networkofferingavailability: { label: 'networkofferingavailability' },
isshared: { label: 'isshared' },
issystem: { label: 'issystem' },
state: { label: 'state' },
related: { label: 'related' },
broadcasturi: { label: 'broadcasturi' },
dns1: { label: 'dns1' },
type: { label: 'type' }
}
],
dataProvider: testData.dataProvider.detailView('networks')
}
}
}
}
}
}
},
pods: {
title: 'Pod',
listView: {
id: 'pods',
section: 'pods',
fields: {
name: { label: 'Name' },
startip: { label: 'Start IP' },
endip: { label: 'End IP' },
allocationstate: { label: 'Status' }
},
dataProvider: testData.dataProvider.listView('pods'),
actions: {
destroy: testData.actions.destroy('pod')
},
detailView: {
viewAll: { path: '_zone.clusters', label: 'Clusters' },
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'Name' }
},
{
allocationstate: { label: 'State' },
startip: { label: 'Start IP' },
endip: { label: 'End IP' }
}
],
dataProvider: testData.dataProvider.detailView('pods')
}
}
},
actions: {
add: {
label: 'Add pod',
createForm: {
title: 'Add new pod',
desc: 'Please fill in the following information to add a new pod',
preFilter: function(args) {
var $guestFields = args.$form.find('.form-item[rel=guestGateway], .form-item[rel=guestNetmask], .form-item[rel=startGuestIp], .form-item[rel=endGuestIp]');
if (args.context.zones[0].networktype == "Basic") {
$guestFields.css('display', 'inline-block');
}
else if (args.context.zones[0].networktype == "Advanced") { //advanced-mode network (zone-wide VLAN)
$guestFields.hide();
}
},
fields: {
name: {
label: 'Name',
validation: { required: true }
},
gateway: {
label: 'Gateway',
validation: { required: true }
},
netmask: {
label: 'Netmask',
validation: { required: true }
},
startip: {
label: 'Start IP',
validation: { required: true }
},
endip: {
label: 'End IP',
validation: { required: false }
},
//only basic zones show guest fields (begin)
guestGateway: {
label: 'Guest Gateway',
validation: { required: true },
isHidden: true
},
guestNetmask: {
label: 'Guest Netmask',
validation: { required: true },
isHidden: true
},
startGuestIp: {
label: 'Start Guest IP',
validation: { required: true },
isHidden: true
},
endGuestIp: {
label: 'End Guest IP',
validation: { required: false },
isHidden: true
}
//only basic zones show guest fields (end)
}
},
action: function(args) {
args.response.success();
},
notification: {
poll: testData.notifications.testPoll
},
messages: {
notification: function(args) {
return 'Added new pod';
}
}
}
}
}
},
clusters: {
title: 'Cluster',
listView: {
id: 'clusters',
section: 'clusters',
fields: {
name: { label: 'Name' },
zonename: { label: 'Zone' },
podname: { label: 'Pod' }
},
dataProvider: testData.dataProvider.listView('clusters'),
actions: {
add: {
label: 'Add cluster',
messages: {
confirm: function(args) {
return 'Are you sure you want to add a cluster?';
},
success: function(args) {
return 'Your new cluster is being created.';
},
notification: function(args) {
return 'Creating new cluster';
},
complete: function(args) {
return 'Cluster has been created successfully!';
}
},
createForm: {
title: 'Add cluster',
desc: 'Please fill in the following data to add a new cluster.',
fields: {
hypervisor: {
label: 'Hypervisor',
select: function(args) {
args.response.success({ data: testData.data.hypervisors });
args.$select.bind("change", function(event) {
var $form = $(this).closest('form');
if ($(this).val() == "VMware") {
//$('li[input_sub_group="external"]', $dialogAddCluster).show();
$form.find('.form-item[rel=vCenterHost]').css('display', 'inline-block');
$form.find('.form-item[rel=vCenterUsername]').css('display', 'inline-block');
$form.find('.form-item[rel=vCenterPassword]').css('display', 'inline-block');
$form.find('.form-item[rel=vCenterDatacenter]').css('display', 'inline-block');
//$("#cluster_name_label", $dialogAddCluster).text("vCenter Cluster:");
}
else {
//$('li[input_group="vmware"]', $dialogAddCluster).hide();
$form.find('.form-item[rel=vCenterHost]').css('display', 'none');
$form.find('.form-item[rel=vCenterUsername]').css('display', 'none');
$form.find('.form-item[rel=vCenterPassword]').css('display', 'none');
$form.find('.form-item[rel=vCenterDatacenter]').css('display', 'none');
//$("#cluster_name_label", $dialogAddCluster).text("Cluster:");
}
});
}
},
podId: {
label: 'Pod',
select: function(args) {
args.response.success({ descriptionField: 'name', data: testData.data.pods });
}
},
name: {
label: 'Cluster Name',
validation: { required: true }
},
//hypervisor==VMWare begins here
vCenterHost: {
label: 'vCenter Host',
validation: { required: true }
},
vCenterUsername: {
label: 'vCenter Username',
validation: { required: true }
},
vCenterPassword: {
label: 'vCenter Password',
validation: { required: true },
isPassword: true
},
vCenterDatacenter: {
label: 'vCenter Datacenter',
validation: { required: true }
}
//hypervisor==VMWare ends here
}
},
action: function(args) {
args.response.success();
},
notification: {
poll: testData.notifications.testPoll
}
},
destroy: testData.actions.destroy('cluster')
},
detailView: {
viewAll: { path: '_zone.hosts', label: 'Hosts' },
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'Name' }
},
{
allocationstate: { label: 'State' },
podname: { label: 'Pod' },
hypervisortype: { label: 'Hypervisor' },
clustertype: { label: 'Cluster' }
}
],
dataProvider: testData.dataProvider.detailView('clusters')
}
}
}
}
},
hosts: {
title: 'Host',
id: 'hosts',
listView: {
section: 'hosts',
fields: {
name: { label: 'Name' },
zonename: { label: 'Zone' },
podname: { label: 'Pod' }
},
dataProvider: testData.dataProvider.listView('hosts'),
actions: {
add: {
label: 'Add host',
createForm: {
title: 'Add new host',
desc: 'Please fill in the following information to add a new host fro the specified zone configuration.',
preFilter: function(args) {
var $form = args.$form;
var $guestFields = $form.find('.form-item[rel=guestGateway], '
+ '.form-item[rel=guestNetmask], '
+ '.form-item[rel=guestIPRange]');
if (args.context.zones[0].name == 'Chicago') {
$guestFields.css('display', 'inline-block');
}
},
fields: {
pod: {
label: 'Pod',
select: function(args) {
/**
* Example to show/hide fields
*
* -Select Pod2 to show conditional fields
* -Select any other field to hide conditional fields
*/
args.$select.change(function() {
var $input = $(this);
var $form = $input.closest('form');
// Note: need to actually select the .form-item div containing the input
var $condTestA = $form.find('.form-item[rel=condTestA]');
var $condTestB = $form.find('.form-item[rel=condTestB]');
$condTestA.hide();
$condTestB.hide();
if ($input.val() == 2) {
// Note: need to show by setting display=inline-block, not .show()
$condTestA.css('display', 'inline-block');
$condTestB.css('display', 'inline-block');
}
});
setTimeout(function() {
args.response.success({
descriptionField: 'name',
data: testData.data.pods
});
}, 100);
}
},
cluster: {
label: 'Cluster',
dependsOn: 'pod',
select: function(args) {
setTimeout(function() {
args.response.success({
descriptionField: 'name',
data: testData.data.clusters
});
}, 20);
}
},
hostname: {
label: 'Host name',
validation: { required: true }
},
username: {
label: 'User name',
validation: { required: true }
},
password: {
label: 'Password',
isPassword: true,
validation: { required: true }
},
/**
* Test for conditional fields
* note that these are hidden by default
*/
condTestA: {
// Hidden by default
hidden: true,
label: 'Conditional A',
validation: { required: true }
},
condTestB: {
// Hidden by default
hidden: true,
label: 'Conditional B',
validation: { required: true }
},
guestGateway: {
hidden: true,
label: 'Guest Gateway',
validation: { required: true }
},
guestNetmask: {
hidden: true,
label: 'Guest Netmask',
validation: { required: true }
},
guestIPRange: {
hidden: true,
label: 'Guest IP Range',
validation: { required: true }
}
}
},
action: function(args) {
args.response.success();
},
notification: {
poll: testData.notifications.customPoll(testData.data.hosts[0])
},
messages: {
notification: function(args) {
return 'Added new host';
}
}
},
destroy: testData.actions.destroy('host')
},
detailView: {
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'Name' }
},
{
type: { label: 'Type' },
zonename: { label: 'Zone' }
}
],
dataProvider: testData.dataProvider.detailView('hosts')
}
}
}
}
},
'primary-storage': {
title: 'Primary Storage',
id: 'primaryStorage',
listView: {
section: 'primary-storage',
fields: {
name: { label: 'Name' },
zonename: { label: 'Zone' },
podname: { label: 'Pod' }
},
dataProvider: testData.dataProvider.listView('clusters'),
actions: {
add: {
label: 'Add primary storage',
createForm: {
title: 'Add new primary storage',
desc: 'Please fill in the following information to add a new primary storage',
fields: {
//always appear (begin)
podId: {
label: 'Pod',
validation: { required: true },
select: function(args) {
args.response.success({
descriptionField: 'name',
data: testData.data.pods
});
}
},
clusterId: {
label: 'Cluster',
validation: { required: true },
dependsOn: 'podId',
select: function(args) {
args.response.success({
descriptionField: 'name',
data: testData.data.clusters
});
}
},
name: {
label: 'Name',
validation: { required: true }
},
protocol: {
label: 'Protocol',
select: function(args) {
args.response.success({
data: [
{
id: 'nfs',
description: 'NFS'
},
{
id: 'iscsi',
description: 'iSCSI'
}
]
});
}
},
//always appear (end)
server: {
label: 'Server',
validation: { required: true },
isHidden: true
},
//nfs
path: {
label: 'Path',
validation: { required: true },
isHidden: true
},
//iscsi
iqn: {
label: 'Target IQN',
validation: { required: true },
isHidden: true
},
lun: {
label: 'LUN #',
validation: { required: true },
isHidden: true
},
//vmfs
vCenterDataCenter: {
label: 'vCenter Datacenter',
validation: { required: true },
isHidden: true
},
vCenterDataStore: {
label: 'vCenter Datastore',
validation: { required: true },
isHidden: true
},
//always appear (begin)
storageTags: {
label: 'Storage Tags',
validation: { required: false }
}
//always appear (end)
}
},
action: function(args) {
args.response.success();
},
notification: {
poll: function(args) {
args.complete();
}
},
messages: {
notification: function(args) {
return 'Added new primary storage';
}
}
},
destroy: testData.actions.destroy('cluster')
},
detailView: {
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'Name' }
},
{
zonename: { label: 'Zone' },
hostname: { label: 'Host' }
}
],
dataProvider: testData.dataProvider.detailView('clusters')
}
}
}
}
},
'secondary-storage': {
title: 'Secondary Storage',
id: 'secondary-storage',
listView: {
section: 'seconary-storage',
fields: {
name: { label: 'Name' },
zonename: { label: 'Zone' },
podname: { label: 'Pod' }
},
dataProvider: testData.dataProvider.listView('clusters'),
actions: {
add: {
label: 'Add secondary storage',
createForm: {
title: 'Add new secondary storage',
desc: 'Please fill in the following information to add a new secondary storage',
fields: {
nfsServer: {
label: 'NFS Server',
validation: { required: true }
},
path: {
label: 'Path',
validation: { required: true }
}
}
},
action: function(args) {
args.response.success();
},
notification: {
poll: function(args) {
args.complete();
}
},
messages: {
notification: function(args) {
return 'Added new secondary storage';
}
}
},
destroy: testData.actions.destroy('cluster')
},
detailView: {
tabs: {
details: {
title: 'Details',
fields: [
{
name: { label: 'Name' }
},
{
zonename: { label: 'Zone' },
hostname: { label: 'Host' }
}
],
dataProvider: testData.dataProvider.detailView('clusters')
}
}
}
}
}
}
};
})($, cloudStack);