public StandAloneInstallerJSONModelOctober2017(IUserConfig config, IClusterTopology topology, string configurationVersion)
     : base(config, topology, configurationVersion)
 {
     this.ApiVersion = StandAloneInstallerJSONModelOctober2017.ModelApiVersion;
     this.Properties = new PropertyOctober2017();
     this.Properties.UpdateFromUserConfig(config);
 }
Ejemplo n.º 2
0
        protected override ClusterManifestTypeInfrastructure OnGetInfrastructure(IClusterTopology topology, IEnumerable <NodeDescription> seedNodes, IEnumerable <ClusterManifestTypeNodeType> nodeTypes)
        {
            var serverInfra = new ClusterManifestTypeInfrastructureWindowsServer {
                NodeList = new FabricNodeType[topology.Nodes.Count]
            };
            int index = 0;
            var distinctIpAddreses = new HashSet <string>();

            foreach (var node in topology.Nodes.Values)
            {
                serverInfra.NodeList[index] = new FabricNodeType()
                {
                    NodeName        = node.NodeName,
                    FaultDomain     = node.FaultDomain,
                    UpgradeDomain   = node.UpgradeDomain,
                    IPAddressOrFQDN = node.IPAddress,
                    IsSeedNode      = seedNodes.Any(seedNode => string.Equals(seedNode.NodeName, node.NodeName, StringComparison.OrdinalIgnoreCase)),
                    NodeTypeRef     = node.NodeTypeRef
                };
                distinctIpAddreses.Add(node.IPAddress);
                index++;
            }

            if (distinctIpAddreses.Count < topology.Nodes.Count)
            {
                serverInfra.IsScaleMin = true;
            }

            return(new ClusterManifestTypeInfrastructure()
            {
                Item = serverInfra
            });
        }
Ejemplo n.º 3
0
        public MockupCluster(IAdminConfig adminConfig, IUserConfig userConfig, IClusterTopology topology, ITraceLogger traceLogger)
        {
            this.TargetWrpConfig        = adminConfig;
            this.TargetCsmConfig        = userConfig;
            this.Topology               = topology;
            this.ClusterManifestVersion = 0;
            this.SeedNodeSelector       = new SeedNodeSelector(new TimeSpan(0, 1, 0), new MockupTraceLogger());
            this.SetStateMachine(traceLogger);
            this.SetGeneratorSettings();

            this.fabricSettingsActivator = new Lazy <IFabricSettingsActivator>(() =>
            {
                return(new MockupFabricSettingsActivator());
            });

            this.NodeTypeNodeStatusList = new Dictionary <string, SortedList <string, NodeStatus> >();
            this.TargetCsmConfig.NodeTypes.ForEach(nodeType => this.NodeTypeNodeStatusList.Add(nodeType.Name, new SortedList <string, NodeStatus>()));

            foreach (var node in this.Topology.Nodes)
            {
                this.NodeTypeNodeStatusList[node.Value.NodeTypeRef].Add(
                    node.Key,
                    new NodeStatus()
                {
                    NodeName               = node.Value.NodeName,
                    InstanceId             = 0,
                    NodeDeactivationIntent = WrpNodeDeactivationIntent.Invalid,
                    NodeState              = NodeState.Enabled,
                    NodeType               = node.Value.NodeTypeRef
                });
            }
        }
Ejemplo n.º 4
0
        internal static StandAloneInstallerJsonModelBase ConstructByApiVersion(
            IUserConfig config,
            IClusterTopology topology,
            string configurationVersion,
            string apiVersion)
        {
            Type modelType;

            if (string.IsNullOrWhiteSpace(apiVersion))
            {
                // backward compatibility:
                //      At powershell layer, apiVersion is not required.
                //      At REST layer, apiVersion is not required for api-version prior to 6.0.
                modelType = StandAloneInstallerJsonModelBase.apiVersionTable.Last().Item2;
            }
            else
            {
                var entry = StandAloneInstallerJsonModelBase.apiVersionTable.FirstOrDefault(p => p.Item1 == apiVersion);
                if (entry != null)
                {
                    modelType = entry.Item2;
                }
                else
                {
                    throw new NotSupportedException(apiVersion + " is not supported!");
                }
            }

            return((StandAloneInstallerJsonModelBase)Activator.CreateInstance(modelType, config, topology, configurationVersion));
        }
 internal override void FromInternal(
     IClusterTopology clusterTopology,
     IUserConfig userConfig,
     string apiVersion)
 {
     base.FromInternal(clusterTopology, userConfig, apiVersion);
     this.Properties = new PropertyOctober2017();
     this.Properties.UpdateFromUserConfig(userConfig);
 }
Ejemplo n.º 6
0
 // Ensure all overriden implementations of FromInternal cover all newly added properties.
 internal virtual void FromInternal(
     IClusterTopology clusterTopology,
     IUserConfig userConfig,
     string apiVersion)
 {
     this.Nodes = new List <NodeDescriptionGA>(
         clusterTopology.Nodes.Values.Select <NodeDescription, NodeDescriptionGA>(
             node => NodeDescriptionGA.ReadFromInternal(node)));
     this.ApiVersion = apiVersion;
     this.ClusterConfigurationVersion = userConfig.Version.Version;
     this.Name = userConfig.ClusterName;
 }
 public MockupClusterManifestBuilder(
     IClusterTopology topology,
     SeedNodeSelector seedNodeSelector,
     IUserConfig targetCsmConfig,
     IAdminConfig targetWrpConfig,
     ClusterNodeConfig targetNodeConfig,
     IManifestVersionGenerator versionGenerator,
     IFabricSettingsActivator fabricSettingsActivator,
     ClusterManifestGeneratorSettings clusterManifestGeneratorSettings,
     ITraceLogger traceLogger)
     : base(topology, seedNodeSelector, targetCsmConfig, targetWrpConfig, targetNodeConfig, versionGenerator, fabricSettingsActivator, clusterManifestGeneratorSettings, traceLogger)
 {
 }
Ejemplo n.º 8
0
        protected virtual ClusterManifestTypeInfrastructure OnGetInfrastructure(IClusterTopology inputTopology, IEnumerable <NodeDescription> seedNodes, IEnumerable <ClusterManifestTypeNodeType> nodeTypes)
        {
            IEnumerable <PaaSRoleType> roles = this.TargetCsmConfig.NodeTypes.Select(nodeType => nodeType.ToPaaSRoleType());
            IEnumerable <PaaSVoteType> votes = seedNodes.Select(seedNode => this.ToPaaSVoteType(seedNode, nodeTypes));

            var infra = new ClusterManifestTypeInfrastructurePaaS()
            {
                Roles = roles.ToArray(),
                Votes = votes.ToArray()
            };

            return(new ClusterManifestTypeInfrastructure()
            {
                Item = infra
            });
        }
        internal static ClusterNodeConfig GetTargetNodeConfigRemoveNode(IClusterTopology topology, List <NodeDescription> removedNodes, long version)
        {
            UpgradeOrchestrationTrace.TraceSource.WriteInfo(TraceType, "Creating TargetNodeConfig");
            List <Microsoft.ServiceFabric.ClusterManagementCommon.NodeStatus> nodeStatus = new List <Microsoft.ServiceFabric.ClusterManagementCommon.NodeStatus>();

            foreach (var nodeName in topology.Nodes.Keys)
            {
                if (removedNodes.Any(removedNode => removedNode.NodeName == nodeName))
                {
                    nodeStatus.Add(
                        new Microsoft.ServiceFabric.ClusterManagementCommon.NodeStatus
                    {
                        NodeName  = nodeName,
                        NodeType  = topology.Nodes[nodeName].NodeTypeRef,
                        NodeState = NodeState.Disabling,
                        NodeDeactivationIntent = WrpNodeDeactivationIntent.RemoveNode,
                        InstanceId             = 0
                    });
                }
                else
                {
                    nodeStatus.Add(
                        new Microsoft.ServiceFabric.ClusterManagementCommon.NodeStatus
                    {
                        NodeName  = nodeName,
                        NodeType  = topology.Nodes[nodeName].NodeTypeRef,
                        NodeState = NodeState.Enabled,
                        NodeDeactivationIntent = WrpNodeDeactivationIntent.Invalid,
                        InstanceId             = 0
                    });
                }
            }

            UpgradeOrchestrationTrace.TraceSource.WriteInfo(TraceType, "Setting NodeStatus for nodes {0}", string.Join(", ", nodeStatus.Select(node => node.NodeName).ToArray()));
            return(new ClusterNodeConfig
            {
                Version = version + 1,
                NodesStatus = nodeStatus,
                IsUserSet = true
            });
        }
Ejemplo n.º 10
0
 protected ClusterManifestBuilder(
     IClusterTopology topology,
     SeedNodeSelector seedNodeSelector,
     IUserConfig targetCsmConfig,
     IAdminConfig targetWrpConfig,
     ClusterNodeConfig targetNodeConfig,
     IManifestVersionGenerator versionGenerator,
     IFabricSettingsActivator fabricSettingsActivator,
     ClusterManifestGeneratorSettings clusterManifestGeneratorSettings,
     ITraceLogger traceLogger)
 {
     this.Topology                         = topology;
     this.SeedNodeSelector                 = seedNodeSelector;
     this.TargetCsmConfig                  = targetCsmConfig;
     this.TargetWrpConfig                  = targetWrpConfig;
     this.TargetNodeConfig                 = targetNodeConfig;
     this.VersionGenerator                 = versionGenerator;
     this.FabricSettingsActivator          = fabricSettingsActivator;
     this.ClusterManifestGeneratorSettings = clusterManifestGeneratorSettings;
     this.TraceLogger                      = traceLogger;
 }
 public ClusterManifestBuilder CreateClusterManifestBuilder(
     IClusterTopology topology,
     SeedNodeSelector seedNodeSelector,
     IUserConfig targetCsmConfig,
     IAdminConfig targetWrpConfig,
     ClusterNodeConfig targetNodeConfig,
     IManifestVersionGenerator versionGenerator,
     IFabricSettingsActivator fabricSettingsActivator,
     ClusterManifestGeneratorSettings clusterManifestGeneratorSettings,
     ITraceLogger traceLogger)
 {
     return(new StandAloneClusterManifestBuilder(
                topology,
                seedNodeSelector,
                targetCsmConfig,
                targetWrpConfig,
                targetNodeConfig,
                versionGenerator,
                fabricSettingsActivator,
                clusterManifestGeneratorSettings,
                traceLogger));
 }
Ejemplo n.º 12
0
        public StandAloneCluster(IAdminConfig adminConfig, IUserConfig userConfig, IClusterTopology topology, string clusterId, ITraceLogger traceLogger)
        {
            this.TargetWrpConfig        = adminConfig;
            this.TargetCsmConfig        = userConfig;
            this.Topology               = topology;
            this.ClusterManifestVersion = 0;

            // TODO: This is an workaround for bug 8874388: SimpleClusterUpgradeState shouldn't reselect seednode. It should use the exisiting ones.
            this.SeedNodeSelector = new SeedNodeSelector(new TimeSpan(0, 0, 0), new StandAloneTraceLogger("StandAloneDeploymentManager"));
            this.SetStateMachine(traceLogger);
            this.SetGeneratorSettings();

            this.clusterId = clusterId;

            this.fabricSettingsActivator = new Lazy <IFabricSettingsActivator>(() =>
            {
                this.clusterId.MustNotBeNullOrWhiteSpace("clusterId");
                return(new StandAloneFabricSettingsActivator(this.clusterId));
            });

            this.NodeTypeNodeStatusList = new Dictionary <string, SortedList <string, NodeStatus> >();
            this.TargetCsmConfig.NodeTypes.ForEach(nodeType => this.NodeTypeNodeStatusList.Add(nodeType.Name, new SortedList <string, NodeStatus>()));

            foreach (var node in this.Topology.Nodes)
            {
                this.NodeTypeNodeStatusList[node.Value.NodeTypeRef].Add(
                    node.Key,
                    new NodeStatus()
                {
                    NodeName               = node.Value.NodeName,
                    InstanceId             = 0,
                    NodeDeactivationIntent = WrpNodeDeactivationIntent.Invalid,
                    NodeState              = NodeState.Enabled,
                    NodeType               = node.Value.NodeTypeRef
                });
            }
        }
Ejemplo n.º 13
0
        public static ClusterManifestGeneratorSettings GenerateSettings(SettingsType wrpSettings, IClusterTopology topology)
        {
            var systemServicesForScale = new Dictionary <string, string>();
            var section = wrpSettings.Section.FirstOrDefault(item => item.Name == "SystemServicesForScale");

            if (section != null)
            {
                foreach (var parameter in section.Parameter)
                {
                    systemServicesForScale.Add(parameter.Name, parameter.Value);
                }
            }

            HashSet <string> uds = new HashSet <string>();
            HashSet <string> fds = new HashSet <string>();

            foreach (var node in topology.Nodes.Values)
            {
                uds.Add(node.FaultDomain);
                fds.Add(node.FaultDomain);
            }

            return(new ClusterManifestGeneratorSettings()
            {
                AllowUnprotectedDiagnosticsStorageAccountKeys = false,
                ClusterConnectionEndpointPort = GetIntConfigurationSetting(wrpSettings, "ClusterConnectionEndpointPort", 9025),
                DataDeletionAgeInDaysForDiagnosticsDisabledClusters = GetIntConfigurationSetting(wrpSettings, "DataDeletionAgeInDaysForDiagnosticsDisabledClusters", 7),
                EndReservedPortNumber = 1000,
                StartReservedPortNumber = 2000,
                FDCount = fds.Count,
                UDCount = uds.Count,
                LeaseDriverEndpointPort = GetIntConfigurationSetting(wrpSettings, "LeaseDriverEndpointPort", 9026),
                MaxAllowedPortNumber = 65535,
                MaxClusterSize = 1000,
                MinAllowedPortNumber = 1,
                MinClusterSize = GetIntConfigurationSetting(wrpSettings, "MinClusterSize", 3),
                MinDynamicPortCount = GetIntConfigurationSetting(wrpSettings, "MinDynamicPortCount", 1), // Needs to be 255 or higher to actually change ephemeral port range
                ServiceConnectionEndpointPort = GetIntConfigurationSetting(wrpSettings, "ServiceConnectionEndpointPort", 9027),
                SystemServicesForScale = systemServicesForScale
            });
        }
Ejemplo n.º 14
0
 public StandAloneInstallerJsonModelBase(IUserConfig config, IClusterTopology topology, string configurationVersion)
 {
     this.ClusterConfigurationVersion = configurationVersion;
     this.Name  = config.ClusterName;
     this.Nodes = new List <NodeDescription>(topology.Nodes.Values).ConvertAll <NodeDescriptionGA>(node => NodeDescriptionGA.ReadFromInternal(node));
 }