/// <summary> /// Publish VM Network. /// </summary> /// <param name="txnMng">TransactionManager instance.</param> /// <param name="vMNetwork">VM Network.</param> /// <param name="operationType">Operation type performed on SCVMM.</param> /// <param name="connection">Connection object.</param> /// <returns>Boolean indicating whether network service refresh is needed..</returns> public bool PublishVMNetwork(TransactionManager txnMng, VMNetwork vMNetwork, NetworkEntityPublishType operationType, VSEMConnection connection) { bool needRefresh = false; var JavaScriptSerializer = new JavaScriptSerializer(); JavaScriptSerializer.MaxJsonLength = int.MaxValue; StringBuilder json = new StringBuilder("\"txnMng\":" + JavaScriptSerializer.Serialize(txnMng)); json.Append(" \"vMNetwork\":" + JavaScriptSerializer.Serialize(vMNetwork)); json.Append(" \"operationType\":" + JavaScriptSerializer.Serialize(operationType)); ODLVSEMETW.EventWriteStartLibrary(MethodBase.GetCurrentMethod().Name, json.ToString()); if (txnMng == null) { ODLVSEMETW.EventWriteArgumentError( MethodBase.GetCurrentMethod().DeclaringType.Name.ToString(), MethodBase.GetCurrentMethod().Name, "The parameter 'transaction' is null or invalid."); throw new ArgumentException("The parameter 'transaction' is null or invalid."); } if (vMNetwork == null) { ODLVSEMETW.EventWriteArgumentError( MethodBase.GetCurrentMethod().DeclaringType.Name.ToString(), MethodBase.GetCurrentMethod().Name, "The parameter 'vMNetwork' is null or invalid."); throw new ArgumentException("The parameter 'vMNetworkName' is null or invalid."); } if (connection == null) { ODLVSEMETW.EventWriteArgumentError( MethodBase.GetCurrentMethod().DeclaringType.Name.ToString(), MethodBase.GetCurrentMethod().Name, "The parameter 'connection' is null or invalid."); throw new ArgumentException("The parameter 'connection' is null or invalid."); } string VtnHostName = this.ConnectionString; if (VtnHostName.StartsWith(@"https://", StringComparison.Ordinal)) { VtnHostName = VtnHostName.Substring(8); } VtnHostName = VtnHostName.Split('.', ':').First(); var vMNetworkConfig = new VMNetworkConfig(VtnHostName); txnMng.SetConfigManager(vMNetworkConfig, TransactionManager.OpenMode.WriteMode); var vmnetworkFound = vMNetworkConfig.VMNetwork.VmNetworks.FirstOrDefault( nw => nw.Id == vMNetwork.Id); var vmnetworkMappigInfoFound = vMNetworkConfig.VMNetwork.VMNetworkMappingInformation.VMNetworkInfo.FirstOrDefault( nw => nw.VMNetworkID == vMNetwork.Id); if (vmnetworkMappigInfoFound == null) { return(needRefresh); } if (operationType != NetworkEntityPublishType.Delete) { vmnetworkMappigInfoFound.VMNetworkName = vMNetwork.Name; if (vmnetworkMappigInfoFound.VTNName.CompareTo(string.Empty) == 0) { return(needRefresh); } vmnetworkFound.OwnerName = vMNetwork.OwnerName; vmnetworkFound.RoutingDomainId = vMNetwork.RoutingDomainId; if (operationType == NetworkEntityPublishType.Create) { foreach (var subnetinfo in vmnetworkMappigInfoFound.VMSubnetInfo) { subnetinfo.VMSubnetName = subnetinfo.VBridgeName; subnetinfo.VMSubnetVlanId = subnetinfo.VBridgeVlanId; } Controller odl = new Controller(this.ConnectionString, this.Credential); List <Vtn> vtns = odl.ReadVTNObjects(vmnetworkMappigInfoFound.VTNName); if (vtns.Count == 0) { needRefresh = true; vMNetworkConfig.VMNetwork.VmNetworks.Remove(vmnetworkFound); vMNetworkConfig.VMNetwork.VMNetworkMappingInformation.VMNetworkInfo.Remove(vmnetworkMappigInfoFound); } if (vtns.Count != 0) { needRefresh = this.SyncVTN(vmnetworkFound.VMSubnets.First().LogicalNetworkDefinitionId, vmnetworkFound, vtns.First(), vmnetworkMappigInfoFound, txnMng, VtnHostName); } } vmnetworkMappigInfoFound.Description = string.Empty; } else { if (vmnetworkMappigInfoFound.VTNName.CompareTo(string.Empty) == 0) { vMNetworkConfig.VMNetwork.VMNetworkMappingInformation.VMNetworkInfo.Remove(vmnetworkMappigInfoFound); return(needRefresh); } vmnetworkMappigInfoFound.VMNetworkName = string.Empty; vmnetworkMappigInfoFound.VMSubnetInfo.ForEach(subnet => { subnet.VMSubnetName = string.Empty; subnet.VMSubnetVlanId = 0; }); vmnetworkMappigInfoFound.Description = "VM Network corresponding to this VTN is not created on SCVMM"; vmnetworkFound.Name = vmnetworkMappigInfoFound.VTNName; vmnetworkFound.RoutingDomainId = null; vmnetworkFound.OwnerName = string.Empty; } string output = "\"VMNetwork\":" + JavaScriptSerializer.Serialize(vmnetworkFound); string outputMappingInfo = "\"VMNetworkInfo\":" + JavaScriptSerializer.Serialize(vmnetworkMappigInfoFound); ODLVSEMETW.EventWriteEndLibrary(MethodBase.GetCurrentMethod().Name, output); return(needRefresh); }
/// <summary> /// Publish VM Network. /// </summary> /// <param name="txnMng">TransactionManager instance.</param> /// <param name="vMNetwork">VM Network.</param> /// <param name="operationType">Operation type performed on SCVMM.</param> /// <param name="connection">Connection object.</param> /// <returns>Boolean indicating whether network service refresh is needed..</returns> public bool PublishVMNetwork(TransactionManager txnMng, VMNetwork vMNetwork, NetworkEntityPublishType operationType, VSEMConnection connection) { bool needRefresh = false; var JavaScriptSerializer = new JavaScriptSerializer(); JavaScriptSerializer.MaxJsonLength = int.MaxValue; StringBuilder json = new StringBuilder("\"txnMng\":" + JavaScriptSerializer.Serialize(txnMng)); json.Append(" \"vMNetwork\":" + JavaScriptSerializer.Serialize(vMNetwork)); json.Append(" \"operationType\":" + JavaScriptSerializer.Serialize(operationType)); ODLVSEMETW.EventWriteStartLibrary(MethodBase.GetCurrentMethod().Name, json.ToString()); if (txnMng == null) { ODLVSEMETW.EventWriteArgumentError( MethodBase.GetCurrentMethod().DeclaringType.Name.ToString(), MethodBase.GetCurrentMethod().Name, "The parameter 'transaction' is null or invalid."); throw new ArgumentException("The parameter 'transaction' is null or invalid."); } if (vMNetwork == null) { ODLVSEMETW.EventWriteArgumentError( MethodBase.GetCurrentMethod().DeclaringType.Name.ToString(), MethodBase.GetCurrentMethod().Name, "The parameter 'vMNetwork' is null or invalid."); throw new ArgumentException("The parameter 'vMNetworkName' is null or invalid."); } if (connection == null) { ODLVSEMETW.EventWriteArgumentError( MethodBase.GetCurrentMethod().DeclaringType.Name.ToString(), MethodBase.GetCurrentMethod().Name, "The parameter 'connection' is null or invalid."); throw new ArgumentException("The parameter 'connection' is null or invalid."); } string VtnHostName = this.ConnectionString; if (VtnHostName.StartsWith(@"https://", StringComparison.Ordinal)) { VtnHostName = VtnHostName.Substring(8); } VtnHostName = VtnHostName.Split('.', ':').First(); var vMNetworkConfig = new VMNetworkConfig(VtnHostName); txnMng.SetConfigManager(vMNetworkConfig, TransactionManager.OpenMode.WriteMode); var vmnetworkFound = vMNetworkConfig.VMNetwork.VmNetworks.FirstOrDefault( nw => nw.Id == vMNetwork.Id); var vmnetworkMappigInfoFound = vMNetworkConfig.VMNetwork.VMNetworkMappingInformation.VMNetworkInfo.FirstOrDefault( nw => nw.VMNetworkID == vMNetwork.Id); if (vmnetworkMappigInfoFound == null) { return needRefresh; } if (operationType != NetworkEntityPublishType.Delete) { vmnetworkMappigInfoFound.VMNetworkName = vMNetwork.Name; if (vmnetworkMappigInfoFound.VTNName.CompareTo(string.Empty) == 0) { return needRefresh; } vmnetworkFound.OwnerName = vMNetwork.OwnerName; vmnetworkFound.RoutingDomainId = vMNetwork.RoutingDomainId; if (operationType == NetworkEntityPublishType.Create) { foreach (var subnetinfo in vmnetworkMappigInfoFound.VMSubnetInfo) { subnetinfo.VMSubnetName = subnetinfo.VBridgeName; subnetinfo.VMSubnetVlanId = subnetinfo.VBridgeVlanId; } Controller odl = new Controller(this.ConnectionString, this.Credential); List<Vtn> vtns = odl.ReadVTNObjects(vmnetworkMappigInfoFound.VTNName); if (vtns.Count == 0) { needRefresh = true; vMNetworkConfig.VMNetwork.VmNetworks.Remove(vmnetworkFound); vMNetworkConfig.VMNetwork.VMNetworkMappingInformation.VMNetworkInfo.Remove(vmnetworkMappigInfoFound); } if (vtns.Count != 0) { needRefresh = this.SyncVTN(vmnetworkFound.VMSubnets.First().LogicalNetworkDefinitionId, vmnetworkFound, vtns.First(), vmnetworkMappigInfoFound, txnMng, VtnHostName); } } vmnetworkMappigInfoFound.Description = string.Empty; } else { if (vmnetworkMappigInfoFound.VTNName.CompareTo(string.Empty) == 0) { vMNetworkConfig.VMNetwork.VMNetworkMappingInformation.VMNetworkInfo.Remove(vmnetworkMappigInfoFound); return needRefresh; } vmnetworkMappigInfoFound.VMNetworkName = string.Empty; vmnetworkMappigInfoFound.VMSubnetInfo.ForEach(subnet => { subnet.VMSubnetName = string.Empty; subnet.VMSubnetVlanId = 0; }); vmnetworkMappigInfoFound.Description = "VM Network corresponding to this VTN is not created on SCVMM"; vmnetworkFound.Name = vmnetworkMappigInfoFound.VTNName; vmnetworkFound.RoutingDomainId = null; vmnetworkFound.OwnerName = string.Empty; } string output = "\"VMNetwork\":" + JavaScriptSerializer.Serialize(vmnetworkFound); string outputMappingInfo = "\"VMNetworkInfo\":" + JavaScriptSerializer.Serialize(vmnetworkMappigInfoFound); ODLVSEMETW.EventWriteEndLibrary(MethodBase.GetCurrentMethod().Name, output); return needRefresh; }