public FabricSettingsGeneratorBase CreateLinuxSettingsGenerator( IUserConfig targetCsmConfig, IAdminConfig targetWrpConfig, FabricSettingsMetadata settingsMetadata, ClusterManifestType existingClusterManifest, ClusterManifestGeneratorSettings clusterManifestGeneratorSettings, ITraceLogger traceLogger) { throw new System.NotImplementedException(); }
public FabricSettingsMetadata GetFabricSettingsMetadata() { //// Extract Configuration if (this.fabricSettingsMetadata2 == null) { string fabricSettingFilePath = StandaloneUtility.FindFabricResourceFile(DMConstants.ConfigurationsFileName); this.fabricSettingsMetadata2 = FabricSettingsMetadata.Create(fabricSettingFilePath); } return(this.fabricSettingsMetadata2); }
public StandaloneAdminConfig( FabricSettingsMetadata fabricSettingsMetadata, StandAloneClusterManifestSettings standAloneClusterManifestSettings, AdminConfigVersion version, bool isUserSet) { this.fabricSettingsMetadata = fabricSettingsMetadata; this.Version = version; this.standAloneClusterManifestSettings = standAloneClusterManifestSettings; this.IsUserSet = isUserSet; }
public MockupFabricSettingsGenerator( string clusterIdOrName, IUserConfig targetCsmConfig, IAdminConfig targetWrpConfig, FabricSettingsMetadata settingsMetadata, ClusterManifestType existingClusterManifest, ClusterManifestGeneratorSettings clusterManifestGeneratorSettings, ITraceLogger traceLogger) : base(clusterIdOrName, targetCsmConfig, targetWrpConfig, settingsMetadata, existingClusterManifest, clusterManifestGeneratorSettings, traceLogger) { }
internal static void UpdateStandAloneClusterWRPSettings(string clusterSettingsFilePath, string version, StandAloneCluster existingCluster) { string fabricSettingFilePath = StandaloneUtility.FindFabricResourceFile("Configurations.csv"); FabricSettingsMetadata fabricSettingsMetadata = FabricSettingsMetadata.Create(fabricSettingFilePath); AdminConfigVersion adminConfigVersion = new AdminConfigVersion("Baseline", version); StandAloneClusterManifestSettings standAloneClusterManifestSettings = JsonConvert.DeserializeObject <StandAloneClusterManifestSettings>( File.ReadAllText(clusterSettingsFilePath)); existingCluster.TargetWrpConfig = new StandaloneAdminConfig(fabricSettingsMetadata, standAloneClusterManifestSettings, adminConfigVersion, false); }
public void RepairManagerDefinitionTest() { string configCsvPath = Path.Combine(Utility.TestDirectory, "Configurations.csv"); FabricSettingsMetadata metadata = FabricSettingsMetadata.Create(configCsvPath); ConfigDescription desc = null; metadata.TryGetConfigDescription(StringConstants.SectionName.RepairManager, StringConstants.ParameterName.TargetReplicaSetSize, out desc); Assert.AreEqual(desc.DefaultValue, "0"); Assert.AreEqual(desc.UpgradePolicy, UpgradePolicy.SingleChange); metadata.TryGetConfigDescription(StringConstants.SectionName.RepairManager, StringConstants.ParameterName.MinReplicaSetSize, out desc); Assert.AreEqual(desc.DefaultValue, "0"); Assert.AreEqual(desc.UpgradePolicy, UpgradePolicy.SingleChange); }
public MockupAdminConfig(bool isUserSet = false) { string fabricSettingFilePath = Utility.FindFabricResourceFile(Constant.ConfigurationsFileName); this.fabricSettingsMetadata = FabricSettingsMetadata.Create(fabricSettingFilePath); string clusterSettingsFilePath = this.GetClusterSettingsFilePath(); // Extract Cluster Settings // ReSharper disable once AssignNullToNotNullAttribute - fabric Code Path cannot be null here. this.Version = new AdminConfigVersion("Baseline", "Baseline"); this.mockupClusterManifestSettings = JsonConvert.DeserializeObject <MockupClusterManifestSettings>( File.ReadAllText(clusterSettingsFilePath)); this.IsUserSet = isUserSet; }
public StandAloneFabricSettingsGenerator( string clusterIdOrName, IUserConfig targetCsmConfig, IAdminConfig targetWrpConfig, FabricSettingsMetadata settingsMetadata, ClusterManifestType existingClusterManifest, ClusterManifestGeneratorSettings clusterManifestGeneratorSettings, ITraceLogger traceLogger, string currentPrimaryAccountNtlmPassword, string currentSecondaryAccountNtlmPassword, string currentCommonNameNtlmPassword) : base(clusterIdOrName, targetCsmConfig, targetWrpConfig, settingsMetadata, existingClusterManifest, clusterManifestGeneratorSettings, traceLogger) { this.currentPrimaryAccountNtlmPassword = currentPrimaryAccountNtlmPassword; this.currentSecondaryAccountNtlmPassword = currentSecondaryAccountNtlmPassword; this.currentCommonNameNtlmPassword = currentCommonNameNtlmPassword; }
public FabricSettingsGeneratorBase CreateWindowsSettingsGenerator( IUserConfig targetCsmConfig, IAdminConfig targetWrpConfig, FabricSettingsMetadata settingsMetadata, ClusterManifestType existingClusterManifest, ClusterManifestGeneratorSettings clusterManifestGeneratorSettings, ITraceLogger traceLogger) { return(new MockupFabricSettingsGenerator( "acf4dc93-9b64-4504-8b6f-0b7fd052e096", targetCsmConfig, targetWrpConfig, settingsMetadata, existingClusterManifest, clusterManifestGeneratorSettings, traceLogger)); }
public StandaloneAdminConfig(string configurationsFilePath = null, bool isUserSet = false) { //// Extract Configuration string fabricSettingFilePath = string.IsNullOrEmpty(configurationsFilePath) ? StandaloneUtility.FindFabricResourceFile(DMConstants.ConfigurationsFileName) : configurationsFilePath; this.fabricSettingsMetadata = FabricSettingsMetadata.Create(fabricSettingFilePath); string clusterSettingsFilePath = this.GetClusterSettingsFilePath(); // Extract Cluster Settings // ReSharper disable once AssignNullToNotNullAttribute - fabric Code Path cannot be null here. this.Version = new AdminConfigVersion("Baseline", "Baseline"); this.standAloneClusterManifestSettings = JsonConvert.DeserializeObject <StandAloneClusterManifestSettings>( File.ReadAllText(clusterSettingsFilePath)); this.IsUserSet = isUserSet; }
public FabricSettingsGeneratorBase CreateWindowsSettingsGenerator( IUserConfig targetCsmConfig, IAdminConfig targetWrpConfig, FabricSettingsMetadata settingsMetadata, ClusterManifestType existingClusterManifest, ClusterManifestGeneratorSettings clusterManifestGeneratorSettings, ITraceLogger traceLogger) { return(new StandAloneFabricSettingsGenerator( this.clusterId, targetCsmConfig, targetWrpConfig, settingsMetadata, existingClusterManifest, clusterManifestGeneratorSettings, traceLogger, this.currentPrimaryAccountNtlmPassword, this.currentSecondaryAccountNtlmPassword, this.currentCommonNameNtlmPassword)); }
public override ClusterManifestType[] UpdateSeedNodesInClusterManifest( ClusterManifestType existingClusterManifest, FabricSettingsMetadata currentFabricSettingsMetadata, List <string> disabledNodes, List <string> removedNodes) { var primaryNodeTypes = this.TargetCsmConfig.NodeTypes.Where(nodeType => nodeType.IsPrimary); var existingSeedNodes = ((ClusterManifestTypeInfrastructureWindowsServer)existingClusterManifest.Infrastructure.Item).NodeList.Where(item => item.IsSeedNode == true).ToList(); List <NodeDescription> seedNodesAdded; List <NodeDescription> seedNodesRemoved; if (!this.TryUpdateSeedNodes( primaryNodeTypes, existingSeedNodes, disabledNodes, removedNodes, out seedNodesAdded, out seedNodesRemoved)) { // returns null if enough nodes are not available return(null); } var nodeTypes = this.GetNodeTypes(this.TargetCsmConfig.NodeTypes, this.TargetCsmConfig.Security); List <ClusterManifestType> clusterManifests = new List <ClusterManifestType>(); if (seedNodesAdded.Count() > 0) { List <NodeDescription> nonSeedNodesAdded; // We allow the scenario to add seednode and non-seednode at the same time. If without reliability level change, it will go through SimpleClusterUpgrade // which will handle the addition of both. If there is reliability level change, we need to take the addition of non seed node here. To add them only in the // generated clusterManifest[0]. // Find the added non seed node. If the node in topology is neither in existing infrastructure not in seedNodesAdded, it's a non seed node to add. nonSeedNodesAdded = this.Topology.Nodes.Where(node => !((ClusterManifestTypeInfrastructureWindowsServer)existingClusterManifest.Infrastructure.Item).NodeList.Select(n => n.NodeName).Contains(node.Key) && !seedNodesAdded.Select(s => s.NodeName).Contains(node.Key)).Select(kvp => kvp.Value).ToList(); foreach (var seedNodeToAdd in seedNodesAdded) { existingSeedNodes.Add(seedNodeToAdd.ToFabricNodeType()); var clusterManifest = this.UpdateClusterManifest( this.TargetCsmConfig.Security, clusterManifests.Count == 0 ? existingClusterManifest : clusterManifests[clusterManifests.Count - 1], existingSeedNodes, seedNodeToAdd, nonSeedNodesAdded, true, nodeTypes, currentFabricSettingsMetadata, this.VersionGenerator.GetNextClusterManifestVersion()); nonSeedNodesAdded.Clear(); clusterManifests.Add(clusterManifest); } } if (seedNodesRemoved.Count() > 0) { List <NodeDescription> nonSeedNodesRemoved; // Find the removed non seed node. If the node in existing infrastructure is neither in topology nor in seedNodesRemoved, it's a non seed node to remove. var nonSeedNodesRemovedNodeType = ((ClusterManifestTypeInfrastructureWindowsServer)existingClusterManifest.Infrastructure.Item).NodeList.Where(node => !this.Topology.Nodes.Select(n => n.Key).Contains(node.NodeName) && !seedNodesRemoved.Select(s => s.NodeName).Contains(node.NodeName)).ToList(); nonSeedNodesRemoved = new List <NodeDescription>(); if (nonSeedNodesRemovedNodeType.Count() > 0) { foreach (var n in nonSeedNodesRemovedNodeType) { var node = new NodeDescription() { FaultDomain = n.FaultDomain, IPAddress = n.IPAddressOrFQDN, NodeName = n.NodeName, NodeTypeRef = n.NodeTypeRef, UpgradeDomain = n.UpgradeDomain }; nonSeedNodesRemoved.Add(node); } } foreach (var seedNodeToRemove in seedNodesRemoved) { // Remove the seedNode from existingSeedNodes existingSeedNodes = new List <FabricNodeType>( existingSeedNodes.Where(existingSeedNode => existingSeedNode.NodeName != seedNodeToRemove.NodeName)); var clusterManifest = this.UpdateClusterManifest( this.TargetCsmConfig.Security, clusterManifests.Count == 0 ? existingClusterManifest : clusterManifests[clusterManifests.Count - 1], existingSeedNodes, seedNodeToRemove, nonSeedNodesRemoved, false, nodeTypes, currentFabricSettingsMetadata, this.VersionGenerator.GetNextClusterManifestVersion()); nonSeedNodesRemoved.Clear(); clusterManifests.Add(clusterManifest); } } // returns empty array if no upgrade is required return(clusterManifests.ToArray()); }
protected ClusterManifestType UpdateClusterManifest( Security security, ClusterManifestType existingClusterManifest, List <FabricNodeType> seedNodes, NodeDescription seedNodeChanged, List <NodeDescription> nonSeedNodeChanged, bool isSeedNodeToAdd, IEnumerable <ClusterManifestTypeNodeType> nodeTypes, FabricSettingsMetadata currentFabricSettingsMetadata, string clusterManifestVersion) { FabricSettingsGeneratorBase fabricSettingsGenerator = this.CreateFabricSettingsGenerator( this.TargetCsmConfig, this.TargetWrpConfig, this.ClusterManifestGeneratorSettings, currentFabricSettingsMetadata, existingClusterManifest); var originalNodeList = ((ClusterManifestTypeInfrastructureWindowsServer)existingClusterManifest.Infrastructure.Item).NodeList; List <FabricNodeType> nodelist = new List <FabricNodeType>(); foreach (var n in originalNodeList) { nodelist.Add(new FabricNodeType { FaultDomain = n.FaultDomain, IPAddressOrFQDN = n.IPAddressOrFQDN, IsSeedNode = n.IsSeedNode, NodeName = n.NodeName, NodeTypeRef = n.NodeTypeRef, UpgradeDomain = n.UpgradeDomain }); } var fabricSettings = fabricSettingsGenerator.GenerateFabricSettings(security, nodelist.Count()); if (isSeedNodeToAdd) { var hasNodeListAlreadyContainedThisSeedNode = originalNodeList.Select(node => node.NodeName).Contains(seedNodeChanged.NodeName); if (!hasNodeListAlreadyContainedThisSeedNode) { nodelist.Add(seedNodeChanged.ToFabricNodeType()); } if (nonSeedNodeChanged.Count > 0) { foreach (var nonSeedNodeAdded in nonSeedNodeChanged) { nodelist.Add(nonSeedNodeAdded.ToFabricNodeType()); } } } else { nodelist.Where(n => n.NodeName.Equals(seedNodeChanged.NodeName)).FirstOrDefault().IsSeedNode = false; if (nonSeedNodeChanged.Count > 0) { foreach (var nonSeedNodeRemoved in nonSeedNodeChanged) { nodelist = nodelist.Where(n => !nonSeedNodeRemoved.NodeName.Equals(n.NodeName)).ToList(); } } } // Set ExpectedNodeDeactivationDuration section in FailoverManager to 2 days. Deactivating node in seed node removal // could take a lot of intermediate seed node changing upgrades. This is to prevent deactivate node timeout. // TODO Chrissie: When the seed node removal causing the intermediate seed node shift bug is fixed, remove this parameter from add node scenario. var failoverManagerSettings = fabricSettings.FirstOrDefault(setting => setting.Name.Equals(StringConstants.SectionName.FailoverManager, StringComparison.OrdinalIgnoreCase)); TimeSpan totalSeconds = TimeSpan.FromSeconds(120 * 60 * 24); double defaultNodeDeactivationDuration = totalSeconds.TotalSeconds; var expectedNodeDeactivationDurationParameter = failoverManagerSettings.Parameter.FirstOrDefault( param => param.Name.Equals(StringConstants.ParameterName.ExpectedNodeDeactivationDuration, StringComparison.OrdinalIgnoreCase)); if (expectedNodeDeactivationDurationParameter != null) { expectedNodeDeactivationDurationParameter.Value = defaultNodeDeactivationDuration.ToString(); } else { int originalParamCount = failoverManagerSettings.Parameter.Count(); SettingsOverridesTypeSectionParameter[] newFailoverManagerSection = new SettingsOverridesTypeSectionParameter[originalParamCount + 1]; Array.Copy(failoverManagerSettings.Parameter, newFailoverManagerSection, originalParamCount); newFailoverManagerSection[originalParamCount] = new SettingsOverridesTypeSectionParameter() { Name = StringConstants.ParameterName.ExpectedNodeDeactivationDuration, Value = defaultNodeDeactivationDuration.ToString() }; failoverManagerSettings.Parameter = newFailoverManagerSection; } var seedNodeNames = seedNodes.Select(item => item.NodeName); foreach (var node in nodelist) { node.IsSeedNode = seedNodeNames.Contains(node.NodeName); } var updatedCluterManifest = new ClusterManifestType { FabricSettings = fabricSettings, Infrastructure = new ClusterManifestTypeInfrastructure() { Item = new ClusterManifestTypeInfrastructureWindowsServer() { NodeList = nodelist.ToArray() } }, NodeTypes = nodeTypes.ToArray(), Name = StringConstants.ClusterManifestName, Version = clusterManifestVersion, Description = GeneratedCluterManifestDescription }; this.SortClusterManifest(updatedCluterManifest); return(updatedCluterManifest); }
public FabricSettingsMetadata GetFabricSettingsMetadata() { string fabricSettingFilePath = Utility.FindFabricResourceFile(Constant.ConfigurationsFileName); return(FabricSettingsMetadata.Create(fabricSettingFilePath)); }