Ejemplo n.º 1
0
        /// <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));
        }
Ejemplo n.º 2
0
 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));
     }
 }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        /// <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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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));
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        // 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());
        }
Ejemplo n.º 9
0
        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));
        }