/// <summary> /// Overload this method to allow different seed node types. /// TODO: refactor to combine the two methods /// </summary> /// <param name="security"></param> /// <param name="existingClusterManifest"></param> /// <param name="nodeTypes"></param> /// <param name="currentFabricSettingsMetadata"></param> /// <param name="clusterManifestVersion"></param> /// <returns></returns> private ClusterManifestType UpdateClusterManifest( Security security, ClusterManifestType existingClusterManifest, IEnumerable <ClusterManifestTypeNodeType> nodeTypes, FabricSettingsMetadata currentFabricSettingsMetadata, string clusterManifestVersion, List <NodeDescription> existingSeedNodes) { CertificateDescription thumbprintClusterCert; List <string> thumbprintClusterCertList; ServerCertificateCommonNames commonNameClusterCert; Dictionary <string, string> commonNameClusterCertList; this.GetClusterCertConfig( security, out thumbprintClusterCert, out thumbprintClusterCertList, out commonNameClusterCert, out commonNameClusterCertList); return(this.UpdateClusterManifest( security, existingClusterManifest, nodeTypes, currentFabricSettingsMetadata, clusterManifestVersion, thumbprintClusterCert, thumbprintClusterCertList, commonNameClusterCert, commonNameClusterCertList, existingSeedNodes)); }
protected FabricSettingsGeneratorBase CreateFabricSettingsGenerator( IUserConfig inputTargetUserConfig, IAdminConfig inputTargetAdminConfig, ClusterManifestGeneratorSettings inputClusterManifestGeneratorSettings, FabricSettingsMetadata currentFabricSettingsMetadata, ClusterManifestType existingClusterManifest) { if (this.TargetCsmConfig.IsLinuxVM) { return(this.FabricSettingsActivator.CreateLinuxSettingsGenerator(inputTargetUserConfig, inputTargetAdminConfig, currentFabricSettingsMetadata, existingClusterManifest, inputClusterManifestGeneratorSettings, this.TraceLogger)); } else { return(this.FabricSettingsActivator.CreateWindowsSettingsGenerator(inputTargetUserConfig, inputTargetAdminConfig, currentFabricSettingsMetadata, existingClusterManifest, inputClusterManifestGeneratorSettings, this.TraceLogger)); } }
public SettingsValidator( IUserConfig clusterProperties, FabricSettingsMetadata fabricSettingsMetadata, IDictionary <string, HashSet <string> > requiredParameters, ClusterManifestGeneratorSettings clusterManifestGeneratorSettings) { clusterProperties.MustNotBeNull("clusterProperties"); requiredParameters.MustNotBeNull("fabricSettingsMetadata"); requiredParameters.MustNotBeNull("requiredParameters"); this.clusterProperties = clusterProperties; this.fabricSettingsMetadata = fabricSettingsMetadata; this.clusterManifestGeneratorSettings = clusterManifestGeneratorSettings; this.requiredParameters = new Dictionary <string, HashSet <string> >( requiredParameters, StringComparer.OrdinalIgnoreCase); }
/// <summary> /// Overload this method to allow different seed node types. /// TODO: refactor to combine the two methods /// </summary> /// <param name="security"></param> /// <param name="existingClusterManifest"></param> /// <param name="nodeTypes"></param> /// <param name="currentFabricSettingsMetadata"></param> /// <param name="clusterManifestVersion"></param> /// <returns></returns> private ClusterManifestType UpdateClusterManifest( Security security, ClusterManifestType existingClusterManifest, IEnumerable <ClusterManifestTypeNodeType> nodeTypes, FabricSettingsMetadata currentFabricSettingsMetadata, string clusterManifestVersion, CertificateDescription thumbprintFileStoreCert, List <string> thumbprintWhiteList, ServerCertificateCommonNames commonNameFileStoreCert, Dictionary <string, string> commonNameWhiteList, List <NodeDescription> existingSeedNodes) { FabricSettingsGeneratorBase fabricSettingsGenerator = this.CreateFabricSettingsGenerator( this.TargetCsmConfig, this.TargetWrpConfig, this.ClusterManifestGeneratorSettings, currentFabricSettingsMetadata, existingClusterManifest); var fabricSettings = fabricSettingsGenerator.GenerateFabricSettings( security, thumbprintFileStoreCert, thumbprintWhiteList, commonNameFileStoreCert, commonNameWhiteList); var primaryNodesTypes = this.TargetCsmConfig.NodeTypes.Where(nodeType => nodeType.IsPrimary); var updatedCluterManifest = new ClusterManifestType { FabricSettings = fabricSettings, Infrastructure = this.OnGetInfrastructure(this.Topology, existingSeedNodes, nodeTypes), NodeTypes = nodeTypes.ToArray(), Name = StringConstants.ClusterManifestName, Version = clusterManifestVersion, Description = GeneratedCluterManifestDescription }; this.SortClusterManifest(updatedCluterManifest); return(updatedCluterManifest); }
protected ClusterManifestType UpdateClusterManifest( Security security, ClusterManifestType existingClusterManifest, List <PaaSVoteType> seedNodes, IEnumerable <ClusterManifestTypeNodeType> nodeTypes, IEnumerable <PaaSRoleType> roles, FabricSettingsMetadata currentFabricSettingsMetadata, string clusterManifestVersion) { FabricSettingsGeneratorBase fabricSettingsGenerator = this.CreateFabricSettingsGenerator( this.TargetCsmConfig, this.TargetWrpConfig, this.ClusterManifestGeneratorSettings, currentFabricSettingsMetadata, existingClusterManifest); var fabricSettings = fabricSettingsGenerator.GenerateFabricSettings(security); var updatedCluterManifest = new ClusterManifestType { FabricSettings = fabricSettings, Infrastructure = new ClusterManifestTypeInfrastructure() { Item = new ClusterManifestTypeInfrastructurePaaS() { Roles = roles.ToArray(), Votes = seedNodes.ToArray() } }, NodeTypes = nodeTypes.ToArray(), Name = StringConstants.ClusterManifestName, Version = clusterManifestVersion, Description = GeneratedCluterManifestDescription }; this.SortClusterManifest(updatedCluterManifest); return(updatedCluterManifest); }
private ClusterManifestType UpdateClusterManifest( ClusterManifestType existingClusterManifest, FabricSettingsMetadata currentFabricSettingsMetadata, string clusterManifestVersion, CertificateClusterUpgradeStep step, List <NodeDescription> existingSeedNodes) { Security nodeTypeSecurity = this.TargetCsmConfig.Security.Clone(); nodeTypeSecurity.CertificateInformation.ClusterCertificate = step.ThumbprintLoadList; nodeTypeSecurity.CertificateInformation.ClusterCertificateCommonNames = step.CommonNameLoadList; return(this.UpdateClusterManifest( this.TargetCsmConfig.Security, existingClusterManifest, this.GetNodeTypes(this.TargetCsmConfig.NodeTypes, nodeTypeSecurity), currentFabricSettingsMetadata, clusterManifestVersion, step.ThumbprintFileStoreSvcList, step.ThumbprintWhiteList, step.CommonNameFileStoreSvcList, step.CommonNameWhiteList, existingSeedNodes)); }
public ClusterManifestType[] UpdateCertificateInClusterManifest( ClusterManifestType existingClusterManifest, Security currentSecurity, FabricSettingsMetadata currentFabricSettingsMetadata) { List <NodeDescription> existingSeedNodes = this.OnGetExistingSeedNodes(existingClusterManifest); List <CertificateClusterUpgradeStep> upgradeSteps = CertificateClusterUpgradeFlow.GetUpgradeFlow( currentSecurity.CertificateInformation, this.TargetCsmConfig.Security.CertificateInformation); ClusterManifestType[] result = new ClusterManifestType[upgradeSteps.Count]; for (int i = 0; i < upgradeSteps.Count; i++) { result[i] = this.UpdateClusterManifest( i == 0 ? existingClusterManifest : result[i - 1], currentFabricSettingsMetadata, this.VersionGenerator.GetNextClusterManifestVersion(), upgradeSteps[i], existingSeedNodes); } return(result); }
// This method returns null if enough nodes are not available // This method returns empty array if no upgrade is required public virtual ClusterManifestType[] UpdateSeedNodesInClusterManifest( ClusterManifestType existingClusterManifest, FabricSettingsMetadata currentFabricSettingsMetadata, List <string> disabledNodes, List <string> removedNodes) { var primaryNodeTypes = this.TargetCsmConfig.NodeTypes.Where(nodeType => nodeType.IsPrimary); var existingSeedNodes = ((ClusterManifestTypeInfrastructurePaaS)existingClusterManifest.Infrastructure.Item).Votes.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); var roles = this.TargetCsmConfig.NodeTypes.Select(nodeType => nodeType.ToPaaSRoleType()); List <ClusterManifestType> clusterManifests = new List <ClusterManifestType>(); if (seedNodesAdded != null) { foreach (var seedNodeToAdd in seedNodesAdded) { existingSeedNodes.Add(this.ToPaaSVoteType(seedNodeToAdd, nodeTypes)); var clusterManifest = this.UpdateClusterManifest( this.TargetCsmConfig.Security, existingClusterManifest, existingSeedNodes, nodeTypes, roles, currentFabricSettingsMetadata, this.VersionGenerator.GetNextClusterManifestVersion()); clusterManifests.Add(clusterManifest); } } if (seedNodesRemoved != null) { foreach (var seedNodeToRemove in seedNodesRemoved) { // Remove the seedNode from existingSeedNodes existingSeedNodes = new List <PaaSVoteType>( existingSeedNodes.Where(existingSeedNode => existingSeedNode.NodeName != seedNodeToRemove.NodeName)); var clusterManifest = this.UpdateClusterManifest( this.TargetCsmConfig.Security, existingClusterManifest, existingSeedNodes, nodeTypes, roles, currentFabricSettingsMetadata, this.VersionGenerator.GetNextClusterManifestVersion()); clusterManifests.Add(clusterManifest); } } // returns empty array if no upgrade is required return(clusterManifests.ToArray()); }
public ClusterManifestType UpdateClusterManifest(ClusterManifestType existingClusterManifest, FabricSettingsMetadata currentFabricSettingsMetadata) { List <NodeDescription> existingSeedNodes = this.OnGetExistingSeedNodes(existingClusterManifest); Security security = this.TargetCsmConfig.Security; CertificateDescription thumbprintClusterCert; List <string> thumbprintClusterCertList; ServerCertificateCommonNames commonNameClusterCert; Dictionary <string, string> commonNameClusterCertList; this.GetClusterCertConfig( security, out thumbprintClusterCert, out thumbprintClusterCertList, out commonNameClusterCert, out commonNameClusterCertList); return(this.UpdateClusterManifest( security, existingClusterManifest, this.GetNodeTypes(this.TargetCsmConfig.NodeTypes, security), currentFabricSettingsMetadata, this.VersionGenerator.GetNextClusterManifestVersion(), thumbprintClusterCert, thumbprintClusterCertList, commonNameClusterCert, commonNameClusterCertList, existingSeedNodes)); }