public static List <AmClusterResource> ConfigureIPv6AutoCfgResources(ILogTraceHelper logger, AmClusterGroup group, string[] ipv6Networks) { bool flag = false; Dictionary <string, AmClusterResource> dictionary = new Dictionary <string, AmClusterResource>(8); Dictionary <string, AmClusterNetwork> dictionary2 = null; AmClusterResource[] array = null; List <AmClusterResource> list = new List <AmClusterResource>(10); List <AmClusterResource> list2 = null; try { logger = (logger ?? NullLogTraceHelper.GetNullLogger()); dictionary2 = AmClusterResourceHelper.GetIpv6AutoCfgNetworkMap(group.OwningCluster, ipv6Networks); IEnumerable <AmClusterResource> source = group.EnumerateResourcesOfType("IPv6 Address"); if (source.Count <AmClusterResource>() > 0) { array = source.ToArray <AmClusterResource>(); } if (array != null) { foreach (string key in ipv6Networks) { for (int j = 0; j < array.Length; j++) { AmClusterResource amClusterResource = array[j]; string privateProperty = amClusterResource.GetPrivateProperty <string>("Network"); AmClusterNetwork amClusterNetwork = dictionary2[key]; if (SharedHelper.StringIEquals(amClusterNetwork.Name, privateProperty)) { logger.AppendLogMessage("Reusing ipv6 resource because its network is matching. (resource:{0}, network:{1}/{2}", new object[] { amClusterResource.Name, privateProperty, amClusterNetwork.Name }); dictionary[key] = amClusterResource; array[j] = null; break; } } } } if (dictionary.Count < ipv6Networks.Length) { int num = 1; foreach (string text in ipv6Networks) { if (!dictionary.ContainsKey(text)) { AmClusterResource amClusterResource = (AmClusterResource)group.CreateUniqueResource(logger, "IPv6 Auto Config Address", "IPv6 Address", ref num); list.Add(amClusterResource); logger.AppendLogMessage("Created new ipv6 resource. (resource:{0}, network:{1})", new object[] { amClusterResource.Name, text }); dictionary[text] = amClusterResource; } } } list2 = new List <AmClusterResource>(ipv6Networks.Length); foreach (string key2 in ipv6Networks) { AmClusterResource amClusterResource = dictionary[key2]; AmClusterNetwork amClusterNetwork = dictionary2[key2]; logger.AppendLogMessage("ConfigureIPv6AutoCfgResources: Setting resource '{0}' to be on network '{1}' (role={2}).", new object[] { amClusterResource.Name, amClusterNetwork.Name, amClusterNetwork.GetNativeRole() }); amClusterResource.SetPrivateProperty <string>("Network", amClusterNetwork.Name); AmClusterResourceHelper.SetPossibleOwnersForIpResource(logger, amClusterResource); list2.Add(amClusterResource); } flag = true; } finally { if (!flag) { SharedHelper.DisposeObjectList <AmClusterResource>(list); } SharedHelper.DisposeObjectList <AmClusterResource>(array); if (dictionary2 != null) { SharedHelper.DisposeObjectList <AmClusterNetwork>(dictionary2.Values); } } return(list2); }
public static List <AmClusterResource> ConfigureIPv4DhcpResources(ILogTraceHelper logger, AmClusterGroup group, string[] ipv4Networks) { bool flag = false; Dictionary <string, AmClusterResource> dictionary = new Dictionary <string, AmClusterResource>(8); Dictionary <string, AmClusterNetwork> dictionary2 = null; AmClusterResource[] array = null; List <AmClusterResource> list = new List <AmClusterResource>(10); List <AmClusterResource> list2 = new List <AmClusterResource>(10); List <AmClusterResource> list3 = null; try { logger = (logger ?? NullLogTraceHelper.GetNullLogger()); dictionary2 = AmClusterResourceHelper.GetIpv4DhcpNetworkMap(group.OwningCluster, ipv4Networks); IEnumerable <AmClusterResource> enumerable = group.EnumerateResourcesOfType("IP Address"); if (enumerable != null) { array = enumerable.ToArray <AmClusterResource>(); for (int i = 0; i < array.Length; i++) { AmClusterResource amClusterResource = array[i]; if (amClusterResource.GetPrivateProperty <int>("EnableDhcp") != 0) { list.Add(amClusterResource); array[i] = null; } } } foreach (string key in ipv4Networks) { for (int k = 0; k < list.Count; k++) { AmClusterResource amClusterResource2 = list[k]; string privateProperty = amClusterResource2.GetPrivateProperty <string>("Network"); AmClusterNetwork amClusterNetwork = dictionary2[key]; if (SharedHelper.StringIEquals(amClusterNetwork.Name, privateProperty)) { logger.AppendLogMessage("Reusing ipv4 dhcp resource because its network is matching. (resource:{0}, network:{1}/{2}", new object[] { amClusterResource2.Name, privateProperty, amClusterNetwork.Name }); dictionary[key] = amClusterResource2; list[k] = null; break; } } } if (dictionary.Count < ipv4Networks.Length) { int num = 1; foreach (string text in ipv4Networks) { if (!dictionary.ContainsKey(text)) { AmClusterResource amClusterResource2 = (AmClusterResource)group.CreateUniqueResource(logger, "IPv4 DHCP Address", "IP Address", ref num); list2.Add(amClusterResource2); logger.AppendLogMessage("Created new ipv4 dhcp resource. (resource:{0}, network:{1})", new object[] { amClusterResource2.Name, text }); dictionary[text] = amClusterResource2; } } } list3 = new List <AmClusterResource>(ipv4Networks.Length); foreach (string key2 in ipv4Networks) { AmClusterResource amClusterResource2 = dictionary[key2]; AmClusterNetwork amClusterNetwork = dictionary2[key2]; int num2; using (AmClusterPropListDisposable amClusterPropListDisposable = AmClusPropListMaker.CreatePropListInt("EnableDhcp", 1, out num2)) { using (AmClusterPropListDisposable amClusterPropListDisposable2 = AmClusPropListMaker.DupeAndAppendPropListString(amClusterPropListDisposable.RawBuffer, (int)amClusterPropListDisposable.BufferSize, "Network", amClusterNetwork.Name, out num2)) { logger.AppendLogMessage("ConfigureIPv4DhcpResources: Setting resource '{0}' to be DHCP-enabled on network '{1}' (role={2}).", new object[] { amClusterResource2.Name, amClusterNetwork.Name, amClusterNetwork.GetNativeRole() }); amClusterResource2.SetPrivatePropertyList(amClusterPropListDisposable2); } } AmClusterResourceHelper.SetPossibleOwnersForIpResource(logger, amClusterResource2); list3.Add(amClusterResource2); } flag = true; } finally { if (!flag) { SharedHelper.DisposeObjectList <AmClusterResource>(list2); } SharedHelper.DisposeObjectList <AmClusterResource>(array); SharedHelper.DisposeObjectList <AmClusterResource>(list); if (dictionary2 != null) { SharedHelper.DisposeObjectList <AmClusterNetwork>(dictionary2.Values); } } return(list3); }