From 712f9b4b75ed194ba4cfc843dfa02a759a262f35 Mon Sep 17 00:00:00 2001 From: Rahul Sharma Date: Fri, 29 Jan 2016 20:05:02 +0530 Subject: [PATCH] Fix validations, don't show vxlan in form when global mode is automatic. Fix vCenter edit handlling For sanity add hyphen in expansion (whenever empty data) Closes-Bug: #1527239 Change-Id: I3f3179bd607b787379d8c731443886d5b1274716 --- .../networks/ui/js/models/subnetModel.js | 6 +- .../networks/ui/js/models/vnCfgModel.js | 76 ++++++++++++------- .../networks/ui/js/views/vnCfgEditView.js | 12 +-- .../networks/ui/js/views/vnCfgGridView.js | 55 ++++++++------ 4 files changed, 86 insertions(+), 63 deletions(-) diff --git a/webroot/config/networking/networks/ui/js/models/subnetModel.js b/webroot/config/networking/networks/ui/js/models/subnetModel.js index 424782b1d..32bef979d 100644 --- a/webroot/config/networking/networks/ui/js/models/subnetModel.js +++ b/webroot/config/networking/networks/ui/js/models/subnetModel.js @@ -47,13 +47,15 @@ define([ subnetModelConfigValidations: { 'user_created_cidr': function (value, attr, finalObj) { - if ((value && value.indexOf('/') == -1) || value && !isValidIP(value)) { + if ((value && value.indexOf('/') == -1) || value && !isValidIP(value) || + !value || !value.length) { return "Enter valid IPv4 or IPv6 Subnet/Mask"; } }, 'default_gateway': function (value, attr, finalObj) { - if (value && value.indexOf('/') != -1 || value && !isValidIP(value)) { + if (value && value.indexOf('/') != -1 || value && !isValidIP(value) + || !value || !value.length) { return "Enter valid IPv4 or IPv6 Gateway"; } }, diff --git a/webroot/config/networking/networks/ui/js/models/vnCfgModel.js b/webroot/config/networking/networks/ui/js/models/vnCfgModel.js index 0f0fb6fc4..ad2df1e5f 100644 --- a/webroot/config/networking/networks/ui/js/models/vnCfgModel.js +++ b/webroot/config/networking/networks/ui/js/models/vnCfgModel.js @@ -64,6 +64,7 @@ define([ 'destination_port': false */ }, + 'route_table_refs': [], 'user_created_host_routes': [],//fake created for host routes under each subnet 'user_created_route_targets': [], //fake created for rt_list.rt collection 'user_created_import_route_targets': [], //fake created for import_rt_list.rt collection @@ -72,8 +73,7 @@ define([ 'user_created_sriov_enabled': false , //fake checkbox created for SRIOV 'pVlanId': null, //fake created for vcenter pvlan 'sVlanId': null, //fake created for vcenter sec pvlan - //'routing_instance_refs': [], // not for now - 'route_table_refs': [], + 'user_created_vxlan_mode': false, 'disable': false, }, @@ -89,26 +89,6 @@ define([ modelConfig['route_table_refs'] = formatVNCfg.staticRouteFormatter(null, null, null, -1, modelConfig); - - modelConfig['id_perms']['enable'] = - getValueByJsonPath(modelConfig, 'id_perms;enable', true); - - modelConfig['virtual_network_properties'] = - getValueByJsonPath(modelConfig, 'virtual_network_properties', {}); - - modelConfig['virtual_network_properties']['allow_transit'] = - getValueByJsonPath(modelConfig, - 'virtual_network_properties;allow_transit', false); - - modelConfig['virtual_network_properties']['forwarding_mode'] = - getValueByJsonPath(modelConfig, - 'virtual_network_properties;forwarding_mode', 'default'); - - modelConfig['virtual_network_properties']['rpf'] = - getValueByJsonPath(modelConfig, - 'virtual_network_properties;rpf', 'disable') == 'disable' ? - false : true; - modelConfig['uuid'] = getValueByJsonPath(modelConfig, 'uuid', null); if (modelConfig['uuid'] != null) { @@ -130,6 +110,7 @@ define([ this.readSubnetList(modelConfig); this.readSRIOV(modelConfig); this.readEcmpHashing(modelConfig); + this.readProperties(modelConfig); return modelConfig; }, @@ -169,6 +150,7 @@ define([ hostRouteArray = []; for(var i = 0; i < hostRouteCollection.length; i++) { hostRouteArray.push({'prefix': hostRouteCollection[i].prefix(), + 'next_hop_type': null, 'next_hop': hostRouteCollection[i].next_hop()}); } return hostRouteArray; @@ -491,7 +473,7 @@ define([ if (subnet.user_created_enable_gateway == false) { subnet.default_gateway = '0.0.0.0'; } else if (subnet.default_gateway == null) { - var defGw = genarateGateway(subnet.user_created_cidr(), "start"); + var defGw = genarateGateway(subnet.user_created_cidr, "start"); //funny api if (defGw != false) { subnet.default_gateway = defGw; @@ -568,23 +550,62 @@ define([ if (rpf == null || rpf == true || rpf == 'enable') { attr['virtual_network_properties']['rpf'] = 'enable'; } else { - attr['virtual_network_properties']['rpf'] = 'false'; + attr['virtual_network_properties']['rpf'] = 'disable'; } }, + readProperties: function(attr) { + + attr['id_perms']['enable'] = + getValueByJsonPath(attr, 'id_perms;enable', true); + + attr['virtual_network_properties'] = + getValueByJsonPath(attr, 'virtual_network_properties', {}); + + attr['virtual_network_properties']['allow_transit'] = + getValueByJsonPath(attr, + 'virtual_network_properties;allow_transit', false); + + attr['virtual_network_properties']['forwarding_mode'] = + getValueByJsonPath(attr, + 'virtual_network_properties;forwarding_mode', 'default'); + + attr['virtual_network_properties']['rpf'] = + getValueByJsonPath(attr, + 'virtual_network_properties;rpf', 'disable') == 'disable' ? + false : true; + + attr['user_created_vxlan_mode'] = + (getValueByJsonPath(window.globalObj, + 'global-vrouter-config;global-vrouter-config;vxlan_network_identifier_mode', + 'automatic') == 'configured'); + }, + + getRouteTargets: function(attr) { attr['route_target_list'] = {}; attr['route_target_list']['route_target'] = this.getRouteTargetList(attr, 'user_created_route_targets'); + if (attr['route_target_list']['route_target'] == []) { + attr['route_target_list'] = {}; + } + attr['export_route_target_list'] = {}; attr['export_route_target_list']['route_target'] = this.getRouteTargetList(attr, 'user_created_export_route_targets'); + if (attr['export_route_target_list']['route_target'] == []) { + attr['export_route_target_list'] = {}; + } + attr['import_route_target_list'] = {}; attr['import_route_target_list']['route_target'] = this.getRouteTargetList(attr, 'user_created_import_route_targets'); + if (attr['import_route_target_list']['route_target'] == []) { + attr['import_route_target_list'] = {}; + } }, getPhysicalRouters: function(attr) { @@ -710,7 +731,7 @@ define([ }, 'pVlanId' : function (value, attr, finalObj) { - if (isVCenter()) { + if (isVCenter() && finalObj['uuid'] == null) { var vlan = Number(value); if (isNaN(vlan) || vlan < 1 || vlan > 4094) { @@ -720,7 +741,7 @@ define([ }, 'sVlanId' : function (value, attr, finalObj) { - if (isVCenter()) { + if (isVCenter() && finalObj['uuid'] == null) { var vlan = Number(value); if (isNaN(vlan) || vlan < 1 || vlan > 4094) { @@ -820,7 +841,7 @@ define([ this.getSRIOV(newVNCfgData); this.getEcmpHashing(newVNCfgData); - delete newVNCfgData['virtual_network_network_id']; + delete newVNCfgData.virtual_network_network_id; delete newVNCfgData.errors; delete newVNCfgData.locks; delete newVNCfgData.cgrid; @@ -837,6 +858,7 @@ define([ delete newVNCfgData.physical_router_back_refs; delete newVNCfgData.sVlanId; delete newVNCfgData.disable; + delete newVNCfgData.user_created_vxlan_mode; if (!isVCenter()) { delete newVNCfgData.pVlanId; diff --git a/webroot/config/networking/networks/ui/js/views/vnCfgEditView.js b/webroot/config/networking/networks/ui/js/views/vnCfgEditView.js index 5a16df8bb..53061dc40 100644 --- a/webroot/config/networking/networks/ui/js/views/vnCfgEditView.js +++ b/webroot/config/networking/networks/ui/js/views/vnCfgEditView.js @@ -535,6 +535,7 @@ define([ label:'Static IP Addressing', dataBindValue : 'external_ipam', visible : 'isVCenter()', + disabled: disableOnEdit, elementConfig : { isChecked:false } @@ -662,14 +663,7 @@ define([ path: 'virtual_network_properties.vxlan_network_identifier', class: 'span6', dataBindValue: 'virtual_network_properties().vxlan_network_identifier', - disabled: function () { - var vxMode = - (!(getValueByJsonPath(window.globalObj, - 'global-vrouter-config;global-vrouter-config;vxlan_network_identifier_mode', - 'automatic') == 'configured')); - return vxMode; - - } + visible: 'user_created_vxlan_mode()', } } ] @@ -763,7 +757,7 @@ define([ elementId: 'user_created_sriov_enabled', view: 'FormCheckboxView', viewConfig: { - label: 'SRIOV', + label: 'SR-IOV', path: 'user_created_sriov_enabled', class: 'span2', dataBindValue: 'user_created_sriov_enabled', diff --git a/webroot/config/networking/networks/ui/js/views/vnCfgGridView.js b/webroot/config/networking/networks/ui/js/views/vnCfgGridView.js index ccb3cb93b..a6d60b753 100644 --- a/webroot/config/networking/networks/ui/js/views/vnCfgGridView.js +++ b/webroot/config/networking/networks/ui/js/views/vnCfgGridView.js @@ -229,7 +229,7 @@ define([ templateGeneratorConfig: [ { label: 'Subnet(s)', - key: 'network_ipam_refs', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'subnetTmplFormatter' @@ -259,7 +259,7 @@ define([ }, { label: 'Shared', - key: 'is_shared', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'sharedFormatter' @@ -268,7 +268,7 @@ define([ { label: 'External', - key: 'router_external', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'rtrExternalFormatter' @@ -276,7 +276,7 @@ define([ }, { label: 'Attached Network Policies', - key: 'network_policy_refs', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'polColFormatter', @@ -285,7 +285,7 @@ define([ { label: 'Forwarding Mode', - key: 'virtual_network_properties.forwarding_mode', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'fwdModeFormatter', @@ -293,7 +293,7 @@ define([ }, { label: 'VxLAN Identifier', - key: 'virtual_network_properties', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'vxLanIdFormatter', @@ -301,7 +301,7 @@ define([ }, { label: 'Allow Transit', - key: 'virtual_network_properties', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'allowTransitFormatter', @@ -309,7 +309,7 @@ define([ }, { label: 'Reverse Path Forwarding', - key: 'virtual_network_properties', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'rpfFormatter', @@ -317,7 +317,7 @@ define([ }, { label: 'Flood Unknown Unicast', - key: 'flood_unknown_unicast', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'floodUnUcastFormatter', @@ -325,7 +325,7 @@ define([ }, { label: 'Multiple Service Chains', - key: 'multi_policy_service_chains_enabled', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'multiSvcChainFormatter', @@ -333,7 +333,7 @@ define([ }, { label: 'Host Route(s)', - key: 'route_target_list', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'subnetHostRouteFormatter', @@ -341,7 +341,7 @@ define([ }, { label: 'DNS Server(s)', - key: 'network_ipam_refs', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'subnetDNSFormatter', @@ -349,15 +349,15 @@ define([ }, { label: 'Ecmp Hashing Fields', - key: 'ecmp_hashing_include_fields', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'ecmpHashFormatter', } }, { - label: 'SRIOV', - key: 'provider_properties', + label: 'SR-IOV', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'sriovFormatter', @@ -365,7 +365,7 @@ define([ }, { label: 'Extended to Physical Router(s)', - key: 'physical_router_back_refs', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'phyRouterFormatter', @@ -373,7 +373,7 @@ define([ }, { label: 'Attached Static Route(s)', - key: 'route_table_refs', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'staticRouteFormatter', @@ -381,7 +381,7 @@ define([ }, { label: 'Floating IP Pool(s)', - key: 'floating_ip_pools', + key: 'uuid', templateGenerator: 'TextGenerator', templateGeneratorConfig: { formatter: 'fipPoolTmplFormatter', @@ -411,7 +411,6 @@ define([ formatter: 'importRouteTargetFormatter', } }, - ] } ] @@ -452,20 +451,24 @@ define([ null, null, null, dc); } this.routeTargetFormatter = function (v, dc) { - return formatVNCfg.routeTargetFormatter(null, + var retStr = formatVNCfg.routeTargetFormatter(null, null, 'route_target_list', null, dc); + return retStr.length ? retStr : '-'; } this.exportRouteTargetFormatter = function (v, dc) { - return formatVNCfg.routeTargetFormatter(null, + var retStr = formatVNCfg.routeTargetFormatter(null, null, 'export_route_target_list', null, dc); + return retStr.length ? retStr : '-'; } this.importRouteTargetFormatter = function (v, dc) { - return formatVNCfg.routeTargetFormatter(null, + var retStr = formatVNCfg.routeTargetFormatter(null, null, 'import_route_target_list', null, dc); + return retStr.length ? retStr : '-'; } this.subnetHostRouteFormatter = function (v, dc) { - return formatVNCfg.subnetHostRouteFormatter(null, + var retStr = formatVNCfg.subnetHostRouteFormatter(null, null, null, null, dc); + return retStr.length ? retStr : '-'; } this.fwdModeFormatter = function (v, dc) { return formatVNCfg.fwdModeFormatter(null, @@ -496,12 +499,14 @@ define([ null, null, null, dc); } this.ecmpHashFormatter = function (v, dc) { - return formatVNCfg.ecmpHashFormatter(null, + var retStr = formatVNCfg.ecmpHashFormatter(null, null, null, null, dc); + return retStr.length ? retStr : '-'; } this.subnetDNSFormatter = function (v, dc) { - return formatVNCfg.subnetDNSFormatter(null, + var retStr = formatVNCfg.subnetDNSFormatter(null, null, null, null, dc); + return retStr.length ? retStr : '-'; } this.phyRouterFormatter = function (v, dc) { return formatVNCfg.phyRouterFormatter(null,