-
diff --git a/ui/scripts/instances.js b/ui/scripts/instances.js
index 20d3d9a606d..f4507027a7c 100644
--- a/ui/scripts/instances.js
+++ b/ui/scripts/instances.js
@@ -458,6 +458,12 @@
},
notification: function(args) {
return 'label.action.reboot.instance';
+ },
+ complete: function(args) {
+ if (args.password != null && args.password.length > 0)
+ return 'Password has been reset to ' + args.password;
+ else
+ return null;
}
},
notification: {
@@ -605,6 +611,12 @@
},
notification: function(args) {
return 'Reset VM';
+ },
+ complete: function(args) {
+ if (args.password != null && args.password.length > 0)
+ return 'Password has been reset to ' + args.password;
+ else
+ return null;
}
},
@@ -613,24 +625,26 @@
url: createURL("restoreVirtualMachine&virtualmachineid=" + args.context.instances[0].id),
dataType: "json",
async: true,
- success: function(json) {
- var item = json.restorevmresponse;
- args.response.success({
- data: item
- });
+ success: function(json) {
+ var jid = json.restorevmresponse.jobid;
+ args.response.success({
+ _custom: {
+ jobId: jid,
+ getUpdatedItem: function(json) {
+ return json.queryasyncjobresultresponse.jobresult.virtualmachine;
+ },
+ getActionFilter: function() {
+ return vmActionfilter;
+ }
+ }
+ });
}
});
},
notification: {
- poll: function(args) {
- args.complete({
- data: {
- state: 'Stopped'
- }
- });
- }
+ poll: pollAsyncJobResult
}
},
@@ -811,10 +825,14 @@
label: 'ISO',
select: function(args) {
var items = [];
- var map = {};
+ var map = {};
$.ajax({
- url: createURL("listIsos&isReady=true&isofilter=featured"),
- dataType: "json",
+ url: createURL("listIsos"),
+ data: {
+ isofilter: 'featured',
+ isReady: true,
+ zoneid: args.context.instances[0].zoneid
+ },
async: false,
success: function(json) {
var isos = json.listisosresponse.iso;
@@ -828,8 +846,12 @@
}
});
$.ajax({
- url: createURL("listIsos&isReady=true&isofilter=community"),
- dataType: "json",
+ url: createURL("listIsos"),
+ data: {
+ isofilter: 'community',
+ isReady: true,
+ zoneid: args.context.instances[0].zoneid
+ },
async: false,
success: function(json) {
var isos = json.listisosresponse.iso;
@@ -845,8 +867,12 @@
}
});
$.ajax({
- url: createURL("listIsos&isReady=true&isofilter=selfexecutable"),
- dataType: "json",
+ url: createURL("listIsos"),
+ data: {
+ isofilter: 'selfexecutable',
+ isReady: true,
+ zoneid: args.context.instances[0].zoneid
+ },
async: false,
success: function(json) {
var isos = json.listisosresponse.iso;
diff --git a/ui/scripts/network.js b/ui/scripts/network.js
index 0afa3608177..421582afab7 100755
--- a/ui/scripts/network.js
+++ b/ui/scripts/network.js
@@ -2054,54 +2054,63 @@
},
dataProvider: function(args) {
- var data = {};
- listViewDataProvider(args, data);
-
- if (g_supportELB == "guest") // IPs are allocated on guest network
- $.extend(data, {
- forvirtualnetwork: false,
- forloadbalancing: true
- });
- else if (g_supportELB == "public") // IPs are allocated on public network
- $.extend(data, {
- forvirtualnetwork: true,
- forloadbalancing: true
- });
-
+ var items = [];
+ var data = {};
+ listViewDataProvider(args, data);
if (args.context.networks) {
$.extend(data, {
associatedNetworkId: args.context.networks[0].id
});
-
}
-
if ("vpc" in args.context) {
$.extend(data, {
vpcid: args.context.vpc[0].id
});
- }
-
+ }
+
$.ajax({
url: createURL('listPublicIpAddresses'),
- data: data,
+ data: $.extend({}, data, {
+ forvirtualnetwork: true, //IPs are allocated on public network
+ }),
dataType: "json",
- async: true,
+ async: false,
success: function(json) {
- var items = json.listpublicipaddressesresponse.publicipaddress;
-
- $(items).each(function() {
- getExtaPropertiesForIpObj(this, args);
- });
-
- args.response.success({
- actionFilter: actionFilters.ipAddress,
- data: items
- });
- },
- error: function(data) {
- args.response.error(parseXMLHttpResponse(data));
+ var ips = json.listpublicipaddressesresponse.publicipaddress;
+ if(ips != null) {
+ for(var i = 0; i < ips.length; i++) {
+ getExtaPropertiesForIpObj(ips[i], args);
+ items.push(ips[i]);
+ }
+ }
}
});
+
+ if (g_supportELB == "guest") {
+ $.ajax({
+ url: createURL('listPublicIpAddresses'),
+ data: $.extend({}, data, {
+ forvirtualnetwork: false, // ELB IPs are allocated on guest network
+ forloadbalancing: true
+ }),
+ dataType: "json",
+ async: false,
+ success: function(json) {
+ var ips = json.listpublicipaddressesresponse.publicipaddress;
+ if(ips != null) {
+ for(var i = 0; i < ips.length; i++) {
+ getExtaPropertiesForIpObj(ips[i], args);
+ items.push(ips[i]);
+ }
+ }
+ }
+ });
+ }
+
+ args.response.success({
+ actionFilter: actionFilters.ipAddress,
+ data: items
+ });
},
// Detail view
@@ -3842,10 +3851,20 @@
virtualmachineid: args.itemData[0].id,
openfirewall: false
};
+
+ if (args.context.ipAddresses[0].isportable) {
+ var subselect = args.itemData[0]._subselect.split(',');
+ //var networkid = subselect[0];
+ var vmguestip = subselect[1];
- if (args.itemData[0]._subselect && args.itemData[0]._subselect != -1) {
+ //data.networkid = networkid;
+
+ if (parseInt(vmguestip) !== -1) {
+ data.vmguestip = vmguestip;
+ }
+ } else if (args.itemData[0]._subselect && args.itemData[0]._subselect != -1) {
data.vmguestip = args.itemData[0]._subselect;
- }
+ }
if ('vpc' in args.context) { //from VPC section
if (args.data.tier == null) {
diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js
index 3d45ad01c6a..fe3f6730295 100644
--- a/ui/scripts/sharedFunctions.js
+++ b/ui/scripts/sharedFunctions.js
@@ -107,7 +107,9 @@ var pollAsyncJobResult = function(args) {
}
},
error: function(XMLHttpResponse) {
- args.error();
+ args.error({
+ message: parseXMLHttpResponse(XMLHttpResponse)
+ });
}
});
}
@@ -233,9 +235,9 @@ var addGuestNetworkDialog = {
label: 'label.physical.network',
dependsOn: 'zoneId',
select: function(args) {
- if ('physicalNetworks' in args.context) {
+ if ('physicalNetworks' in args.context) { //Infrastructure menu > zone detail > guest traffic type > network tab (only shown in advanced zone) > add guest network dialog
addGuestNetworkDialog.physicalNetworkObjs = args.context.physicalNetworks;
- } else {
+ } else { //Network menu > guest network section > add guest network dialog
var selectedZoneId = args.$form.find('.form-item[rel=zoneId]').find('select').val();
$.ajax({
url: createURL('listPhysicalNetworks'),
@@ -243,8 +245,33 @@ var addGuestNetworkDialog = {
zoneid: selectedZoneId
},
async: false,
- success: function(json) {
- addGuestNetworkDialog.physicalNetworkObjs = json.listphysicalnetworksresponse.physicalnetwork;
+ success: function(json) {
+ var items = [];
+ var physicalnetworks = json.listphysicalnetworksresponse.physicalnetwork;
+ if (physicalnetworks != null) {
+ for (var i = 0; i < physicalnetworks.length; i++) {
+ $.ajax({
+ url: createURL('listTrafficTypes'),
+ data: {
+ physicalnetworkid: physicalnetworks[i].id
+ },
+ async: false,
+ success: function(json) {
+ var traffictypes = json.listtraffictypesresponse.traffictype;
+ if (traffictypes != null) {
+ for (var k = 0; k < traffictypes.length; k++) {
+ if (traffictypes[k].traffictype == 'Guest') {
+ items.push(physicalnetworks[i]);
+ break;
+ }
+ }
+ }
+ }
+ });
+ }
+ }
+
+ addGuestNetworkDialog.physicalNetworkObjs = items;
}
});
}
@@ -448,7 +475,14 @@ var addGuestNetworkDialog = {
label: 'label.network.offering',
docID: 'helpGuestNetworkZoneNetworkOffering',
dependsOn: ['zoneId', 'scope'],
- select: function(args) {
+ select: function(args) {
+ if(args.$form.find('.form-item[rel=zoneId]').find('select').val() == null || args.$form.find('.form-item[rel=zoneId]').find('select').val().length == 0) {
+ args.response.success({
+ data: null
+ });
+ return;
+ }
+
var data = {
state: 'Enabled',
zoneid: args.$form.find('.form-item[rel=zoneId]').find('select').val()
@@ -1101,7 +1135,7 @@ function listViewDataProvider(args, data) {
});
}
-//used by infrastruct page and network page
+//used by infrastructure page and network page
var addExtraPropertiesToGuestNetworkObject = function(jsonObj) {
jsonObj.networkdomaintext = jsonObj.networkdomain;
jsonObj.networkofferingidText = jsonObj.networkofferingid;
@@ -1123,6 +1157,13 @@ var addExtraPropertiesToGuestNetworkObject = function(jsonObj) {
}
}
+//used by infrastructure page
+var addExtraPropertiesToUcsBladeObject = function(jsonObj) {
+ var array1 = jsonObj.bladedn.split('/');
+ jsonObj.chassis = array1[1];
+ jsonObj.bladeid = array1[2];
+}
+
//find service object in network object
function ipFindNetworkServiceByName(pName, networkObj) {
@@ -1259,65 +1300,625 @@ var addExtraPropertiesToGuestNetworkObject = function(jsonObj) {
}
var timezoneMap = new Object();
-timezoneMap['Etc/GMT+12'] = '[UTC-12:00] GMT-12:00';
-timezoneMap['Etc/GMT+11'] = '[UTC-11:00] GMT-11:00';
-timezoneMap['Pacific/Samoa'] = '[UTC-11:00] Samoa Standard Time';
-timezoneMap['Pacific/Honolulu'] = '[UTC-10:00] Hawaii Standard Time';
-timezoneMap['US/Alaska'] = '[UTC-09:00] Alaska Standard Time';
-timezoneMap['America/Los_Angeles'] = '[UTC-08:00] Pacific Standard Time';
-timezoneMap['Mexico/BajaNorte'] = '[UTC-08:00] Baja California';
-timezoneMap['US/Arizona'] = '[UTC-07:00] Arizona';
-timezoneMap['US/Mountain'] = '[UTC-07:00] Mountain Standard Time';
-timezoneMap['America/Chihuahua'] = '[UTC-07:00] Chihuahua, La Paz';
-timezoneMap['America/Chicago'] = '[UTC-06:00] Central Standard Time';
-timezoneMap['America/Costa_Rica'] = '[UTC-06:00] Central America';
-timezoneMap['America/Mexico_City'] = '[UTC-06:00] Mexico City, Monterrey';
-timezoneMap['Canada/Saskatchewan'] = '[UTC-06:00] Saskatchewan';
-timezoneMap['America/Bogota'] = '[UTC-05:00] Bogota, Lima';
-timezoneMap['America/New_York'] = '[UTC-05:00] Eastern Standard Time';
-timezoneMap['America/Caracas'] = '[UTC-04:00] Venezuela Time';
-timezoneMap['America/Asuncion'] = '[UTC-04:00] Paraguay Time';
-timezoneMap['America/Cuiaba'] = '[UTC-04:00] Amazon Time';
-timezoneMap['America/Halifax'] = '[UTC-04:00] Atlantic Standard Time';
-timezoneMap['America/La_Paz'] = '[UTC-04:00] Bolivia Time';
-timezoneMap['America/Santiago'] = '[UTC-04:00] Chile Time';
-timezoneMap['America/St_Johns'] = '[UTC-03:30] Newfoundland Standard Time';
-timezoneMap['America/Araguaina'] = '[UTC-03:00] Brasilia Time';
-timezoneMap['America/Argentina/Buenos_Aires'] = '[UTC-03:00] Argentine Time';
-timezoneMap['America/Cayenne'] = '[UTC-03:00] French Guiana Time';
-timezoneMap['America/Godthab'] = '[UTC-03:00] Greenland Time';
-timezoneMap['America/Montevideo'] = '[UTC-03:00] Uruguay Time]';
-timezoneMap['Etc/GMT+2'] = '[UTC-02:00] GMT-02:00';
-timezoneMap['Atlantic/Azores'] = '[UTC-01:00] Azores Time';
-timezoneMap['Atlantic/Cape_Verde'] = '[UTC-01:00] Cape Verde Time';
-timezoneMap['Africa/Casablanca'] = '[UTC] Casablanca';
-timezoneMap['Etc/UTC'] = '[UTC] Coordinated Universal Time';
-timezoneMap['Atlantic/Reykjavik'] = '[UTC] Reykjavik';
-timezoneMap['Europe/London'] = '[UTC] Western European Time';
-timezoneMap['CET'] = '[UTC+01:00] Central European Time';
-timezoneMap['Europe/Bucharest'] = '[UTC+02:00] Eastern European Time';
-timezoneMap['Africa/Johannesburg'] = '[UTC+02:00] South Africa Standard Time';
-timezoneMap['Asia/Beirut'] = '[UTC+02:00] Beirut';
-timezoneMap['Africa/Cairo'] = '[UTC+02:00] Cairo';
-timezoneMap['Asia/Jerusalem'] = '[UTC+02:00] Israel Standard Time';
-timezoneMap['Europe/Minsk'] = '[UTC+02:00] Minsk';
-timezoneMap['Europe/Moscow'] = '[UTC+03:00] Moscow Standard Time';
-timezoneMap['Africa/Nairobi'] = '[UTC+03:00] Eastern African Time';
-timezoneMap['Asia/Karachi'] = '[UTC+05:00] Pakistan Time';
-timezoneMap['Asia/Kolkata'] = '[UTC+05:30] India Standard Time';
-timezoneMap['Asia/Bangkok'] = '[UTC+05:30] Indochina Time';
-timezoneMap['Asia/Shanghai'] = '[UTC+08:00] China Standard Time';
-timezoneMap['Asia/Kuala_Lumpur'] = '[UTC+08:00] Malaysia Time';
-timezoneMap['Australia/Perth'] = '[UTC+08:00] Western Standard Time (Australia)';
-timezoneMap['Asia/Taipei'] = '[UTC+08:00] Taiwan';
-timezoneMap['Asia/Tokyo'] = '[UTC+09:00] Japan Standard Time';
-timezoneMap['Asia/Seoul'] = '[UTC+09:00] Korea Standard Time';
-timezoneMap['Australia/Adelaide'] = '[UTC+09:30] Central Standard Time (South Australia)';
-timezoneMap['Australia/Darwin'] = '[UTC+09:30] Central Standard Time (Northern Territory)';
-timezoneMap['Australia/Brisbane'] = '[UTC+10:00] Eastern Standard Time (Queensland)';
-timezoneMap['Australia/Canberra'] = '[UTC+10:00] Eastern Standard Time (New South Wales)';
-timezoneMap['Pacific/Guam'] = '[UTC+10:00] Chamorro Standard Time';
-timezoneMap['Pacific/Auckland'] = '[UTC+12:00] New Zealand Standard Time';
+timezoneMap["Etc/GMT+12"] = "Etc/GMT+12 [GMT-12:00]";
+timezoneMap["Etc/GMT+11"] = "Etc/GMT+11 [GMT-11:00]";
+timezoneMap["Pacific/Midway"] = "Pacific/Midway [Samoa Standard Time]";
+timezoneMap["Pacific/Niue"] = "Pacific/Niue [Niue Time]";
+timezoneMap["Pacific/Pago_Pago"] = "Pacific/Pago_Pago [Samoa Standard Time]";
+timezoneMap["Pacific/Samoa"] = "Pacific/Samoa [Samoa Standard Time]";
+timezoneMap["US/Samoa"] = "US/Samoa [Samoa Standard Time]";
+timezoneMap["America/Adak"] = "America/Adak [Hawaii-Aleutian Standard Time]";
+timezoneMap["America/Atka"] = "America/Atka [Hawaii-Aleutian Standard Time]";
+timezoneMap["Etc/GMT+10"] = "Etc/GMT+10 [GMT-10:00]";
+timezoneMap["HST"] = "HST [Hawaii Standard Time]";
+timezoneMap["Pacific/Honolulu"] = "Pacific/Honolulu [Hawaii Standard Time]";
+timezoneMap["Pacific/Johnston"] = "Pacific/Johnston [Hawaii Standard Time]";
+timezoneMap["Pacific/Rarotonga"] = "Pacific/Rarotonga [Cook Is. Time]";
+timezoneMap["Pacific/Tahiti"] = "Pacific/Tahiti [Tahiti Time]";
+timezoneMap["SystemV/HST10"] = "SystemV/HST10 [Hawaii Standard Time]";
+timezoneMap["US/Aleutian"] = "US/Aleutian [Hawaii-Aleutian Standard Time]";
+timezoneMap["US/Hawaii"] = "US/Hawaii [Hawaii Standard Time]";
+timezoneMap["Pacific/Marquesas"] = "Pacific/Marquesas [Marquesas Time]";
+timezoneMap["AST"] = "AST [Alaska Standard Time]";
+timezoneMap["America/Anchorage"] = "America/Anchorage [Alaska Standard Time]";
+timezoneMap["America/Juneau"] = "America/Juneau [Alaska Standard Time]";
+timezoneMap["America/Nome"] = "America/Nome [Alaska Standard Time]";
+timezoneMap["America/Sitka"] = "America/Sitka [GMT-09:00]";
+timezoneMap["America/Yakutat"] = "America/Yakutat [Alaska Standard Time]";
+timezoneMap["Etc/GMT+9"] = "Etc/GMT+9 [GMT-09:00]";
+timezoneMap["Pacific/Gambier"] = "Pacific/Gambier [Gambier Time]";
+timezoneMap["SystemV/YST9"] = "SystemV/YST9 [Alaska Standard Time]";
+timezoneMap["SystemV/YST9YDT"] = "SystemV/YST9YDT [Alaska Standard Time]";
+timezoneMap["US/Alaska"] = "US/Alaska [Alaska Standard Time]";
+timezoneMap["America/Dawson"] = "America/Dawson [Pacific Standard Time]";
+timezoneMap["America/Ensenada"] = "America/Ensenada [Pacific Standard Time]";
+timezoneMap["America/Los_Angeles"] = "America/Los_Angeles [Pacific Standard Time]";
+timezoneMap["America/Metlakatla"] = "America/Metlakatla [GMT-08:00]";
+timezoneMap["America/Santa_Isabel"] = "America/Santa_Isabel [Pacific Standard Time]";
+timezoneMap["America/Tijuana"] = "America/Tijuana [Pacific Standard Time]";
+timezoneMap["America/Vancouver"] = "America/Vancouver [Pacific Standard Time]";
+timezoneMap["America/Whitehorse"] = "America/Whitehorse [Pacific Standard Time]";
+timezoneMap["Canada/Pacific"] = "Canada/Pacific [Pacific Standard Time]";
+timezoneMap["Canada/Yukon"] = "Canada/Yukon [Pacific Standard Time]";
+timezoneMap["Etc/GMT+8"] = "Etc/GMT+8 [GMT-08:00]";
+timezoneMap["Mexico/BajaNorte"] = "Mexico/BajaNorte [Pacific Standard Time]";
+timezoneMap["PST"] = "PST [Pacific Standard Time]";
+timezoneMap["PST8PDT"] = "PST8PDT [Pacific Standard Time]";
+timezoneMap["Pacific/Pitcairn"] = "Pacific/Pitcairn [Pitcairn Standard Time]";
+timezoneMap["SystemV/PST8"] = "SystemV/PST8 [Pacific Standard Time]";
+timezoneMap["SystemV/PST8PDT"] = "SystemV/PST8PDT [Pacific Standard Time]";
+timezoneMap["US/Pacific"] = "US/Pacific [Pacific Standard Time]";
+timezoneMap["US/Pacific-New"] = "US/Pacific-New [Pacific Standard Time]";
+timezoneMap["America/Boise"] = "America/Boise [Mountain Standard Time]";
+timezoneMap["America/Cambridge_Bay"] = "America/Cambridge_Bay [Mountain Standard Time]";
+timezoneMap["America/Chihuahua"] = "America/Chihuahua [Mountain Standard Time]";
+timezoneMap["America/Creston"] = "America/Creston [GMT-07:00]";
+timezoneMap["America/Dawson_Creek"] = "America/Dawson_Creek [Mountain Standard Time]";
+timezoneMap["America/Denver"] = "America/Denver [Mountain Standard Time]";
+timezoneMap["America/Edmonton"] = "America/Edmonton [Mountain Standard Time]";
+timezoneMap["America/Hermosillo"] = "America/Hermosillo [Mountain Standard Time]";
+timezoneMap["America/Inuvik"] = "America/Inuvik [Mountain Standard Time]";
+timezoneMap["America/Mazatlan"] = "America/Mazatlan [Mountain Standard Time]";
+timezoneMap["America/Ojinaga"] = "America/Ojinaga [Mountain Standard Time]";
+timezoneMap["America/Phoenix"] = "America/Phoenix [Mountain Standard Time]";
+timezoneMap["America/Shiprock"] = "America/Shiprock [Mountain Standard Time]";
+timezoneMap["America/Yellowknife"] = "America/Yellowknife [Mountain Standard Time]";
+timezoneMap["Canada/Mountain"] = "Canada/Mountain [Mountain Standard Time]";
+timezoneMap["Etc/GMT+7"] = "Etc/GMT+7 [GMT-07:00]";
+timezoneMap["MST"] = "MST [Mountain Standard Time]";
+timezoneMap["MST7MDT"] = "MST7MDT [Mountain Standard Time]";
+timezoneMap["Mexico/BajaSur"] = "Mexico/BajaSur [Mountain Standard Time]";
+timezoneMap["Navajo"] = "Navajo [Mountain Standard Time]";
+timezoneMap["PNT"] = "PNT [Mountain Standard Time]";
+timezoneMap["SystemV/MST7"] = "SystemV/MST7 [Mountain Standard Time]";
+timezoneMap["SystemV/MST7MDT"] = "SystemV/MST7MDT [Mountain Standard Time]";
+timezoneMap["US/Arizona"] = "US/Arizona [Mountain Standard Time]";
+timezoneMap["US/Mountain"] = "US/Mountain [Mountain Standard Time]";
+timezoneMap["America/Bahia_Banderas"] = "America/Bahia_Banderas [GMT-06:00]";
+timezoneMap["America/Belize"] = "America/Belize [Central Standard Time]";
+timezoneMap["America/Cancun"] = "America/Cancun [Central Standard Time]";
+timezoneMap["America/Chicago"] = "America/Chicago [Central Standard Time]";
+timezoneMap["America/Costa_Rica"] = "America/Costa_Rica [Central Standard Time]";
+timezoneMap["America/El_Salvador"] = "America/El_Salvador [Central Standard Time]";
+timezoneMap["America/Guatemala"] = "America/Guatemala [Central Standard Time]";
+timezoneMap["America/Indiana/Knox"] = "America/Indiana/Knox [Central Standard Time]";
+timezoneMap["America/Indiana/Tell_City"] = "America/Indiana/Tell_City [Central Standard Time]";
+timezoneMap["America/Knox_IN"] = "America/Knox_IN [Central Standard Time]";
+timezoneMap["America/Managua"] = "America/Managua [Central Standard Time]";
+timezoneMap["America/Matamoros"] = "America/Matamoros [Central Standard Time]";
+timezoneMap["America/Menominee"] = "America/Menominee [Central Standard Time]";
+timezoneMap["America/Merida"] = "America/Merida [Central Standard Time]";
+timezoneMap["America/Mexico_City"] = "America/Mexico_City [Central Standard Time]";
+timezoneMap["America/Monterrey"] = "America/Monterrey [Central Standard Time]";
+timezoneMap["America/North_Dakota/Beulah"] = "America/North_Dakota/Beulah [GMT-06:00]";
+timezoneMap["America/North_Dakota/Center"] = "America/North_Dakota/Center [Central Standard Time]";
+timezoneMap["America/North_Dakota/New_Salem"] = "America/North_Dakota/New_Salem [Central Standard Time]";
+timezoneMap["America/Rainy_River"] = "America/Rainy_River [Central Standard Time]";
+timezoneMap["America/Rankin_Inlet"] = "America/Rankin_Inlet [Central Standard Time]";
+timezoneMap["America/Regina"] = "America/Regina [Central Standard Time]";
+timezoneMap["America/Resolute"] = "America/Resolute [Eastern Standard Time]";
+timezoneMap["America/Swift_Current"] = "America/Swift_Current [Central Standard Time]";
+timezoneMap["America/Tegucigalpa"] = "America/Tegucigalpa [Central Standard Time]";
+timezoneMap["America/Winnipeg"] = "America/Winnipeg [Central Standard Time]";
+timezoneMap["CST"] = "CST [Central Standard Time]";
+timezoneMap["CST6CDT"] = "CST6CDT [Central Standard Time]";
+timezoneMap["Canada/Central"] = "Canada/Central [Central Standard Time]";
+timezoneMap["Canada/East-Saskatchewan"] = "Canada/East-Saskatchewan [Central Standard Time]";
+timezoneMap["Canada/Saskatchewan"] = "Canada/Saskatchewan [Central Standard Time]";
+timezoneMap["Chile/EasterIsland"] = "Chile/EasterIsland [Easter Is. Time]";
+timezoneMap["Etc/GMT+6"] = "Etc/GMT+6 [GMT-06:00]";
+timezoneMap["Mexico/General"] = "Mexico/General [Central Standard Time]";
+timezoneMap["Pacific/Easter"] = "Pacific/Easter [Easter Is. Time]";
+timezoneMap["Pacific/Galapagos"] = "Pacific/Galapagos [Galapagos Time]";
+timezoneMap["SystemV/CST6"] = "SystemV/CST6 [Central Standard Time]";
+timezoneMap["SystemV/CST6CDT"] = "SystemV/CST6CDT [Central Standard Time]";
+timezoneMap["US/Central"] = "US/Central [Central Standard Time]";
+timezoneMap["US/Indiana-Starke"] = "US/Indiana-Starke [Central Standard Time]";
+timezoneMap["America/Atikokan"] = "America/Atikokan [Eastern Standard Time]";
+timezoneMap["America/Bogota"] = "America/Bogota [Colombia Time]";
+timezoneMap["America/Cayman"] = "America/Cayman [Eastern Standard Time]";
+timezoneMap["America/Coral_Harbour"] = "America/Coral_Harbour [Eastern Standard Time]";
+timezoneMap["America/Detroit"] = "America/Detroit [Eastern Standard Time]";
+timezoneMap["America/Fort_Wayne"] = "America/Fort_Wayne [Eastern Standard Time]";
+timezoneMap["America/Grand_Turk"] = "America/Grand_Turk [Eastern Standard Time]";
+timezoneMap["America/Guayaquil"] = "America/Guayaquil [Ecuador Time]";
+timezoneMap["America/Havana"] = "America/Havana [Cuba Standard Time]";
+timezoneMap["America/Indiana/Indianapolis"] = "America/Indiana/Indianapolis [Eastern Standard Time]";
+timezoneMap["America/Indiana/Marengo"] = "America/Indiana/Marengo [Eastern Standard Time]";
+timezoneMap["America/Indiana/Petersburg"] = "America/Indiana/Petersburg [Eastern Standard Time]";
+timezoneMap["America/Indiana/Vevay"] = "America/Indiana/Vevay [Eastern Standard Time]";
+timezoneMap["America/Indiana/Vincennes"] = "America/Indiana/Vincennes [Eastern Standard Time]";
+timezoneMap["America/Indiana/Winamac"] = "America/Indiana/Winamac [Eastern Standard Time]";
+timezoneMap["America/Indianapolis"] = "America/Indianapolis [Eastern Standard Time]";
+timezoneMap["America/Iqaluit"] = "America/Iqaluit [Eastern Standard Time]";
+timezoneMap["America/Jamaica"] = "America/Jamaica [Eastern Standard Time]";
+timezoneMap["America/Kentucky/Louisville"] = "America/Kentucky/Louisville [Eastern Standard Time]";
+timezoneMap["America/Kentucky/Monticello"] = "America/Kentucky/Monticello [Eastern Standard Time]";
+timezoneMap["America/Lima"] = "America/Lima [Peru Time]";
+timezoneMap["America/Louisville"] = "America/Louisville [Eastern Standard Time]";
+timezoneMap["America/Montreal"] = "America/Montreal [Eastern Standard Time]";
+timezoneMap["America/Nassau"] = "America/Nassau [Eastern Standard Time]";
+timezoneMap["America/New_York"] = "America/New_York [Eastern Standard Time]";
+timezoneMap["America/Nipigon"] = "America/Nipigon [Eastern Standard Time]";
+timezoneMap["America/Panama"] = "America/Panama [Eastern Standard Time]";
+timezoneMap["America/Pangnirtung"] = "America/Pangnirtung [Eastern Standard Time]";
+timezoneMap["America/Port-au-Prince"] = "America/Port-au-Prince [Eastern Standard Time]";
+timezoneMap["America/Thunder_Bay"] = "America/Thunder_Bay [Eastern Standard Time]";
+timezoneMap["America/Toronto"] = "America/Toronto [Eastern Standard Time]";
+timezoneMap["Canada/Eastern"] = "Canada/Eastern [Eastern Standard Time]";
+timezoneMap["Cuba"] = "Cuba [Cuba Standard Time]";
+timezoneMap["EST"] = "EST [Eastern Standard Time]";
+timezoneMap["EST5EDT"] = "EST5EDT [Eastern Standard Time]";
+timezoneMap["Etc/GMT+5"] = "Etc/GMT+5 [GMT-05:00]";
+timezoneMap["IET"] = "IET [Eastern Standard Time]";
+timezoneMap["Jamaica"] = "Jamaica [Eastern Standard Time]";
+timezoneMap["SystemV/EST5"] = "SystemV/EST5 [Eastern Standard Time]";
+timezoneMap["SystemV/EST5EDT"] = "SystemV/EST5EDT [Eastern Standard Time]";
+timezoneMap["US/East-Indiana"] = "US/East-Indiana [Eastern Standard Time]";
+timezoneMap["US/Eastern"] = "US/Eastern [Eastern Standard Time]";
+timezoneMap["US/Michigan"] = "US/Michigan [Eastern Standard Time]";
+timezoneMap["America/Caracas"] = "America/Caracas [Venezuela Time]";
+timezoneMap["America/Anguilla"] = "America/Anguilla [Atlantic Standard Time]";
+timezoneMap["America/Antigua"] = "America/Antigua [Atlantic Standard Time]";
+timezoneMap["America/Argentina/San_Luis"] = "America/Argentina/San_Luis [Western Argentine Time]";
+timezoneMap["America/Aruba"] = "America/Aruba [Atlantic Standard Time]";
+timezoneMap["America/Asuncion"] = "America/Asuncion [Paraguay Time]";
+timezoneMap["America/Barbados"] = "America/Barbados [Atlantic Standard Time]";
+timezoneMap["America/Blanc-Sablon"] = "America/Blanc-Sablon [Atlantic Standard Time]";
+timezoneMap["America/Boa_Vista"] = "America/Boa_Vista [Amazon Time]";
+timezoneMap["America/Campo_Grande"] = "America/Campo_Grande [Amazon Time]";
+timezoneMap["America/Cuiaba"] = "America/Cuiaba [Amazon Time]";
+timezoneMap["America/Curacao"] = "America/Curacao [Atlantic Standard Time]";
+timezoneMap["America/Dominica"] = "America/Dominica [Atlantic Standard Time]";
+timezoneMap["America/Eirunepe"] = "America/Eirunepe [Amazon Time]";
+timezoneMap["America/Glace_Bay"] = "America/Glace_Bay [Atlantic Standard Time]";
+timezoneMap["America/Goose_Bay"] = "America/Goose_Bay [Atlantic Standard Time]";
+timezoneMap["America/Grenada"] = "America/Grenada [Atlantic Standard Time]";
+timezoneMap["America/Guadeloupe"] = "America/Guadeloupe [Atlantic Standard Time]";
+timezoneMap["America/Guyana"] = "America/Guyana [Guyana Time]";
+timezoneMap["America/Halifax"] = "America/Halifax [Atlantic Standard Time]";
+timezoneMap["America/Kralendijk"] = "America/Kralendijk [GMT-04:00]";
+timezoneMap["America/La_Paz"] = "America/La_Paz [Bolivia Time]";
+timezoneMap["America/Lower_Princes"] = "America/Lower_Princes [GMT-04:00]";
+timezoneMap["America/Manaus"] = "America/Manaus [Amazon Time]";
+timezoneMap["America/Marigot"] = "America/Marigot [Atlantic Standard Time]";
+timezoneMap["America/Martinique"] = "America/Martinique [Atlantic Standard Time]";
+timezoneMap["America/Moncton"] = "America/Moncton [Atlantic Standard Time]";
+timezoneMap["America/Montserrat"] = "America/Montserrat [Atlantic Standard Time]";
+timezoneMap["America/Port_of_Spain"] = "America/Port_of_Spain [Atlantic Standard Time]";
+timezoneMap["America/Porto_Acre"] = "America/Porto_Acre [Amazon Time]";
+timezoneMap["America/Porto_Velho"] = "America/Porto_Velho [Amazon Time]";
+timezoneMap["America/Puerto_Rico"] = "America/Puerto_Rico [Atlantic Standard Time]";
+timezoneMap["America/Rio_Branco"] = "America/Rio_Branco [Amazon Time]";
+timezoneMap["America/Santiago"] = "America/Santiago [Chile Time]";
+timezoneMap["America/Santo_Domingo"] = "America/Santo_Domingo [Atlantic Standard Time]";
+timezoneMap["America/St_Barthelemy"] = "America/St_Barthelemy [Atlantic Standard Time]";
+timezoneMap["America/St_Kitts"] = "America/St_Kitts [Atlantic Standard Time]";
+timezoneMap["America/St_Lucia"] = "America/St_Lucia [Atlantic Standard Time]";
+timezoneMap["America/St_Thomas"] = "America/St_Thomas [Atlantic Standard Time]";
+timezoneMap["America/St_Vincent"] = "America/St_Vincent [Atlantic Standard Time]";
+timezoneMap["America/Thule"] = "America/Thule [Atlantic Standard Time]";
+timezoneMap["America/Tortola"] = "America/Tortola [Atlantic Standard Time]";
+timezoneMap["America/Virgin"] = "America/Virgin [Atlantic Standard Time]";
+timezoneMap["Antarctica/Palmer"] = "Antarctica/Palmer [Chile Time]";
+timezoneMap["Atlantic/Bermuda"] = "Atlantic/Bermuda [Atlantic Standard Time]";
+timezoneMap["Brazil/Acre"] = "Brazil/Acre [Amazon Time]";
+timezoneMap["Brazil/West"] = "Brazil/West [Amazon Time]";
+timezoneMap["Canada/Atlantic"] = "Canada/Atlantic [Atlantic Standard Time]";
+timezoneMap["Chile/Continental"] = "Chile/Continental [Chile Time]";
+timezoneMap["Etc/GMT+4"] = "Etc/GMT+4 [GMT-04:00]";
+timezoneMap["PRT"] = "PRT [Atlantic Standard Time]";
+timezoneMap["SystemV/AST4"] = "SystemV/AST4 [Atlantic Standard Time]";
+timezoneMap["SystemV/AST4ADT"] = "SystemV/AST4ADT [Atlantic Standard Time]";
+timezoneMap["America/St_Johns"] = "America/St_Johns [Newfoundland Standard Time]";
+timezoneMap["CNT"] = "CNT [Newfoundland Standard Time]";
+timezoneMap["Canada/Newfoundland"] = "Canada/Newfoundland [Newfoundland Standard Time]";
+timezoneMap["AGT"] = "AGT [Argentine Time]";
+timezoneMap["America/Araguaina"] = "America/Araguaina [Brasilia Time]";
+timezoneMap["America/Argentina/Buenos_Aires"] = "America/Argentina/Buenos_Aires [Argentine Time]";
+timezoneMap["America/Argentina/Catamarca"] = "America/Argentina/Catamarca [Argentine Time]";
+timezoneMap["America/Argentina/ComodRivadavia"] = "America/Argentina/ComodRivadavia [Argentine Time]";
+timezoneMap["America/Argentina/Cordoba"] = "America/Argentina/Cordoba [Argentine Time]";
+timezoneMap["America/Argentina/Jujuy"] = "America/Argentina/Jujuy [Argentine Time]";
+timezoneMap["America/Argentina/La_Rioja"] = "America/Argentina/La_Rioja [Argentine Time]";
+timezoneMap["America/Argentina/Mendoza"] = "America/Argentina/Mendoza [Argentine Time]";
+timezoneMap["America/Argentina/Rio_Gallegos"] = "America/Argentina/Rio_Gallegos [Argentine Time]";
+timezoneMap["America/Argentina/Salta"] = "America/Argentina/Salta [Argentine Time]";
+timezoneMap["America/Argentina/San_Juan"] = "America/Argentina/San_Juan [Argentine Time]";
+timezoneMap["America/Argentina/Tucuman"] = "America/Argentina/Tucuman [Argentine Time]";
+timezoneMap["America/Argentina/Ushuaia"] = "America/Argentina/Ushuaia [Argentine Time]";
+timezoneMap["America/Bahia"] = "America/Bahia [Brasilia Time]";
+timezoneMap["America/Belem"] = "America/Belem [Brasilia Time]";
+timezoneMap["America/Buenos_Aires"] = "America/Buenos_Aires [Argentine Time]";
+timezoneMap["America/Catamarca"] = "America/Catamarca [Argentine Time]";
+timezoneMap["America/Cayenne"] = "America/Cayenne [French Guiana Time]";
+timezoneMap["America/Cordoba"] = "America/Cordoba [Argentine Time]";
+timezoneMap["America/Fortaleza"] = "America/Fortaleza [Brasilia Time]";
+timezoneMap["America/Godthab"] = "America/Godthab [Western Greenland Time]";
+timezoneMap["America/Jujuy"] = "America/Jujuy [Argentine Time]";
+timezoneMap["America/Maceio"] = "America/Maceio [Brasilia Time]";
+timezoneMap["America/Mendoza"] = "America/Mendoza [Argentine Time]";
+timezoneMap["America/Miquelon"] = "America/Miquelon [Pierre & Miquelon Standard Time]";
+timezoneMap["America/Montevideo"] = "America/Montevideo [Uruguay Time]";
+timezoneMap["America/Paramaribo"] = "America/Paramaribo [Suriname Time]";
+timezoneMap["America/Recife"] = "America/Recife [Brasilia Time]";
+timezoneMap["America/Rosario"] = "America/Rosario [Argentine Time]";
+timezoneMap["America/Santarem"] = "America/Santarem [Brasilia Time]";
+timezoneMap["America/Sao_Paulo"] = "America/Sao_Paulo [Brasilia Time]";
+timezoneMap["Antarctica/Rothera"] = "Antarctica/Rothera [Rothera Time]";
+timezoneMap["Atlantic/Stanley"] = "Atlantic/Stanley [Falkland Is. Time]";
+timezoneMap["BET"] = "BET [Brasilia Time]";
+timezoneMap["Brazil/East"] = "Brazil/East [Brasilia Time]";
+timezoneMap["Etc/GMT+3"] = "Etc/GMT+3 [GMT-03:00]";
+timezoneMap["America/Noronha"] = "America/Noronha [Fernando de Noronha Time]";
+timezoneMap["Atlantic/South_Georgia"] = "Atlantic/South_Georgia [South Georgia Standard Time]";
+timezoneMap["Brazil/DeNoronha"] = "Brazil/DeNoronha [Fernando de Noronha Time]";
+timezoneMap["Etc/GMT+2"] = "Etc/GMT+2 [GMT-02:00]";
+timezoneMap["America/Scoresbysund"] = "America/Scoresbysund [Eastern Greenland Time]";
+timezoneMap["Atlantic/Azores"] = "Atlantic/Azores [Azores Time]";
+timezoneMap["Atlantic/Cape_Verde"] = "Atlantic/Cape_Verde [Cape Verde Time]";
+timezoneMap["Etc/GMT+1"] = "Etc/GMT+1 [GMT-01:00]";
+timezoneMap["Africa/Abidjan"] = "Africa/Abidjan [Greenwich Mean Time]";
+timezoneMap["Africa/Accra"] = "Africa/Accra [Ghana Mean Time]";
+timezoneMap["Africa/Bamako"] = "Africa/Bamako [Greenwich Mean Time]";
+timezoneMap["Africa/Banjul"] = "Africa/Banjul [Greenwich Mean Time]";
+timezoneMap["Africa/Bissau"] = "Africa/Bissau [Greenwich Mean Time]";
+timezoneMap["Africa/Casablanca"] = "Africa/Casablanca [Western European Time]";
+timezoneMap["Africa/Conakry"] = "Africa/Conakry [Greenwich Mean Time]";
+timezoneMap["Africa/Dakar"] = "Africa/Dakar [Greenwich Mean Time]";
+timezoneMap["Africa/El_Aaiun"] = "Africa/El_Aaiun [Western European Time]";
+timezoneMap["Africa/Freetown"] = "Africa/Freetown [Greenwich Mean Time]";
+timezoneMap["Africa/Lome"] = "Africa/Lome [Greenwich Mean Time]";
+timezoneMap["Africa/Monrovia"] = "Africa/Monrovia [Greenwich Mean Time]";
+timezoneMap["Africa/Nouakchott"] = "Africa/Nouakchott [Greenwich Mean Time]";
+timezoneMap["Africa/Ouagadougou"] = "Africa/Ouagadougou [Greenwich Mean Time]";
+timezoneMap["Africa/Sao_Tome"] = "Africa/Sao_Tome [Greenwich Mean Time]";
+timezoneMap["Africa/Timbuktu"] = "Africa/Timbuktu [Greenwich Mean Time]";
+timezoneMap["America/Danmarkshavn"] = "America/Danmarkshavn [Greenwich Mean Time]";
+timezoneMap["Atlantic/Canary"] = "Atlantic/Canary [Western European Time]";
+timezoneMap["Atlantic/Faeroe"] = "Atlantic/Faeroe [Western European Time]";
+timezoneMap["Atlantic/Faroe"] = "Atlantic/Faroe [Western European Time]";
+timezoneMap["Atlantic/Madeira"] = "Atlantic/Madeira [Western European Time]";
+timezoneMap["Atlantic/Reykjavik"] = "Atlantic/Reykjavik [Greenwich Mean Time]";
+timezoneMap["Atlantic/St_Helena"] = "Atlantic/St_Helena [Greenwich Mean Time]";
+timezoneMap["Eire"] = "Eire [Greenwich Mean Time]";
+timezoneMap["Etc/GMT"] = "Etc/GMT [GMT+00:00]";
+timezoneMap["Etc/GMT+0"] = "Etc/GMT+0 [GMT+00:00]";
+timezoneMap["Etc/GMT-0"] = "Etc/GMT-0 [GMT+00:00]";
+timezoneMap["Etc/GMT0"] = "Etc/GMT0 [GMT+00:00]";
+timezoneMap["Etc/Greenwich"] = "Etc/Greenwich [Greenwich Mean Time]";
+timezoneMap["Etc/UCT"] = "Etc/UCT [Coordinated Universal Time]";
+timezoneMap["Etc/UTC"] = "Etc/UTC [Coordinated Universal Time]";
+timezoneMap["Etc/Universal"] = "Etc/Universal [Coordinated Universal Time]";
+timezoneMap["Etc/Zulu"] = "Etc/Zulu [Coordinated Universal Time]";
+timezoneMap["Europe/Belfast"] = "Europe/Belfast [Greenwich Mean Time]";
+timezoneMap["Europe/Dublin"] = "Europe/Dublin [Greenwich Mean Time]";
+timezoneMap["Europe/Guernsey"] = "Europe/Guernsey [Greenwich Mean Time]";
+timezoneMap["Europe/Isle_of_Man"] = "Europe/Isle_of_Man [Greenwich Mean Time]";
+timezoneMap["Europe/Jersey"] = "Europe/Jersey [Greenwich Mean Time]";
+timezoneMap["Europe/Lisbon"] = "Europe/Lisbon [Western European Time]";
+timezoneMap["Europe/London"] = "Europe/London [Greenwich Mean Time]";
+timezoneMap["GB"] = "GB [Greenwich Mean Time]";
+timezoneMap["GB-Eire"] = "GB-Eire [Greenwich Mean Time]";
+timezoneMap["GMT"] = "GMT [Greenwich Mean Time]";
+timezoneMap["GMT0"] = "GMT0 [GMT+00:00]";
+timezoneMap["Greenwich"] = "Greenwich [Greenwich Mean Time]";
+timezoneMap["Iceland"] = "Iceland [Greenwich Mean Time]";
+timezoneMap["Portugal"] = "Portugal [Western European Time]";
+timezoneMap["UCT"] = "UCT [Coordinated Universal Time]";
+timezoneMap["UTC"] = "UTC [Coordinated Universal Time]";
+timezoneMap["Universal"] = "Universal [Coordinated Universal Time]";
+timezoneMap["WET"] = "WET [Western European Time]";
+timezoneMap["Zulu"] = "Zulu [Coordinated Universal Time]";
+timezoneMap["Africa/Algiers"] = "Africa/Algiers [Central European Time]";
+timezoneMap["Africa/Bangui"] = "Africa/Bangui [Western African Time]";
+timezoneMap["Africa/Brazzaville"] = "Africa/Brazzaville [Western African Time]";
+timezoneMap["Africa/Ceuta"] = "Africa/Ceuta [Central European Time]";
+timezoneMap["Africa/Douala"] = "Africa/Douala [Western African Time]";
+timezoneMap["Africa/Kinshasa"] = "Africa/Kinshasa [Western African Time]";
+timezoneMap["Africa/Lagos"] = "Africa/Lagos [Western African Time]";
+timezoneMap["Africa/Libreville"] = "Africa/Libreville [Western African Time]";
+timezoneMap["Africa/Luanda"] = "Africa/Luanda [Western African Time]";
+timezoneMap["Africa/Malabo"] = "Africa/Malabo [Western African Time]";
+timezoneMap["Africa/Ndjamena"] = "Africa/Ndjamena [Western African Time]";
+timezoneMap["Africa/Niamey"] = "Africa/Niamey [Western African Time]";
+timezoneMap["Africa/Porto-Novo"] = "Africa/Porto-Novo [Western African Time]";
+timezoneMap["Africa/Tripoli"] = "Africa/Tripoli [Eastern European Time]";
+timezoneMap["Africa/Tunis"] = "Africa/Tunis [Central European Time]";
+timezoneMap["Africa/Windhoek"] = "Africa/Windhoek [Western African Time]";
+timezoneMap["Arctic/Longyearbyen"] = "Arctic/Longyearbyen [Central European Time]";
+timezoneMap["Atlantic/Jan_Mayen"] = "Atlantic/Jan_Mayen [Central European Time]";
+timezoneMap["CET"] = "CET [Central European Time]";
+timezoneMap["ECT"] = "ECT [Central European Time]";
+timezoneMap["Etc/GMT-1"] = "Etc/GMT-1 [GMT+01:00]";
+timezoneMap["Europe/Amsterdam"] = "Europe/Amsterdam [Central European Time]";
+timezoneMap["Europe/Andorra"] = "Europe/Andorra [Central European Time]";
+timezoneMap["Europe/Belgrade"] = "Europe/Belgrade [Central European Time]";
+timezoneMap["Europe/Berlin"] = "Europe/Berlin [Central European Time]";
+timezoneMap["Europe/Bratislava"] = "Europe/Bratislava [Central European Time]";
+timezoneMap["Europe/Brussels"] = "Europe/Brussels [Central European Time]";
+timezoneMap["Europe/Budapest"] = "Europe/Budapest [Central European Time]";
+timezoneMap["Europe/Busingen"] = "Europe/Busingen [GMT+01:00]";
+timezoneMap["Europe/Copenhagen"] = "Europe/Copenhagen [Central European Time]";
+timezoneMap["Europe/Gibraltar"] = "Europe/Gibraltar [Central European Time]";
+timezoneMap["Europe/Ljubljana"] = "Europe/Ljubljana [Central European Time]";
+timezoneMap["Europe/Luxembourg"] = "Europe/Luxembourg [Central European Time]";
+timezoneMap["Europe/Madrid"] = "Europe/Madrid [Central European Time]";
+timezoneMap["Europe/Malta"] = "Europe/Malta [Central European Time]";
+timezoneMap["Europe/Monaco"] = "Europe/Monaco [Central European Time]";
+timezoneMap["Europe/Oslo"] = "Europe/Oslo [Central European Time]";
+timezoneMap["Europe/Paris"] = "Europe/Paris [Central European Time]";
+timezoneMap["Europe/Podgorica"] = "Europe/Podgorica [Central European Time]";
+timezoneMap["Europe/Prague"] = "Europe/Prague [Central European Time]";
+timezoneMap["Europe/Rome"] = "Europe/Rome [Central European Time]";
+timezoneMap["Europe/San_Marino"] = "Europe/San_Marino [Central European Time]";
+timezoneMap["Europe/Sarajevo"] = "Europe/Sarajevo [Central European Time]";
+timezoneMap["Europe/Skopje"] = "Europe/Skopje [Central European Time]";
+timezoneMap["Europe/Stockholm"] = "Europe/Stockholm [Central European Time]";
+timezoneMap["Europe/Tirane"] = "Europe/Tirane [Central European Time]";
+timezoneMap["Europe/Vaduz"] = "Europe/Vaduz [Central European Time]";
+timezoneMap["Europe/Vatican"] = "Europe/Vatican [Central European Time]";
+timezoneMap["Europe/Vienna"] = "Europe/Vienna [Central European Time]";
+timezoneMap["Europe/Warsaw"] = "Europe/Warsaw [Central European Time]";
+timezoneMap["Europe/Zagreb"] = "Europe/Zagreb [Central European Time]";
+timezoneMap["Europe/Zurich"] = "Europe/Zurich [Central European Time]";
+timezoneMap["Libya"] = "Libya [Eastern European Time]";
+timezoneMap["MET"] = "MET [Middle Europe Time]";
+timezoneMap["ART"] = "ART [Eastern European Time]";
+timezoneMap["Africa/Blantyre"] = "Africa/Blantyre [Central African Time]";
+timezoneMap["Africa/Bujumbura"] = "Africa/Bujumbura [Central African Time]";
+timezoneMap["Africa/Cairo"] = "Africa/Cairo [Eastern European Time]";
+timezoneMap["Africa/Gaborone"] = "Africa/Gaborone [Central African Time]";
+timezoneMap["Africa/Harare"] = "Africa/Harare [Central African Time]";
+timezoneMap["Africa/Johannesburg"] = "Africa/Johannesburg [South Africa Standard Time]";
+timezoneMap["Africa/Kigali"] = "Africa/Kigali [Central African Time]";
+timezoneMap["Africa/Lubumbashi"] = "Africa/Lubumbashi [Central African Time]";
+timezoneMap["Africa/Lusaka"] = "Africa/Lusaka [Central African Time]";
+timezoneMap["Africa/Maputo"] = "Africa/Maputo [Central African Time]";
+timezoneMap["Africa/Maseru"] = "Africa/Maseru [South Africa Standard Time]";
+timezoneMap["Africa/Mbabane"] = "Africa/Mbabane [South Africa Standard Time]";
+timezoneMap["Asia/Amman"] = "Asia/Amman [Eastern European Time]";
+timezoneMap["Asia/Beirut"] = "Asia/Beirut [Eastern European Time]";
+timezoneMap["Asia/Damascus"] = "Asia/Damascus [Eastern European Time]";
+timezoneMap["Asia/Gaza"] = "Asia/Gaza [Eastern European Time]";
+timezoneMap["Asia/Hebron"] = "Asia/Hebron [GMT+02:00]";
+timezoneMap["Asia/Istanbul"] = "Asia/Istanbul [Eastern European Time]";
+timezoneMap["Asia/Jerusalem"] = "Asia/Jerusalem [Israel Standard Time]";
+timezoneMap["Asia/Nicosia"] = "Asia/Nicosia [Eastern European Time]";
+timezoneMap["Asia/Tel_Aviv"] = "Asia/Tel_Aviv [Israel Standard Time]";
+timezoneMap["CAT"] = "CAT [Central African Time]";
+timezoneMap["EET"] = "EET [Eastern European Time]";
+timezoneMap["Egypt"] = "Egypt [Eastern European Time]";
+timezoneMap["Etc/GMT-2"] = "Etc/GMT-2 [GMT+02:00]";
+timezoneMap["Europe/Athens"] = "Europe/Athens [Eastern European Time]";
+timezoneMap["Europe/Bucharest"] = "Europe/Bucharest [Eastern European Time]";
+timezoneMap["Europe/Chisinau"] = "Europe/Chisinau [Eastern European Time]";
+timezoneMap["Europe/Helsinki"] = "Europe/Helsinki [Eastern European Time]";
+timezoneMap["Europe/Istanbul"] = "Europe/Istanbul [Eastern European Time]";
+timezoneMap["Europe/Kiev"] = "Europe/Kiev [Eastern European Time]";
+timezoneMap["Europe/Mariehamn"] = "Europe/Mariehamn [Eastern European Time]";
+timezoneMap["Europe/Nicosia"] = "Europe/Nicosia [Eastern European Time]";
+timezoneMap["Europe/Riga"] = "Europe/Riga [Eastern European Time]";
+timezoneMap["Europe/Simferopol"] = "Europe/Simferopol [Eastern European Time]";
+timezoneMap["Europe/Sofia"] = "Europe/Sofia [Eastern European Time]";
+timezoneMap["Europe/Tallinn"] = "Europe/Tallinn [Eastern European Time]";
+timezoneMap["Europe/Tiraspol"] = "Europe/Tiraspol [Eastern European Time]";
+timezoneMap["Europe/Uzhgorod"] = "Europe/Uzhgorod [Eastern European Time]";
+timezoneMap["Europe/Vilnius"] = "Europe/Vilnius [Eastern European Time]";
+timezoneMap["Europe/Zaporozhye"] = "Europe/Zaporozhye [Eastern European Time]";
+timezoneMap["Israel"] = "Israel [Israel Standard Time]";
+timezoneMap["Turkey"] = "Turkey [Eastern European Time]";
+timezoneMap["Africa/Addis_Ababa"] = "Africa/Addis_Ababa [Eastern African Time]";
+timezoneMap["Africa/Asmara"] = "Africa/Asmara [Eastern African Time]";
+timezoneMap["Africa/Asmera"] = "Africa/Asmera [Eastern African Time]";
+timezoneMap["Africa/Dar_es_Salaam"] = "Africa/Dar_es_Salaam [Eastern African Time]";
+timezoneMap["Africa/Djibouti"] = "Africa/Djibouti [Eastern African Time]";
+timezoneMap["Africa/Juba"] = "Africa/Juba [GMT+03:00]";
+timezoneMap["Africa/Kampala"] = "Africa/Kampala [Eastern African Time]";
+timezoneMap["Africa/Khartoum"] = "Africa/Khartoum [Eastern African Time]";
+timezoneMap["Africa/Mogadishu"] = "Africa/Mogadishu [Eastern African Time]";
+timezoneMap["Africa/Nairobi"] = "Africa/Nairobi [Eastern African Time]";
+timezoneMap["Antarctica/Syowa"] = "Antarctica/Syowa [Syowa Time]";
+timezoneMap["Asia/Aden"] = "Asia/Aden [Arabia Standard Time]";
+timezoneMap["Asia/Baghdad"] = "Asia/Baghdad [Arabia Standard Time]";
+timezoneMap["Asia/Bahrain"] = "Asia/Bahrain [Arabia Standard Time]";
+timezoneMap["Asia/Kuwait"] = "Asia/Kuwait [Arabia Standard Time]";
+timezoneMap["Asia/Qatar"] = "Asia/Qatar [Arabia Standard Time]";
+timezoneMap["Asia/Riyadh"] = "Asia/Riyadh [Arabia Standard Time]";
+timezoneMap["EAT"] = "EAT [Eastern African Time]";
+timezoneMap["Etc/GMT-3"] = "Etc/GMT-3 [GMT+03:00]";
+timezoneMap["Europe/Kaliningrad"] = "Europe/Kaliningrad [Eastern European Time]";
+timezoneMap["Europe/Minsk"] = "Europe/Minsk [Eastern European Time]";
+timezoneMap["Indian/Antananarivo"] = "Indian/Antananarivo [Eastern African Time]";
+timezoneMap["Indian/Comoro"] = "Indian/Comoro [Eastern African Time]";
+timezoneMap["Indian/Mayotte"] = "Indian/Mayotte [Eastern African Time]";
+timezoneMap["Asia/Riyadh87"] = "Asia/Riyadh87 [GMT+03:07]";
+timezoneMap["Asia/Riyadh88"] = "Asia/Riyadh88 [GMT+03:07]";
+timezoneMap["Asia/Riyadh89"] = "Asia/Riyadh89 [GMT+03:07]";
+timezoneMap["Mideast/Riyadh87"] = "Mideast/Riyadh87 [GMT+03:07]";
+timezoneMap["Mideast/Riyadh88"] = "Mideast/Riyadh88 [GMT+03:07]";
+timezoneMap["Mideast/Riyadh89"] = "Mideast/Riyadh89 [GMT+03:07]";
+timezoneMap["Asia/Tehran"] = "Asia/Tehran [Iran Standard Time]";
+timezoneMap["Iran"] = "Iran [Iran Standard Time]";
+timezoneMap["Asia/Baku"] = "Asia/Baku [Azerbaijan Time]";
+timezoneMap["Asia/Dubai"] = "Asia/Dubai [Gulf Standard Time]";
+timezoneMap["Asia/Muscat"] = "Asia/Muscat [Gulf Standard Time]";
+timezoneMap["Asia/Tbilisi"] = "Asia/Tbilisi [Georgia Time]";
+timezoneMap["Asia/Yerevan"] = "Asia/Yerevan [Armenia Time]";
+timezoneMap["Etc/GMT-4"] = "Etc/GMT-4 [GMT+04:00]";
+timezoneMap["Europe/Moscow"] = "Europe/Moscow [Moscow Standard Time]";
+timezoneMap["Europe/Samara"] = "Europe/Samara [Samara Time]";
+timezoneMap["Europe/Volgograd"] = "Europe/Volgograd [Volgograd Time]";
+timezoneMap["Indian/Mahe"] = "Indian/Mahe [Seychelles Time]";
+timezoneMap["Indian/Mauritius"] = "Indian/Mauritius [Mauritius Time]";
+timezoneMap["Indian/Reunion"] = "Indian/Reunion [Reunion Time]";
+timezoneMap["NET"] = "NET [Armenia Time]";
+timezoneMap["W-SU"] = "W-SU [Moscow Standard Time]";
+timezoneMap["Asia/Kabul"] = "Asia/Kabul [Afghanistan Time]";
+timezoneMap["Antarctica/Mawson"] = "Antarctica/Mawson [Mawson Time]";
+timezoneMap["Asia/Aqtau"] = "Asia/Aqtau [Aqtau Time]";
+timezoneMap["Asia/Aqtobe"] = "Asia/Aqtobe [Aqtobe Time]";
+timezoneMap["Asia/Ashgabat"] = "Asia/Ashgabat [Turkmenistan Time]";
+timezoneMap["Asia/Ashkhabad"] = "Asia/Ashkhabad [Turkmenistan Time]";
+timezoneMap["Asia/Dushanbe"] = "Asia/Dushanbe [Tajikistan Time]";
+timezoneMap["Asia/Karachi"] = "Asia/Karachi [Pakistan Time]";
+timezoneMap["Asia/Oral"] = "Asia/Oral [Oral Time]";
+timezoneMap["Asia/Samarkand"] = "Asia/Samarkand [Uzbekistan Time]";
+timezoneMap["Asia/Tashkent"] = "Asia/Tashkent [Uzbekistan Time]";
+timezoneMap["Etc/GMT-5"] = "Etc/GMT-5 [GMT+05:00]";
+timezoneMap["Indian/Kerguelen"] = "Indian/Kerguelen [French Southern & Antarctic Lands Time]";
+timezoneMap["Indian/Maldives"] = "Indian/Maldives [Maldives Time]";
+timezoneMap["PLT"] = "PLT [Pakistan Time]";
+timezoneMap["Asia/Calcutta"] = "Asia/Calcutta [India Standard Time]";
+timezoneMap["Asia/Colombo"] = "Asia/Colombo [India Standard Time]";
+timezoneMap["Asia/Kolkata"] = "Asia/Kolkata [India Standard Time]";
+timezoneMap["IST"] = "IST [India Standard Time]";
+timezoneMap["Asia/Kathmandu"] = "Asia/Kathmandu [Nepal Time]";
+timezoneMap["Asia/Katmandu"] = "Asia/Katmandu [Nepal Time]";
+timezoneMap["Antarctica/Vostok"] = "Antarctica/Vostok [Vostok Time]";
+timezoneMap["Asia/Almaty"] = "Asia/Almaty [Alma-Ata Time]";
+timezoneMap["Asia/Bishkek"] = "Asia/Bishkek [Kirgizstan Time]";
+timezoneMap["Asia/Dacca"] = "Asia/Dacca [Bangladesh Time]";
+timezoneMap["Asia/Dhaka"] = "Asia/Dhaka [Bangladesh Time]";
+timezoneMap["Asia/Qyzylorda"] = "Asia/Qyzylorda [Qyzylorda Time]";
+timezoneMap["Asia/Thimbu"] = "Asia/Thimbu [Bhutan Time]";
+timezoneMap["Asia/Thimphu"] = "Asia/Thimphu [Bhutan Time]";
+timezoneMap["Asia/Yekaterinburg"] = "Asia/Yekaterinburg [Yekaterinburg Time]";
+timezoneMap["BST"] = "BST [Bangladesh Time]";
+timezoneMap["Etc/GMT-6"] = "Etc/GMT-6 [GMT+06:00]";
+timezoneMap["Indian/Chagos"] = "Indian/Chagos [Indian Ocean Territory Time]";
+timezoneMap["Asia/Rangoon"] = "Asia/Rangoon [Myanmar Time]";
+timezoneMap["Indian/Cocos"] = "Indian/Cocos [Cocos Islands Time]";
+timezoneMap["Antarctica/Davis"] = "Antarctica/Davis [Davis Time]";
+timezoneMap["Asia/Bangkok"] = "Asia/Bangkok [Indochina Time]";
+timezoneMap["Asia/Ho_Chi_Minh"] = "Asia/Ho_Chi_Minh [Indochina Time]";
+timezoneMap["Asia/Hovd"] = "Asia/Hovd [Hovd Time]";
+timezoneMap["Asia/Jakarta"] = "Asia/Jakarta [West Indonesia Time]";
+timezoneMap["Asia/Novokuznetsk"] = "Asia/Novokuznetsk [Novosibirsk Time]";
+timezoneMap["Asia/Novosibirsk"] = "Asia/Novosibirsk [Novosibirsk Time]";
+timezoneMap["Asia/Omsk"] = "Asia/Omsk [Omsk Time]";
+timezoneMap["Asia/Phnom_Penh"] = "Asia/Phnom_Penh [Indochina Time]";
+timezoneMap["Asia/Pontianak"] = "Asia/Pontianak [West Indonesia Time]";
+timezoneMap["Asia/Saigon"] = "Asia/Saigon [Indochina Time]";
+timezoneMap["Asia/Vientiane"] = "Asia/Vientiane [Indochina Time]";
+timezoneMap["Etc/GMT-7"] = "Etc/GMT-7 [GMT+07:00]";
+timezoneMap["Indian/Christmas"] = "Indian/Christmas [Christmas Island Time]";
+timezoneMap["VST"] = "VST [Indochina Time]";
+timezoneMap["Antarctica/Casey"] = "Antarctica/Casey [Western Standard Time (Australia)]";
+timezoneMap["Asia/Brunei"] = "Asia/Brunei [Brunei Time]";
+timezoneMap["Asia/Choibalsan"] = "Asia/Choibalsan [Choibalsan Time]";
+timezoneMap["Asia/Chongqing"] = "Asia/Chongqing [China Standard Time]";
+timezoneMap["Asia/Chungking"] = "Asia/Chungking [China Standard Time]";
+timezoneMap["Asia/Harbin"] = "Asia/Harbin [China Standard Time]";
+timezoneMap["Asia/Hong_Kong"] = "Asia/Hong_Kong [Hong Kong Time]";
+timezoneMap["Asia/Kashgar"] = "Asia/Kashgar [China Standard Time]";
+timezoneMap["Asia/Krasnoyarsk"] = "Asia/Krasnoyarsk [Krasnoyarsk Time]";
+timezoneMap["Asia/Kuala_Lumpur"] = "Asia/Kuala_Lumpur [Malaysia Time]";
+timezoneMap["Asia/Kuching"] = "Asia/Kuching [Malaysia Time]";
+timezoneMap["Asia/Macao"] = "Asia/Macao [China Standard Time]";
+timezoneMap["Asia/Macau"] = "Asia/Macau [China Standard Time]";
+timezoneMap["Asia/Makassar"] = "Asia/Makassar [Central Indonesia Time]";
+timezoneMap["Asia/Manila"] = "Asia/Manila [Philippines Time]";
+timezoneMap["Asia/Shanghai"] = "Asia/Shanghai [China Standard Time]";
+timezoneMap["Asia/Singapore"] = "Asia/Singapore [Singapore Time]";
+timezoneMap["Asia/Taipei"] = "Asia/Taipei [China Standard Time]";
+timezoneMap["Asia/Ujung_Pandang"] = "Asia/Ujung_Pandang [Central Indonesia Time]";
+timezoneMap["Asia/Ulaanbaatar"] = "Asia/Ulaanbaatar [Ulaanbaatar Time]";
+timezoneMap["Asia/Ulan_Bator"] = "Asia/Ulan_Bator [Ulaanbaatar Time]";
+timezoneMap["Asia/Urumqi"] = "Asia/Urumqi [China Standard Time]";
+timezoneMap["Australia/Perth"] = "Australia/Perth [Western Standard Time (Australia)]";
+timezoneMap["Australia/West"] = "Australia/West [Western Standard Time (Australia)]";
+timezoneMap["CTT"] = "CTT [China Standard Time]";
+timezoneMap["Etc/GMT-8"] = "Etc/GMT-8 [GMT+08:00]";
+timezoneMap["Hongkong"] = "Hongkong [Hong Kong Time]";
+timezoneMap["PRC"] = "PRC [China Standard Time]";
+timezoneMap["Singapore"] = "Singapore [Singapore Time]";
+timezoneMap["Australia/Eucla"] = "Australia/Eucla [Central Western Standard Time (Australia)]";
+timezoneMap["Asia/Dili"] = "Asia/Dili [Timor-Leste Time]";
+timezoneMap["Asia/Irkutsk"] = "Asia/Irkutsk [Irkutsk Time]";
+timezoneMap["Asia/Jayapura"] = "Asia/Jayapura [East Indonesia Time]";
+timezoneMap["Asia/Pyongyang"] = "Asia/Pyongyang [Korea Standard Time]";
+timezoneMap["Asia/Seoul"] = "Asia/Seoul [Korea Standard Time]";
+timezoneMap["Asia/Tokyo"] = "Asia/Tokyo [Japan Standard Time]";
+timezoneMap["Etc/GMT-9"] = "Etc/GMT-9 [GMT+09:00]";
+timezoneMap["JST"] = "JST [Japan Standard Time]";
+timezoneMap["Japan"] = "Japan [Japan Standard Time]";
+timezoneMap["Pacific/Palau"] = "Pacific/Palau [Palau Time]";
+timezoneMap["ROK"] = "ROK [Korea Standard Time]";
+timezoneMap["ACT"] = "ACT [Central Standard Time (Northern Territory)]";
+timezoneMap["Australia/Adelaide"] = "Australia/Adelaide [Central Standard Time (South Australia)]";
+timezoneMap["Australia/Broken_Hill"] = "Australia/Broken_Hill [Central Standard Time (South Australia/New South Wales)]";
+timezoneMap["Australia/Darwin"] = "Australia/Darwin [Central Standard Time (Northern Territory)]";
+timezoneMap["Australia/North"] = "Australia/North [Central Standard Time (Northern Territory)]";
+timezoneMap["Australia/South"] = "Australia/South [Central Standard Time (South Australia)]";
+timezoneMap["Australia/Yancowinna"] = "Australia/Yancowinna [Central Standard Time (South Australia/New South Wales)]";
+timezoneMap["AET"] = "AET [Eastern Standard Time (New South Wales)]";
+timezoneMap["Antarctica/DumontDUrville"] = "Antarctica/DumontDUrville [Dumont-d'Urville Time]";
+timezoneMap["Asia/Khandyga"] = "Asia/Khandyga [GMT+10:00]";
+timezoneMap["Asia/Yakutsk"] = "Asia/Yakutsk [Yakutsk Time]";
+timezoneMap["Australia/ACT"] = "Australia/ACT [Eastern Standard Time (New South Wales)]";
+timezoneMap["Australia/Brisbane"] = "Australia/Brisbane [Eastern Standard Time (Queensland)]";
+timezoneMap["Australia/Canberra"] = "Australia/Canberra [Eastern Standard Time (New South Wales)]";
+timezoneMap["Australia/Currie"] = "Australia/Currie [Eastern Standard Time (New South Wales)]";
+timezoneMap["Australia/Hobart"] = "Australia/Hobart [Eastern Standard Time (Tasmania)]";
+timezoneMap["Australia/Lindeman"] = "Australia/Lindeman [Eastern Standard Time (Queensland)]";
+timezoneMap["Australia/Melbourne"] = "Australia/Melbourne [Eastern Standard Time (Victoria)]";
+timezoneMap["Australia/NSW"] = "Australia/NSW [Eastern Standard Time (New South Wales)]";
+timezoneMap["Australia/Queensland"] = "Australia/Queensland [Eastern Standard Time (Queensland)]";
+timezoneMap["Australia/Sydney"] = "Australia/Sydney [Eastern Standard Time (New South Wales)]";
+timezoneMap["Australia/Tasmania"] = "Australia/Tasmania [Eastern Standard Time (Tasmania)]";
+timezoneMap["Australia/Victoria"] = "Australia/Victoria [Eastern Standard Time (Victoria)]";
+timezoneMap["Etc/GMT-10"] = "Etc/GMT-10 [GMT+10:00]";
+timezoneMap["Pacific/Chuuk"] = "Pacific/Chuuk [GMT+10:00]";
+timezoneMap["Pacific/Guam"] = "Pacific/Guam [Chamorro Standard Time]";
+timezoneMap["Pacific/Port_Moresby"] = "Pacific/Port_Moresby [Papua New Guinea Time]";
+timezoneMap["Pacific/Saipan"] = "Pacific/Saipan [Chamorro Standard Time]";
+timezoneMap["Pacific/Truk"] = "Pacific/Truk [Truk Time]";
+timezoneMap["Pacific/Yap"] = "Pacific/Yap [Truk Time]";
+timezoneMap["Australia/LHI"] = "Australia/LHI [Lord Howe Standard Time]";
+timezoneMap["Australia/Lord_Howe"] = "Australia/Lord_Howe [Lord Howe Standard Time]";
+timezoneMap["Antarctica/Macquarie"] = "Antarctica/Macquarie [Macquarie Island Time]";
+timezoneMap["Asia/Sakhalin"] = "Asia/Sakhalin [Sakhalin Time]";
+timezoneMap["Asia/Ust-Nera"] = "Asia/Ust-Nera [GMT+11:00]";
+timezoneMap["Asia/Vladivostok"] = "Asia/Vladivostok [Vladivostok Time]";
+timezoneMap["Etc/GMT-11"] = "Etc/GMT-11 [GMT+11:00]";
+timezoneMap["Pacific/Efate"] = "Pacific/Efate [Vanuatu Time]";
+timezoneMap["Pacific/Guadalcanal"] = "Pacific/Guadalcanal [Solomon Is. Time]";
+timezoneMap["Pacific/Kosrae"] = "Pacific/Kosrae [Kosrae Time]";
+timezoneMap["Pacific/Noumea"] = "Pacific/Noumea [New Caledonia Time]";
+timezoneMap["Pacific/Pohnpei"] = "Pacific/Pohnpei [GMT+11:00]";
+timezoneMap["Pacific/Ponape"] = "Pacific/Ponape [Ponape Time]";
+timezoneMap["SST"] = "SST [Solomon Is. Time]";
+timezoneMap["Pacific/Norfolk"] = "Pacific/Norfolk [Norfolk Time]";
+timezoneMap["Antarctica/McMurdo"] = "Antarctica/McMurdo [New Zealand Standard Time]";
+timezoneMap["Antarctica/South_Pole"] = "Antarctica/South_Pole [New Zealand Standard Time]";
+timezoneMap["Asia/Anadyr"] = "Asia/Anadyr [Anadyr Time]";
+timezoneMap["Asia/Kamchatka"] = "Asia/Kamchatka [Petropavlovsk-Kamchatski Time]";
+timezoneMap["Asia/Magadan"] = "Asia/Magadan [Magadan Time]";
+timezoneMap["Etc/GMT-12"] = "Etc/GMT-12 [GMT+12:00]";
+timezoneMap["Kwajalein"] = "Kwajalein [Marshall Islands Time]";
+timezoneMap["NST"] = "NST [New Zealand Standard Time]";
+timezoneMap["NZ"] = "NZ [New Zealand Standard Time]";
+timezoneMap["Pacific/Auckland"] = "Pacific/Auckland [New Zealand Standard Time]";
+timezoneMap["Pacific/Fiji"] = "Pacific/Fiji [Fiji Time]";
+timezoneMap["Pacific/Funafuti"] = "Pacific/Funafuti [Tuvalu Time]";
+timezoneMap["Pacific/Kwajalein"] = "Pacific/Kwajalein [Marshall Islands Time]";
+timezoneMap["Pacific/Majuro"] = "Pacific/Majuro [Marshall Islands Time]";
+timezoneMap["Pacific/Nauru"] = "Pacific/Nauru [Nauru Time]";
+timezoneMap["Pacific/Tarawa"] = "Pacific/Tarawa [Gilbert Is. Time]";
+timezoneMap["Pacific/Wake"] = "Pacific/Wake [Wake Time]";
+timezoneMap["Pacific/Wallis"] = "Pacific/Wallis [Wallis & Futuna Time]";
+timezoneMap["NZ-CHAT"] = "NZ-CHAT [Chatham Standard Time]";
+timezoneMap["Pacific/Chatham"] = "Pacific/Chatham [Chatham Standard Time]";
+timezoneMap["Etc/GMT-13"] = "Etc/GMT-13 [GMT+13:00]";
+timezoneMap["MIT"] = "MIT [West Samoa Time]";
+timezoneMap["Pacific/Apia"] = "Pacific/Apia [West Samoa Time]";
+timezoneMap["Pacific/Enderbury"] = "Pacific/Enderbury [Phoenix Is. Time]";
+timezoneMap["Pacific/Fakaofo"] = "Pacific/Fakaofo [Tokelau Time]";
+timezoneMap["Pacific/Tongatapu"] = "Pacific/Tongatapu [Tonga Time]";
+timezoneMap["Etc/GMT-14"] = "Etc/GMT-14 [GMT+14:00]";
+timezoneMap["Pacific/Kiritimati"] = "Pacific/Kiritimati [Line Is. Time]";
+
// CloudStack common API helpers
cloudStack.api = {
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index 8b092600f27..77c387c4e15 100644
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -6096,30 +6096,40 @@
});
$.ajax({
- url: createURL('listVmwareDcs'), //listVmwareDcs API exists in only non-oss bild
- data: {
+ url: createURL('listClusters'),
+ data: {
zoneid: args.context.physicalResources[0].id
},
async: false,
- success: function(json) { //e.g. json == { "listvmwaredcsresponse" { "count":1 ,"VMwareDC" [ {"id":"c3c2562d-65e9-4fc7-92e2-773c2efe8f37","zoneid":1,"name":"datacenter","vcenter":"10.10.20.20"} ] } }
- var vmwaredcs = json.listvmwaredcsresponse.VMwareDC;
- if (vmwaredcs != null) {
- selectedZoneObj.vmwaredcName = vmwaredcs[0].name;
- selectedZoneObj.vmwaredcVcenter = vmwaredcs[0].vcenter;
- selectedZoneObj.vmwaredcId = vmwaredcs[0].id;
- }
- },
- error: function(XMLHttpResponse) {} //override default error handling: cloudStack.dialog.notice({ message: parseXMLHttpResponse(XMLHttpResponse)});
- });
-
- // for testing only (begin)
- /*
- selectedZoneObj.vmwaredcName = "datacenter";
- selectedZoneObj.vmwaredcVcenter = "10.10.20.20";
- selectedZoneObj.vmwaredcId = "c3c2562d-65e9-4fc7-92e2-773c2efe8f37";
- */
- // for testing only (end)
-
+ success: function(json) {
+ var clusters = json.listclustersresponse.cluster;
+ if (clusters != null) {
+ for (var i = 0; i < clusters.length; i++) {
+ if (clusters[i].hypervisortype == 'VMware') {
+ $.ajax({
+ url: createURL('listVmwareDcs'), //listVmwareDcs API exists in only non-oss bild
+ data: {
+ zoneid: args.context.physicalResources[0].id
+ },
+ async: false,
+ success: function(json) { //e.g. json == { "listvmwaredcsresponse" { "count":1 ,"VMwareDC" [ {"id":"c3c2562d-65e9-4fc7-92e2-773c2efe8f37","zoneid":1,"name":"datacenter","vcenter":"10.10.20.20"} ] } }
+ var vmwaredcs = json.listvmwaredcsresponse.VMwareDC;
+ if (vmwaredcs != null) {
+ selectedZoneObj.vmwaredcName = vmwaredcs[0].name;
+ selectedZoneObj.vmwaredcVcenter = vmwaredcs[0].vcenter;
+ selectedZoneObj.vmwaredcId = vmwaredcs[0].id;
+ }
+ }
+ //, error: function(XMLHttpResponse) {} //override default error handling: cloudStack.dialog.notice({ message: parseXMLHttpResponse(XMLHttpResponse)});
+ });
+
+ break;
+ }
+ }
+ }
+ }
+ });
+
args.response.success({
actionFilter: zoneActionfilter,
data: selectedZoneObj
@@ -7039,7 +7049,7 @@
var listView = $.extend(true, {}, cloudStack.sections.system.subsections.virtualRouters.listView, {
dataProvider: function(args) {
var searchByArgs = args.filterBy.search.value.length ?
- '&name=' + args.filterBy.search.value : '';
+ '&keyword=' + args.filterBy.search.value : '';
var routers = [];
$.ajax({
@@ -13621,7 +13631,7 @@
}
},
url: {
- label: 'label.url',
+ label: 'label.ip', //CLOUDSTACK-4629
validation: {
required: true
}
@@ -13823,15 +13833,13 @@
*/
//for testing only (end)
- var data = json.listucsbladeresponse.ucsblade ? json.listucsbladeresponse.ucsblade : [];
- for (var i = 0; i < data.length; i++) {
- var array1 = data[i].bladedn.split('/');
- data[i].chassis = array1[1];
- data[i].bladeid = array1[2];
+ var items = json.listucsbladeresponse.ucsblade ? json.listucsbladeresponse.ucsblade : [];
+ for (var i = 0; i < items.length; i++) {
+ addExtraPropertiesToUcsBladeObject(items[i]);
}
args.response.success({
actionFilter: bladeActionfilter,
- data: data
+ data: items
});
}
});
@@ -13971,7 +13979,8 @@
};
*/
//for testing only (end)
-
+
+ addExtraPropertiesToUcsBladeObject(json.queryasyncjobresultresponse.jobresult.ucsblade);
return json.queryasyncjobresultresponse.jobresult.ucsblade;
}
}
@@ -13982,7 +13991,79 @@
notification: {
poll: pollAsyncJobResult
}
- }
+ },
+
+ disassociateProfileFromBlade: {
+ label: 'Disassociate Profile from Blade',
+ addRow: 'false',
+ messages: {
+ confirm: function(args) {
+ return 'Please confirm that you want to disassociate Profile from Blade.';
+ },
+ notification: function(args) {
+ return 'Disassociate Profile from Blade';
+ }
+ },
+ action: function(args) {
+ $.ajax({
+ url: createURL('disassociateUcsProfileFromBlade'),
+ data: {
+ //ucsmanagerid: args.context.ucsManagers[0].id,
+ bladeid: args.context.blades[0].id
+ },
+ success: function(json) {
+ //for testing only (begin)
+ /*
+ json = {
+ "disassociateucsprofilefrombladeresponse": {
+ "jobid": "e371592e-31be-4e53-9346-a5c565d420df"
+ }
+ }
+ */
+ //for testing only (end)
+
+ var jid = json.disassociateucsprofilefrombladeresponse.jobid;
+ args.response.success({
+ _custom: {
+ jobId: jid,
+ getUpdatedItem: function(json) {
+ //for testing only (begin)
+ /*
+ json = {
+ "queryasyncjobresultresponse": {
+ "accountid": "835fb2d5-0b76-11e3-9350-f4f3e49b5dfe",
+ "userid": "835fc0e5-0b76-11e3-9350-f4f3e49b5dfe",
+ "cmd": "org.apache.cloudstack.api.DisassociateUcsProfileCmd",
+ "jobstatus": 1,
+ "jobprocstatus": 0,
+ "jobresultcode": 0,
+ "jobresulttype": "object",
+ "jobresult": {
+ "ucsblade": {
+ "id": "f8d08575-7a1c-4f79-a588-d129c38bcc4f",
+ "ucsmanagerid": "0d87c1a6-5664-425c-9024-2ddd9605d260",
+ "bladedn": "sys/chassis-1/blade-1"
+ }
+ },
+ "created": "2013-09-13T22:17:29-0700",
+ "jobid": "2c3698a8-39ac-43e6-8ade-86eb2d3726a0"
+ }
+ };
+ */
+ //for testing only (end)
+
+ addExtraPropertiesToUcsBladeObject(json.queryasyncjobresultresponse.jobresult.ucsblade);
+ return json.queryasyncjobresultresponse.jobresult.ucsblade;
+ }
+ }
+ });
+ }
+ });
+ },
+ notification: {
+ poll: pollAsyncJobResult
+ }
+ }
}
}
}
@@ -16074,7 +16155,9 @@
var allowedActions = [];
if(jsonObj.profiledn == null) {
allowedActions.push("associateProfileToBlade");
- }
+ } else {
+ allowedActions.push("disassociateProfileFromBlade");
+ }
return allowedActions;
}
diff --git a/ui/scripts/templates.js b/ui/scripts/templates.js
index 3f79b09cf3b..dc1a39b545f 100644
--- a/ui/scripts/templates.js
+++ b/ui/scripts/templates.js
@@ -181,10 +181,13 @@
return;
var apiCmd;
- if (args.zone == -1)
- apiCmd = "listHypervisors&zoneid=-1";
- else
+ if (args.zone == -1) { //All Zones
+ //apiCmd = "listHypervisors&zoneid=-1"; //"listHypervisors&zoneid=-1" has been changed to return only hypervisors available in all zones (bug 8809)
+ apiCmd = "listHypervisors";
+ }
+ else {
apiCmd = "listHypervisors&zoneid=" + args.zone;
+ }
$.ajax({
url: createURL(apiCmd),
diff --git a/ui/scripts/ui-custom/zoneWizard.js b/ui/scripts/ui-custom/zoneWizard.js
index 695534ffe0a..cf52107ed33 100644
--- a/ui/scripts/ui-custom/zoneWizard.js
+++ b/ui/scripts/ui-custom/zoneWizard.js
@@ -294,7 +294,7 @@
var trafficData = $trafficType.data('traffic-type-data') ?
$trafficType.data('traffic-type-data') : {};
var hypervisor = getData($trafficType.closest('.zone-wizard')).zone.hypervisor;
-
+ var zoneType = getData($trafficType.closest('.zone-wizard')).zone.networkType;
var fields;
if (hypervisor == 'VMware') {
@@ -309,69 +309,71 @@
}
};
- if($trafficType.hasClass('guest') || $trafficType.hasClass('public')) {
- if(trafficData.vSwitchType == null) {
- var useDvs = false;
- $.ajax({
- url: createURL('listConfigurations'),
- data: {
- name: 'vmware.use.dvswitch'
- },
- async: false,
- success: function(json) {
- if (json.listconfigurationsresponse.configuration[0].value == 'true') {
- useDvs = true;
- }
- }
- });
- if (useDvs == true) {
- var useNexusDvs = false;
- $.ajax({
- url: createURL('listConfigurations'),
- data: {
- name: 'vmware.use.nexus.vswitch'
- },
- async: false,
- success: function(json) {
- if (json.listconfigurationsresponse.configuration[0].value == 'true') {
- useNexusDvs = true;
- }
- }
- });
- if (useNexusDvs == true) {
- trafficData.vSwitchType = 'nexusdvs';
- fields.vSwitchName.defaultValue = 'epp0';
- } else {
- trafficData.vSwitchType = 'vmwaredvs';
- fields.vSwitchName.defaultValue = 'dvSwitch0';
- }
- } else { //useDvs == false
- trafficData.vSwitchType = 'vmwaresvs';
- fields.vSwitchName.defaultValue = 'vSwitch0';
- }
- }
-
- $.extend(fields, {
- vSwitchType: {
- label: 'vSwitch Type',
- select: function (args) {
- args.response.success({
- data: [{
- id: 'nexusdvs',
- description: 'Cisco Nexus 1000v Distributed Virtual Switch'
- }, {
- id: 'vmwaresvs',
- description: 'VMware vNetwork Standard Virtual Switch'
- }, {
- id: 'vmwaredvs',
- description: 'VMware vNetwork Distributed Virtual Switch'
- }]
- });
- },
- defaultValue: trafficData.vSwitchType
- }
- });
- }
+ if(zoneType == 'Advanced') {
+ if($trafficType.hasClass('guest') || $trafficType.hasClass('public')) {
+ if(trafficData.vSwitchType == null) {
+ var useDvs = false;
+ $.ajax({
+ url: createURL('listConfigurations'),
+ data: {
+ name: 'vmware.use.dvswitch'
+ },
+ async: false,
+ success: function(json) {
+ if (json.listconfigurationsresponse.configuration[0].value == 'true') {
+ useDvs = true;
+ }
+ }
+ });
+ if (useDvs == true) {
+ var useNexusDvs = false;
+ $.ajax({
+ url: createURL('listConfigurations'),
+ data: {
+ name: 'vmware.use.nexus.vswitch'
+ },
+ async: false,
+ success: function(json) {
+ if (json.listconfigurationsresponse.configuration[0].value == 'true') {
+ useNexusDvs = true;
+ }
+ }
+ });
+ if (useNexusDvs == true) {
+ trafficData.vSwitchType = 'nexusdvs';
+ fields.vSwitchName.defaultValue = 'epp0';
+ } else {
+ trafficData.vSwitchType = 'vmwaredvs';
+ fields.vSwitchName.defaultValue = 'dvSwitch0';
+ }
+ } else { //useDvs == false
+ trafficData.vSwitchType = 'vmwaresvs';
+ fields.vSwitchName.defaultValue = 'vSwitch0';
+ }
+ }
+
+ $.extend(fields, {
+ vSwitchType: {
+ label: 'vSwitch Type',
+ select: function (args) {
+ args.response.success({
+ data: [{
+ id: 'nexusdvs',
+ description: 'Cisco Nexus 1000v Distributed Virtual Switch'
+ }, {
+ id: 'vmwaresvs',
+ description: 'VMware vNetwork Standard Virtual Switch'
+ }, {
+ id: 'vmwaredvs',
+ description: 'VMware vNetwork Distributed Virtual Switch'
+ }]
+ });
+ },
+ defaultValue: trafficData.vSwitchType
+ }
+ });
+ }
+ }
} else {
fields = {
label: {
@@ -1004,6 +1006,7 @@
args.action({
data: data,
+ wizard: $wizard,
startFn: $wizard.data('startfn'),
uiSteps: $.map(
$wizard.find('.steps > div'),
diff --git a/ui/scripts/ui/widgets/detailView.js b/ui/scripts/ui/widgets/detailView.js
index 3a59d4104f9..0e975e41706 100644
--- a/ui/scripts/ui/widgets/detailView.js
+++ b/ui/scripts/ui/widgets/detailView.js
@@ -223,9 +223,11 @@
}
if (messages.complete) {
- cloudStack.dialog.notice({
- message: messages.complete(args2.data)
- });
+ if( messages.complete(args2.data) != null && messages.complete(args2.data).length > 0) {
+ cloudStack.dialog.notice({
+ message: messages.complete(args2.data)
+ });
+ }
}
if (additional && additional.complete) additional.complete($.extend(true, args, {
$detailView: $detailView
diff --git a/ui/scripts/ui/widgets/listView.js b/ui/scripts/ui/widgets/listView.js
index 0745c411e35..076b3ab5c4d 100644
--- a/ui/scripts/ui/widgets/listView.js
+++ b/ui/scripts/ui/widgets/listView.js
@@ -212,7 +212,7 @@
if ($instanceRow.is(':visible')) {
if (args.data) {
$newRow = replaceItem($instanceRow,
- $.extend($instanceRow.data('json-obj'), args.data),
+ args.data, //$.extend($instanceRow.data('json-obj'), args.data), /* $.extend($instanceRow.data('json-obj'), args.data) causes CLOUDSTACK-4687 */
actionFilter);
} else {
// Nothing new, so just put in existing data
diff --git a/ui/scripts/ui/widgets/notifications.js b/ui/scripts/ui/widgets/notifications.js
index fec64c51b18..9b7fc4cce03 100644
--- a/ui/scripts/ui/widgets/notifications.js
+++ b/ui/scripts/ui/widgets/notifications.js
@@ -111,7 +111,7 @@
},
incomplete: function(args) {},
error: function(args) {
- if (args.message) {
+ if (args && args.message) {
cloudStack.dialog.notice({
message: _s(args.message)
});
diff --git a/ui/scripts/zoneWizard.js b/ui/scripts/zoneWizard.js
index 58119092db0..960fcb734c8 100755
--- a/ui/scripts/zoneWizard.js
+++ b/ui/scripts/zoneWizard.js
@@ -57,8 +57,13 @@
trafficLabel += trafficConfig.vSwitchType;
}
- if (trafficLabel.length == 0) //trafficLabel == ''
+ if (trafficLabel.length == 0) { //trafficLabel == ''
trafficLabel = null;
+ } else if (trafficLabel.length >= 1) {
+ if (trafficLabel.charAt(trafficLabel.length-1) == ',') { //if last character is comma
+ trafficLabel = trafficLabel.substring(0, trafficLabel.length - 1); //remove the last character (which is comma)
+ }
+ }
}
}
@@ -1787,27 +1792,43 @@
provider: {
label: 'Provider',
select: function(args) {
- $.ajax({
- url: createURL('listStorageProviders'),
- data: {
- type: 'image'
- },
- success: function(json) {
- var objs = json.liststorageprovidersresponse.dataStoreProvider;
- var items = [{ id: '', description: ''}];
- if (objs != null) {
- for (var i = 0; i < objs.length; i++) {
- items.push({
- id: objs[i].name,
- description: objs[i].name
- });
- }
- }
+ var storageproviders = [];
+ $.ajax({
+ url: createURL('listImageStores'),
+ data: {
+ provider: 'S3'
+ },
+ async: true,
+ success: function(json) {
+ var s3stores = json.listimagestoresresponse.imagestore;
+ if(s3stores != null && s3stores.length > 0) {
+ storageproviders.push({ id: 'S3', description: 'S3'});
+ } else {
+ $.ajax({
+ url: createURL('listStorageProviders'),
+ data: {
+ type: 'image'
+ },
+ async: false,
+ success: function(json) {
+ var objs = json.liststorageprovidersresponse.dataStoreProvider;
+ storageproviders.push({ id: '', description: ''});
+ if (objs != null) {
+ for (var i = 0; i < objs.length; i++) {
+ storageproviders.push({
+ id: objs[i].name,
+ description: objs[i].name
+ });
+ }
+ }
+ }
+ });
+ }
args.response.success({
- data: items
- });
-
- args.$select.change(function() {
+ data: storageproviders
+ });
+
+ args.$select.change(function() {
var $form = $(this).closest('form');
var $fields = $form.find('.field');
@@ -1869,6 +1890,14 @@
$fields.filter('[rel=key]').hide();
} else if ($(this).val() == "S3") {
$fields.filter('[rel=name]').css('display', 'inline-block');
+
+ if(s3stores != null && s3stores.length > 0) {
+ $fields.filter('[rel=name]').find('input').val(s3stores[0].name);
+ $fields.filter('[rel=name]').find('input').attr("disabled", "disabled");
+ } else {
+ //$fields.filter('[rel=name]').find('input').val("");
+ $fields.filter('[rel=name]').find('input').removeAttr("disabled");
+ }
//NFS
$fields.filter('[rel=zoneid]').hide();
@@ -1876,20 +1905,31 @@
$fields.filter('[rel=path]').hide();
//S3
- $fields.filter('[rel=accesskey]').css('display', 'inline-block');
- $fields.filter('[rel=secretkey]').css('display', 'inline-block');
- $fields.filter('[rel=bucket]').css('display', 'inline-block');
- $fields.filter('[rel=endpoint]').css('display', 'inline-block');
- $fields.filter('[rel=usehttps]').css('display', 'inline-block');
- $fields.filter('[rel=connectiontimeout]').css('display', 'inline-block');
- $fields.filter('[rel=maxerrorretry]').css('display', 'inline-block');
- $fields.filter('[rel=sockettimeout]').css('display', 'inline-block');
-
+ if(s3stores != null && s3stores.length > 0) {
+ $fields.filter('[rel=accesskey]').hide();
+ $fields.filter('[rel=secretkey]').hide();
+ $fields.filter('[rel=bucket]').hide();
+ $fields.filter('[rel=endpoint]').hide();
+ $fields.filter('[rel=usehttps]').hide();
+ $fields.filter('[rel=connectiontimeout]').hide();
+ $fields.filter('[rel=maxerrorretry]').hide();
+ $fields.filter('[rel=sockettimeout]').hide();
+ } else {
+ $fields.filter('[rel=accesskey]').css('display', 'inline-block');
+ $fields.filter('[rel=secretkey]').css('display', 'inline-block');
+ $fields.filter('[rel=bucket]').css('display', 'inline-block');
+ $fields.filter('[rel=endpoint]').css('display', 'inline-block');
+ $fields.filter('[rel=usehttps]').css('display', 'inline-block');
+ $fields.filter('[rel=connectiontimeout]').css('display', 'inline-block');
+ $fields.filter('[rel=maxerrorretry]').css('display', 'inline-block');
+ $fields.filter('[rel=sockettimeout]').css('display', 'inline-block');
+ }
$fields.filter('[rel=createNfsCache]').find('input').attr('checked', 'checked');
+ $fields.filter('[rel=createNfsCache]').find('input').attr("disabled", "disabled"); //Create NFS staging is required for S3 at this moment. So, disallow user to uncheck "Create NFS Secondary Staging" checkbox
$fields.filter('[rel=createNfsCache]').css('display', 'inline-block');
$fields.filter('[rel=nfsCacheNfsServer]').css('display', 'inline-block');
$fields.filter('[rel=nfsCachePath]').css('display', 'inline-block');
-
+
//Swift
$fields.filter('[rel=url]').hide();
$fields.filter('[rel=account]').hide();
@@ -1924,11 +1964,10 @@
$fields.filter('[rel=username]').css('display', 'inline-block');
$fields.filter('[rel=key]').css('display', 'inline-block');
}
- });
-
- args.$select.change();
- }
- });
+ });
+ args.$select.change();
+ }
+ });
}
},
@@ -2050,7 +2089,9 @@
}
},
- action: function(args) {
+ action: function(args) {
+ var $wizard = args.wizard;
+
var advZoneConfiguredVirtualRouterCount = 0; //for multiple physical networks in advanced zone. Each physical network has 2 virtual routers: regular one and VPC one.
var success = args.response.success;
@@ -4103,62 +4144,69 @@
});
}
});
- } else if (args.data.secondaryStorage.provider == 'S3') {
- $.extend(data, {
- provider: args.data.secondaryStorage.provider,
- 'details[0].key': 'accesskey',
- 'details[0].value': args.data.secondaryStorage.accesskey,
- 'details[1].key': 'secretkey',
- 'details[1].value': args.data.secondaryStorage.secretkey,
- 'details[2].key': 'bucket',
- 'details[2].value': args.data.secondaryStorage.bucket,
- 'details[3].key': 'usehttps',
- 'details[3].value': (args.data.secondaryStorage.usehttps != null && args.data.secondaryStorage.usehttps == 'on' ? 'true' : 'false')
- });
+ } else if (args.data.secondaryStorage.provider == 'S3') {
+ if($wizard.find('form[rel=secondaryStorage]').find('div[rel=name]').find('input').attr("disabled") == "disabled") { //Name textbox is disabled (and populated with S3 image setore name) when S3 image store exists. In this case, do not call addImageStore to create S3 image store.
+ complete({
+ data: args.data
+ });
+ } else { //Name textbox is not disabled when S3 image store does not exist. In this case, call addImageStore to create S3 image store.
+ $.extend(data, {
+ provider: args.data.secondaryStorage.provider,
+ 'details[0].key': 'accesskey',
+ 'details[0].value': args.data.secondaryStorage.accesskey,
+ 'details[1].key': 'secretkey',
+ 'details[1].value': args.data.secondaryStorage.secretkey,
+ 'details[2].key': 'bucket',
+ 'details[2].value': args.data.secondaryStorage.bucket,
+ 'details[3].key': 'usehttps',
+ 'details[3].value': (args.data.secondaryStorage.usehttps != null && args.data.secondaryStorage.usehttps == 'on' ? 'true' : 'false')
+ });
- var index = 4;
- if (args.data.secondaryStorage.endpoint != null && args.data.secondaryStorage.endpoint.length > 0) {
- data['details[' + index.toString() + '].key'] = 'endpoint';
- data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.endpoint;
- index++;
- }
- if (args.data.secondaryStorage.connectiontimeout != null && args.data.secondaryStorage.connectiontimeout.length > 0) {
- data['details[' + index.toString() + '].key'] = 'connectiontimeout';
- data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.connectiontimeout;
- index++;
- }
- if (args.data.secondaryStorage.maxerrorretry != null && args.data.secondaryStorage.maxerrorretry.length > 0) {
- data['details[' + index.toString() + '].key'] = 'maxerrorretry';
- data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.maxerrorretry;
- index++;
- }
- if (args.data.secondaryStorage.sockettimeout != null && args.data.secondaryStorage.sockettimeout.length > 0) {
- data['details[' + index.toString() + '].key'] = 'sockettimeout';
- data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.sockettimeout;
- index++;
- }
- $.ajax({
- url: createURL('addImageStore'),
- data: data,
- success: function(json) {
- g_regionsecondaryenabled = true;
-
- complete({
- data: $.extend(args.data, {
- returnedSecondaryStorage: json.addimagestoreresponse.secondarystorage
- })
- });
- },
- error: function(XMLHttpResponse) {
- var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
- error('addSecondaryStorage', errorMsg, {
- fn: 'addSecondaryStorage',
- args: args
- });
+ var index = 4;
+ if (args.data.secondaryStorage.endpoint != null && args.data.secondaryStorage.endpoint.length > 0) {
+ data['details[' + index.toString() + '].key'] = 'endpoint';
+ data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.endpoint;
+ index++;
}
- });
-
- if (args.data.secondaryStorage.createNfsCache == 'on') {
+ if (args.data.secondaryStorage.connectiontimeout != null && args.data.secondaryStorage.connectiontimeout.length > 0) {
+ data['details[' + index.toString() + '].key'] = 'connectiontimeout';
+ data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.connectiontimeout;
+ index++;
+ }
+ if (args.data.secondaryStorage.maxerrorretry != null && args.data.secondaryStorage.maxerrorretry.length > 0) {
+ data['details[' + index.toString() + '].key'] = 'maxerrorretry';
+ data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.maxerrorretry;
+ index++;
+ }
+ if (args.data.secondaryStorage.sockettimeout != null && args.data.secondaryStorage.sockettimeout.length > 0) {
+ data['details[' + index.toString() + '].key'] = 'sockettimeout';
+ data['details[' + index.toString() + '].value'] = args.data.secondaryStorage.sockettimeout;
+ index++;
+ }
+ $.ajax({
+ url: createURL('addImageStore'),
+ data: data,
+ success: function(json) {
+ g_regionsecondaryenabled = true;
+
+ complete({
+ data: $.extend(args.data, {
+ returnedSecondaryStorage: json.addimagestoreresponse.secondarystorage
+ })
+ });
+ },
+ error: function(XMLHttpResponse) {
+ var errorMsg = parseXMLHttpResponse(XMLHttpResponse);
+ error('addSecondaryStorage', errorMsg, {
+ fn: 'addSecondaryStorage',
+ args: args
+ });
+ }
+ });
+ }
+
+ //NFS Cache
+ if ($wizard.find('form[rel=secondaryStorage]').find('div[rel=createNfsCache]').find("input[type=checkbox]").is(':checked') == true) {
var zoneid = args.data.secondaryStorage.nfsCacheZoneid;
var nfs_server = args.data.secondaryStorage.nfsCacheNfsServer;
var path = args.data.secondaryStorage.nfsCachePath;
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/CustomFieldConstants.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/CustomFieldConstants.java
index 139d377591c..47c2d3873ee 100644
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/CustomFieldConstants.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/CustomFieldConstants.java
@@ -23,4 +23,6 @@ public interface CustomFieldConstants {
public final static String CLOUD_NIC_MASK = "cloud.nic.mask";
public final static String CLOUD_ZONE = "cloud.zone";
public final static String CLOUD_VM_INTERNAL_NAME = "cloud.vm.internal.name";
+ public final static String CLOUD_WORKER = "cloud.vm.worker";
+ public final static String CLOUD_WORKER_TAG = "cloud.vm.worker.tag";
}
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/DatacenterMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/DatacenterMO.java
index cabb60abc5d..6d82aefad4b 100755
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/DatacenterMO.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/DatacenterMO.java
@@ -20,6 +20,8 @@ package com.cloud.hypervisor.vmware.mo;
import java.util.ArrayList;
import java.util.List;
+import org.apache.log4j.Logger;
+
import com.cloud.hypervisor.vmware.util.VmwareContext;
import com.cloud.utils.Pair;
import com.vmware.vim25.CustomFieldStringValue;
@@ -37,6 +39,7 @@ import com.vmware.vim25.VirtualEthernetCardDistributedVirtualPortBackingInfo;
import edu.emory.mathcs.backport.java.util.Arrays;
public class DatacenterMO extends BaseMO {
+ private static final Logger s_logger = Logger.getLogger(DatacenterMO.class);
public DatacenterMO(VmwareContext context, ManagedObjectReference morDc) {
super(context, morDc);
@@ -50,7 +53,9 @@ public class DatacenterMO extends BaseMO {
super(context, null);
_mor = _context.getVimClient().getDecendentMoRef(_context.getRootFolder(), "Datacenter", dcName);
- assert(_mor != null);
+ if(_mor == null) {
+ s_logger.error("Unable to locate DC " + dcName);
+ }
}
@Override
@@ -61,7 +66,6 @@ public class DatacenterMO extends BaseMO {
public void registerTemplate(ManagedObjectReference morHost, String datastoreName,
String templateName, String templateFileName) throws Exception {
-
ManagedObjectReference morFolder = (ManagedObjectReference)_context.getVimClient().getDynamicProperty(
_mor, "vmFolder");
assert(morFolder != null);
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
index 014a9f8ba47..c7f16611e52 100755
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java
@@ -1237,8 +1237,24 @@ public class HypervisorHostHelper {
scsiControllerSpec.setOperation(VirtualDeviceConfigSpecOperation.ADD);
vmConfig.getDeviceChange().add(scsiControllerSpec);
- hyperHost.createVm(vmConfig);
- workingVM = hyperHost.findVmOnHyperHost(vmName);
+ if(hyperHost.createVm(vmConfig)) {
+ // Ugly work-around, it takes time for newly created VM to appear
+ for(int i = 0; i < 10 && workingVM == null; i++) {
+ workingVM = hyperHost.findVmOnHyperHost(vmName);
+
+ try {
+ Thread.sleep(1000);
+ } catch(InterruptedException e) {
+ }
+ }
+ }
+
+ if(workingVM != null) {
+ workingVM.setCustomFieldValue(CustomFieldConstants.CLOUD_WORKER, "true");
+ String workerTag = String.format("%d-%s", System.currentTimeMillis(),
+ hyperHost.getContext().getStockObject("noderuninfo"));
+ workingVM.setCustomFieldValue(CustomFieldConstants.CLOUD_WORKER_TAG, workerTag);
+ }
return workingVM;
}
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
index f7118597cb2..abc5bf8a8bf 100644
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
@@ -908,8 +908,9 @@ public class VirtualMachineMO extends BaseMO {
assert(vmdkDatastorePath != null);
assert(morDs != null);
+ int ideControllerKey = getIDEDeviceControllerKey();
if(controllerKey < 0) {
- controllerKey = getIDEDeviceControllerKey();
+ controllerKey = ideControllerKey;
}
VirtualDisk newDisk = new VirtualDisk();
@@ -952,6 +953,8 @@ public class VirtualMachineMO extends BaseMO {
}
int deviceNumber = getNextDeviceNumber(controllerKey);
+ if(controllerKey != ideControllerKey && VmwareHelper.isReservedScsiDeviceNumber(deviceNumber))
+ deviceNumber++;
newDisk.setControllerKey(controllerKey);
newDisk.setKey(-deviceNumber);
@@ -1545,29 +1548,25 @@ public class VirtualMachineMO extends BaseMO {
}
// return the disk chain (VMDK datastore paths) for cloned snapshot
- public String[] cloneFromCurrentSnapshot(String clonedVmName, int cpuSpeedMHz, int memoryMb, String diskDevice,
+ public Pair