Beispiel #1
0
        private static SettingsTypeSectionParameter[] GetFirewallSecuritySection(NodeSettings setting)
        {
            List <string>       fabricFirewallSecturityParameters = new List <string>();
            SettingsTypeSection fabricFirewallSecuritySection     = setting.Settings.FirstOrDefault(section => section.Name.Equals(Constants.SectionNames.Security, StringComparison.OrdinalIgnoreCase));

            return(fabricFirewallSecuritySection.Parameter);
        }
Beispiel #2
0
        private void GenerateSfssRGPolicy(
            SettingsTypeSection sfssRgPolicy,
            List <SettingsTypeSectionParameter> parameters,
            string service)
        {
            string[] governedResources =
            {
                Constants.ParameterNames.ProcessCpusetCpus,
                Constants.ParameterNames.ProcessCpuShares,
                Constants.ParameterNames.ProcessMemoryInMB,
                Constants.ParameterNames.ProcessMemorySwapInMB
            };

            foreach (string resourceName in governedResources)
            {
                var value = sfssRgPolicy.Parameter.FirstOrDefault(
                    param =>
                    param.Name.Equals(string.Format(CultureInfo.InvariantCulture, "{0}{1}", service, resourceName), StringComparison.OrdinalIgnoreCase) &&
                    !param.Value.Equals("", StringComparison.OrdinalIgnoreCase));
                if (value != null)
                {
                    parameters.Add(new SettingsTypeSectionParameter()
                    {
                        Name = resourceName, Value = value.Value, MustOverride = false
                    });
                }
            }
        }
        protected SettingsTypeSection GenerateRunAsSection(Security security)
        {
            if (security == null || security.WindowsIdentities == null || security.WindowsIdentities.ClustergMSAIdentity == null)
            {
                return(null);
            }

            var runAsParameterList = new List <SettingsTypeSectionParameter>
            {
                new SettingsTypeSectionParameter()
                {
                    Name  = StringConstants.ParameterName.RunAsAccountType,
                    Value = StringConstants.ManagedServiceAccount
                },
                new SettingsTypeSectionParameter()
                {
                    Name  = StringConstants.ParameterName.RunAsAccountName,
                    Value = security.WindowsIdentities.ClustergMSAIdentity
                }
            };

            var runAsSection = new SettingsTypeSection()
            {
                Name      = StringConstants.SectionName.RunAs,
                Parameter = runAsParameterList.ToArray()
            };

            return(runAsSection);
        }
Beispiel #4
0
 public ClusterSettings(SettingsOverridesTypeSection[] otherSettings, SettingsTypeSection votes, SettingsTypeSection seedNodeClientConnectionAddresses, FabricCertificateType secretsCertificate)
 {
     this.Settings = new List <SettingsTypeSection>();
     this.Settings.Add(votes);
     this.Settings.Add(seedNodeClientConnectionAddresses);
     AddOtherSettings(otherSettings, secretsCertificate);
     AddApplicationLogCollectorSettingsIfRequired();
     DcaSettings.AddDcaSettingsIfRequired(this.Settings);
 }
Beispiel #5
0
        // TODO - Following code will be removed once fully transitioned to structured traces in Linux
        private static bool GetIsStructuredTracesEnabled(List <SettingsTypeSection> settings)
        {
            SettingsTypeSection commonSection = GetSectionWithName(FabricValidatorConstants.SectionNames.Common, settings);

            if (commonSection == null)
            {
                return(false);
            }

            return(CheckSettingsSectionParameterValueEquals(commonSection, FabricValidatorConstants.ParameterNames.Common.LinuxStructuredTracesEnabled, "true"));
        }
Beispiel #6
0
        private void AddOtherSettings(SettingsOverridesTypeSection[] settings, FabricCertificateType secretsCertificate)
        {
            foreach (SettingsOverridesTypeSection section in settings)
            {
                if (section.Name != Constants.SectionNames.Votes && section.Name != Constants.SectionNames.SeedNodeClientConnectionAddresses)
                {
                    var settingsTypeSection = ClusterSettings.ConvertToSettingsTypeSection(section);
                    if (settingsTypeSection != null)
                    {
                        this.Settings.Add(settingsTypeSection);
                    }
                }
            }

            // Adds the "SettingsX509StoreName" parameter under the "Security" section
            // if a SettingsCertificate is specified on the ClusterManifest
            if (secretsCertificate != null)
            {
                SettingsTypeSection securitySection = this.Settings.FirstOrDefault(section => section.Name.Equals(Constants.SectionNames.Security, StringComparison.OrdinalIgnoreCase));

                if (securitySection == null)
                {
                    securitySection = new SettingsTypeSection()
                    {
                        Name = Constants.SectionNames.Security
                    };
                    this.Settings.Add(securitySection);
                }

                SettingsTypeSectionParameter securityParameter = null;
                string securityParameterName = string.Format(CultureInfo.InvariantCulture, Constants.ParameterNames.X509StoreNamePattern, "Settings");
                if (securitySection.Parameter != null)
                {
                    securityParameter = securitySection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(securityParameterName, StringComparison.OrdinalIgnoreCase));
                }

                if (securityParameter == null)
                {
                    securityParameter = new SettingsTypeSectionParameter()
                    {
                        Name = securityParameterName
                    };
                }

                securityParameter.Value       = secretsCertificate.X509StoreName;
                securityParameter.IsEncrypted = false;

                List <SettingsTypeSectionParameter> parameterList =
                    (securitySection.Parameter != null) ? new List <SettingsTypeSectionParameter>(securitySection.Parameter) : new List <SettingsTypeSectionParameter>();
                parameterList.Add(securityParameter);

                securitySection.Parameter = parameterList.ToArray();
            }
        }
Beispiel #7
0
        private static string AddTypedEtlProducerSection(List <SettingsTypeSection> settings, string producerEtlType)
        {
            var newProducerSection = new SettingsTypeSection()
            {
                Name      = DefaultEtlFileTypedProducersSectionNames[producerEtlType],
                Parameter = new[]
                {
                    new SettingsTypeSectionParameter {
                        Name = FabricValidatorConstants.ParameterNames.IsEnabled, Value = "true"
                    },
                    new SettingsTypeSectionParameter {
                        Name = FabricValidatorConstants.ParameterNames.ProducerType, Value = DcaStandardPluginValidators.EtlFileProducer
                    },
                    new SettingsTypeSectionParameter {
                        Name = EtlProducerValidator.ServiceFabricEtlTypeParamName, Value = producerEtlType
                    }
                }
            };

            // Set EtlReadInterval to 1 minute if it is Operational producer.
            if (producerEtlType == EtlProducerValidator.OperationalEtl)
            {
                newProducerSection.Parameter = newProducerSection.Parameter.Union(
                    new[] {
                    new SettingsTypeSectionParameter {
                        Name  = FabricValidatorConstants.ParameterNames.EtlReadIntervalInMinutes,
                        Value = "1"
                    }
                })
                                               .ToArray();
            }

            return(AddProducerSection(settings,
                                      section =>
            {
                var pluginType = section.Parameter
                                 .SingleOrDefault(p => p.Name == FabricValidatorConstants.ParameterNames.ProducerType);

                var etlType = section.Parameter
                              .SingleOrDefault(p => p.Name == EtlProducerValidator.WindowsFabricEtlTypeParamName ||
                                               p.Name == EtlProducerValidator.ServiceFabricEtlTypeParamName);

                return pluginType != null &&
                (pluginType.Value == DcaStandardPluginValidators.EtlFileProducer || pluginType.Value == DcaStandardPluginValidators.EtlInMemoryProducer) &&
                etlType != null &&
                etlType.Value == producerEtlType;
            },
                                      newProducerSection));
        }
Beispiel #8
0
        private static void AddOrUpdateDiagnosticsProducerInstancesParameters(SettingsTypeSection diagnosticsSection)
        {
            var producers = diagnosticsSection.Parameter.SingleOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.ProducerInstances, StringComparison.OrdinalIgnoreCase));

            if (producers == null)
            {
                DeployerTrace.WriteInfo($"{Constants.SectionNames.Diagnostics} section, {FabricValidatorConstants.ParameterNames.ProducerInstances} parameter was not found and is being added.");
                var p = new SettingsTypeSectionParameter
                {
                    Name  = FabricValidatorConstants.ParameterNames.ProducerInstances,
                    Value = string.Empty
                };
                diagnosticsSection.Parameter = diagnosticsSection.Parameter.Concat(new[] { p }).ToArray();
            }
        }
Beispiel #9
0
        private static void AddOrUpdateDiagnosticsSection(List <SettingsTypeSection> settings)
        {
            var diagnosticsSection = settings.SingleOrDefault(section => section.Name.Equals(Constants.SectionNames.Diagnostics, StringComparison.OrdinalIgnoreCase));

            if (diagnosticsSection == null)
            {
                DeployerTrace.WriteInfo($"{Constants.SectionNames.Diagnostics} section was not found and is being added.");
                diagnosticsSection = new SettingsTypeSection()
                {
                    Name = Constants.SectionNames.Diagnostics, Parameter = new SettingsTypeSectionParameter[0]
                };
                settings.Add(diagnosticsSection);
            }

            AddOrUpdateDiagnosticsProducerInstancesParameters(diagnosticsSection);
        }
Beispiel #10
0
        private static void GetPorts(NodeSettings setting, out int startPort, out int endPort)
        {
            SettingsTypeSection fabricNodeSection = setting.Settings.FirstOrDefault(section => section.Name.Equals(Constants.SectionNames.FabricNode, StringComparison.OrdinalIgnoreCase));

            var startDynamicPortParamter = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.StartDynamicPortRange, StringComparison.OrdinalIgnoreCase));
            var endDynamicnPortParamter  = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.EndDynamicPortRange, StringComparison.OrdinalIgnoreCase));

            if (startDynamicPortParamter != null && endDynamicnPortParamter != null)
            {
                int.TryParse(startDynamicPortParamter.Value, out startPort);
                int.TryParse(endDynamicnPortParamter.Value, out endPort);
            }
            else
            {
                startPort = 0;
                endPort   = 0;
            }
        }
Beispiel #11
0
        public void CreateFabricHostSettingsFile(string fabricBinPath)
        {
            StringBuilder path    = new StringBuilder();
            string        envPath = Environment.GetEnvironmentVariable("Path");

            if (!String.IsNullOrEmpty(envPath))
            {
                path.AppendFormat("{0};{1}", envPath, fabricBinPath);
            }
            else
            {
                path.Append(fabricBinPath);
            }
            Environment.SetEnvironmentVariable("Path", path.ToString());
            List <SettingsTypeSection> sections     = new List <SettingsTypeSection>();
            SettingsTypeSection        traceSection = new SettingsTypeSection();

            traceSection.Name = "Trace/Etw";
            SettingsTypeSectionParameter param = new SettingsTypeSectionParameter();

            param.Name             = "Level";
            param.Value            = "5";
            traceSection.Parameter = new SettingsTypeSectionParameter[1] {
                param
            };
            sections.Add(traceSection);
            SettingsTypeSection hostSettings = new SettingsTypeSection();

            hostSettings.Name = "FabricHost";
            SettingsTypeSectionParameter param1 = new SettingsTypeSectionParameter();

            param1.Name            = "ActivatorServiceAddress";
            param1.Value           = this.activatorAddress;
            hostSettings.Parameter = new SettingsTypeSectionParameter[1] {
                param1
            };
            sections.Add(hostSettings);

            WriteFabricHostSettingsFile(new SettingsType()
            {
                Section = sections.ToArray()
            });
        }
Beispiel #12
0
        public bool Initialize()
        {
            var config = FabricServiceConfig.GetConfig();

            //File is not Present
            if (config == null || (IsExeSettingsFileEmpty(config) && DoesConfigurationSectionExist(config)))
            {
                AppTrace.TraceSource.WriteInfo(
                    TraceType,
                    "FabricServiceConfig instance is null .This can happen if Settings File is not Present");
                return(false);
            }


            if (config.configurationSettings != null)
            {
                if (config.configurationSettings.Sections.Contains(this.sectionName))
                {
                    this.configSection = config.configurationSettings.Sections[this.sectionName];
                    this.onInitialize();
                    return(true);
                }
                return(false);
            }

            foreach (var section in config.Settings.Section)
            {
                if (section.Name.Equals(this.sectionName.Trim()))
                {
                    this.exeSection = section;
                    this.onInitialize();
                    return(true);
                }
            }
            AppTrace.TraceSource.WriteInfo(
                TraceType,
                "Section :{0} is not present in FabricServiceConfig ",
                this.sectionName);
            return(false);
        }
Beispiel #13
0
        internal static string GetGoalStateUri()
        {
            string goalStateUriStr = null;

            /* Test code relies on the settings present in ClusterSettings.json for deployment of a specific version.
             * We need this check for the test code because certain APIs will be invoked before the cluster is even up. */
            string clusterSettingsFilepath = StandaloneUtility.FindFabricResourceFile(DMConstants.ClusterSettingsFileName);

            if (!string.IsNullOrEmpty(clusterSettingsFilepath))
            {
                StandAloneClusterManifestSettings standAloneClusterManifestSettings = JsonConvert.DeserializeObject <StandAloneClusterManifestSettings>(File.ReadAllText(clusterSettingsFilepath));
                if (standAloneClusterManifestSettings.CommonClusterSettings != null && standAloneClusterManifestSettings.CommonClusterSettings.Section != null)
                {
                    SettingsTypeSection settings = standAloneClusterManifestSettings.CommonClusterSettings.Section.ToList().SingleOrDefault(
                        section => section.Name == DMConstants.UpgradeOrchestrationServiceConfigSectionName);
                    if (settings != null)
                    {
                        SettingsTypeSectionParameter goalStatePathParam = settings.Parameter.ToList().SingleOrDefault(param => param.Name == DMConstants.GoalStateFileUrlName);
                        if (goalStatePathParam != null)
                        {
                            goalStateUriStr = goalStatePathParam.Value;
                        }
                    }
                }
            }

            // Check the native config store before using default location. The GoalStateFileUrl may have been overridden by the user.
            if (string.IsNullOrEmpty(goalStateUriStr))
            {
                NativeConfigStore configStore = NativeConfigStore.FabricGetConfigStore();
                goalStateUriStr = configStore.ReadUnencryptedString(DMConstants.UpgradeOrchestrationServiceConfigSectionName, DMConstants.GoalStateFileUrlName);
            }

            if (string.IsNullOrEmpty(goalStateUriStr))
            {
                goalStateUriStr = DMConstants.DefaultGoalStateFileUrl;
            }

            return(goalStateUriStr);
        }
Beispiel #14
0
        // Adds in case Queryable Table uploader is present
        private static void AddAzureTableOperationalConsumerIfNeededLinux(List <SettingsTypeSection> settings)
        {
            // TODO - Following code will be removed once fully transitioned to structured traces in Linux
            bool isStructuredTracesEnabled = GetIsStructuredTracesEnabled(settings);

            if (isStructuredTracesEnabled == false)
            {
                return;
            }

            SettingsTypeSection operationalConsumer = CreateOperationalTableUploaderSectionFromQueryableTable(settings);

            if (operationalConsumer == null)
            {
                return;
            }

            SettingsTypeSection diagnosticsSection = GetSectionWithName(Constants.SectionNames.Diagnostics, settings);

            if (diagnosticsSection == null)
            {
                return;
            }

            SettingsTypeSectionParameter consumersParam = GetParameterWithName(FabricValidatorConstants.ParameterNames.ConsumerInstances, diagnosticsSection);

            if (consumersParam == null)
            {
                return;
            }

            // Updating ConsumerInstances in Diagnostics Section
            var consumers = consumersParam.Value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(pluginName => pluginName.Trim());

            consumersParam.Value = string.Join(", ", consumers.Union(new string[] { operationalConsumer.Name }));

            // Adding operational table uploader Section
            settings.Add(operationalConsumer);
        }
Beispiel #15
0
        private static string AddProducerSection(
            List <SettingsTypeSection> settings,
            Func <SettingsTypeSection, bool> matchesDesired,
            SettingsTypeSection defaultSection)
        {
            var diagnosticsSection = settings.Single(section => section.Name.Equals(Constants.SectionNames.Diagnostics, StringComparison.OrdinalIgnoreCase));

            var producerSections = diagnosticsSection.Parameter
                                   .Single(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.ProducerInstances, StringComparison.OrdinalIgnoreCase))
                                   .Value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(pluginName => pluginName.Trim()).Select(sn => settings.Single(s => s.Name.Equals(sn, StringComparison.OrdinalIgnoreCase)));

            var producerSectionsThatExistAreEnabledAndHaveProducerTypeParam = producerSections
                                                                              .Where(s => s.Parameter.SingleOrDefault(
                                                                                         p => p.Name == FabricValidatorConstants.ParameterNames.ProducerType) != null)
                                                                              .Where(s => s.Parameter.SingleOrDefault(
                                                                                         p => p.Name == FabricValidatorConstants.ParameterNames.IsEnabled) == null ||
                                                                                     s.Parameter.Single(p => p.Name == FabricValidatorConstants.ParameterNames.IsEnabled).Value.Equals("true", StringComparison.OrdinalIgnoreCase));

            var existingSection = producerSectionsThatExistAreEnabledAndHaveProducerTypeParam.FirstOrDefault(matchesDesired);

            if (existingSection != null)
            {
                return(existingSection.Name);
            }

            DeployerTrace.WriteInfo($"{defaultSection.Name} section was not found and is being added.");
            diagnosticsSection.Parameter
            .Single(parameter => parameter.Name.Equals(
                        FabricValidatorConstants.ParameterNames.ProducerInstances, StringComparison.OrdinalIgnoreCase)).Value =
                string.Join(", ", producerSections.Select(ps => ps.Name).Union(new[] { defaultSection.Name }));

            // Remove any existing using same name
            settings.RemoveAll(s => s.Name == defaultSection.Name);
            settings.Add(defaultSection);

            return(defaultSection.Name);
        }
 private static bool CompareSettingsType(SettingsType currentSettingsType, SettingsType newSettingsType)
 {
     if (newSettingsType == null && currentSettingsType == null)
     {
         return(true);
     }
     else if (newSettingsType == null || currentSettingsType == null)
     {
         return(false);
     }
     else
     {
         foreach (SettingsTypeSection section in currentSettingsType.Section)
         {
             SettingsTypeSection newSection = newSettingsType.Section.FirstOrDefault(sts => sts.Name.Equals(section.Name));
             if (newSection == null || newSection.Parameter.Count() != section.Parameter.Count())
             {
                 return(false);
             }
             var newParameters     = newSection.Parameter.OrderBy(p => p.Name);
             var currentParameters = section.Parameter.OrderBy(p => p.Name);
             for (int i = 0; i < newSection.Parameter.Count(); i++)
             {
                 SettingsTypeSectionParameter curPara = section.Parameter[i];
                 SettingsTypeSectionParameter newPara = newSection.Parameter[i];
                 if (curPara.Name != newPara.Name ||
                     curPara.Value != newPara.Value ||
                     curPara.IsEncrypted != curPara.IsEncrypted)
                 {
                     return(false);
                 }
             }
         }
         return(true);
     }
 }
Beispiel #17
0
 private static bool CheckSettingsSectionParameterValueEquals(SettingsTypeSection section, string parameterName, string value)
 {
     return(section != null &&
            section.Parameter.SingleOrDefault(p => p.Name == parameterName) != null &&
            section.Parameter.Single(p => p.Name == parameterName).Value.Trim().Equals(value, StringComparison.OrdinalIgnoreCase));
 }
Beispiel #18
0
        private static void GetPorts(
            NodeSettings setting,
            out string leaseDriverPort,
            out string applicationPortRange,
            out string httpGatewayPort,
            out string httpAppGatewayPort,
            out string dynamicPortRange)
        {
            SettingsTypeSection fabricNodeSection = setting.Settings.FirstOrDefault(section => section.Name.Equals(Constants.SectionNames.FabricNode, StringComparison.OrdinalIgnoreCase));
            var leaseDriverPortParameter          = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.LeaseAgentAddress, StringComparison.OrdinalIgnoreCase));

            leaseDriverPort = leaseDriverPortParameter.Value;

            httpGatewayPort = null;
            var httpGatewayPortParameter = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.HttpGatewayListenAddress, StringComparison.OrdinalIgnoreCase));

            if (httpGatewayPortParameter != null)
            {
                httpGatewayPort = httpGatewayPortParameter.Value;
            }

            httpAppGatewayPort = null;
            var httpAppGatewayPortParameter = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.HttpApplicationGatewayListenAddress, StringComparison.OrdinalIgnoreCase));

            if (httpAppGatewayPortParameter != null)
            {
                httpAppGatewayPort = httpAppGatewayPortParameter.Value;
            }

            var startApplicationPortParamter = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.StartApplicationPortRange, StringComparison.OrdinalIgnoreCase));
            var endApplicationPortParamter   = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.EndApplicationPortRange, StringComparison.OrdinalIgnoreCase));

            if (startApplicationPortParamter != null && endApplicationPortParamter != null)
            {
                applicationPortRange = string.Format(
                    CultureInfo.InvariantCulture,
                    "{0}-{1}",
                    startApplicationPortParamter.Value,
                    endApplicationPortParamter.Value);
            }
            else
            {
                applicationPortRange = null;
            }

            var startDynamicPortParamter = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.StartDynamicPortRange, StringComparison.OrdinalIgnoreCase));
            var endDynamicnPortParamter  = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.EndDynamicPortRange, StringComparison.OrdinalIgnoreCase));

            if (startDynamicPortParamter != null && endDynamicnPortParamter != null)
            {
                dynamicPortRange = string.Format(
                    CultureInfo.InvariantCulture,
                    "{0}-{1}",
                    startDynamicPortParamter.Value,
                    endDynamicnPortParamter.Value);
            }
            else
            {
                dynamicPortRange = null;
            }
        }
Beispiel #19
0
 private static SettingsTypeSectionParameter GetParameterWithName(string parameterName, SettingsTypeSection section)
 {
     return(section.Parameter.FirstOrDefault(p => p.Name.Equals(parameterName, StringComparison.OrdinalIgnoreCase)));
 }
Beispiel #20
0
        private static SettingsTypeSection CreateOperationalTableUploaderSectionFromQueryableTable(List <SettingsTypeSection> settings)
        {
            SettingsTypeSection azureTableQueryableCsvUploaderConsumerSection     = GetFirstConsumerOfType(settings, DcaStandardPluginValidators.AzureTableQueryableCsvUploader);
            SettingsTypeSection azureTableOperationalEventUploaderConsumerSection = GetFirstConsumerOfType(settings, DcaStandardPluginValidators.AzureTableOperationalEventUploader);

            // don't add in case there is no queryable table uploader or there is an existing operational table uploader defined.
            if (azureTableQueryableCsvUploaderConsumerSection == null ||
                azureTableOperationalEventUploaderConsumerSection != null)
            {
                return(null);
            }

            SettingsTypeSectionParameter queryableConsumerTableNamePrefix       = GetParameterWithName(FabricValidatorConstants.ParameterNames.TableNamePrefix, azureTableQueryableCsvUploaderConsumerSection);
            SettingsTypeSectionParameter queryableConsumerStoreConnectionString = GetParameterWithName(FabricValidatorConstants.ParameterNames.StoreConnectionString, azureTableQueryableCsvUploaderConsumerSection);
            SettingsTypeSectionParameter queryableConsumerProducerInstance      = GetParameterWithName(FabricValidatorConstants.ParameterNames.ProducerInstance, azureTableQueryableCsvUploaderConsumerSection);

            if (queryableConsumerTableNamePrefix == null ||
                queryableConsumerStoreConnectionString == null ||
                queryableConsumerProducerInstance == null)
            {
                DeployerTrace.WriteError($"Unable to create Operational trace from Queryable Table Uploader. Not all required parameters defined.\n" +
                                         "{FabricValidatorConstants.ParameterNames.ProducerInstance} : {queryableConsumerProducerInstance != null}\n" +
                                         "{FabricValidatorConstants.ParameterNames.StoreConnectionString} : {queryableConsumerStoreConnectionString != null}\n" +
                                         "{FabricValidatorConstants.ParameterNames.TableNamePrefix} : {QueryableConsumerTableNamePrefix != null}");
                return(null);
            }

            var operationalProducerSectionValue = queryableConsumerProducerInstance.Value;

            var operationalConsumer = new SettingsTypeSection
            {
                Name      = DefaultAzureTableOperationalConsumerSectionName,
                Parameter = new[]
                {
                    new SettingsTypeSectionParameter {
                        Name = FabricValidatorConstants.ParameterNames.ConsumerType, Value = DcaStandardPluginValidators.AzureTableOperationalEventUploader
                    },
                    new SettingsTypeSectionParameter {
                        Name = FabricValidatorConstants.ParameterNames.IsEnabled, Value = "true"
                    },
                    new SettingsTypeSectionParameter {
                        Name = FabricValidatorConstants.ParameterNames.ProducerInstance, Value = operationalProducerSectionValue
                    },
                    new SettingsTypeSectionParameter {
                        Name        = FabricValidatorConstants.ParameterNames.StoreConnectionString,
                        Value       = queryableConsumerStoreConnectionString.Value,
                        IsEncrypted = queryableConsumerStoreConnectionString.IsEncrypted
                    },
                    new SettingsTypeSectionParameter {
                        Name  = FabricValidatorConstants.ParameterNames.TableNamePrefix,
                        Value = queryableConsumerTableNamePrefix.Value
                    }
                }
            };

            var queryableConsumerDataDeletionAgeInDays = GetParameterWithName(FabricValidatorConstants.ParameterNames.DataDeletionAgeInDays, azureTableQueryableCsvUploaderConsumerSection);

            if (queryableConsumerDataDeletionAgeInDays != null)
            {
                operationalConsumer.Parameter = operationalConsumer.Parameter.Union(
                    new[] {
                    new SettingsTypeSectionParameter {
                        Name  = FabricValidatorConstants.ParameterNames.DataDeletionAgeInDays,
                        Value = queryableConsumerDataDeletionAgeInDays.Value
                    }
                })
                                                .ToArray();
            }

            var queryableConsumerDeploymentId = GetParameterWithName(FabricValidatorConstants.ParameterNames.DeploymentId, azureTableQueryableCsvUploaderConsumerSection);

            if (queryableConsumerDeploymentId != null)
            {
                operationalConsumer.Parameter = operationalConsumer.Parameter.Union(
                    new[] {
                    new SettingsTypeSectionParameter {
                        Name  = FabricValidatorConstants.ParameterNames.DeploymentId,
                        Value = queryableConsumerDeploymentId.Value
                    }
                })
                                                .ToArray();
            }

            return(operationalConsumer);
        }
Beispiel #21
0
        private static void GetPorts2(
            NodeSettings setting,
            out string clientConnectionPort,
            out string serviceConnectionPort,
            out string clusterConnectionPort,
            out string clusterManagerReplicatorPort,
            out string repairManagerReplicatorPort,
            out string namingReplicatorPort,
            out string failoverManagerReplicatorPort,
            out string imageStoreServiceReplicatorPort,
            out string upgradeServiceReplicatorPort)
        {
            SettingsTypeSection fabricNodeSection = setting.Settings.FirstOrDefault(section => section.Name.Equals(Constants.SectionNames.FabricNode, StringComparison.OrdinalIgnoreCase));

            var clientConnectionPortParameter = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.ClientConnectionAddress, StringComparison.OrdinalIgnoreCase));

            clientConnectionPort = clientConnectionPortParameter.Value;

            var serviceConnectionPortParameter = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.RuntimeServiceAddress, StringComparison.OrdinalIgnoreCase));

            serviceConnectionPort = serviceConnectionPortParameter.Value;

            var clusterConnectionPortParameter = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.NodeAddress, StringComparison.OrdinalIgnoreCase));

            clusterConnectionPort = clusterConnectionPortParameter.Value;

            clusterManagerReplicatorPort = null;
            var clusterManagerReplicatorPortParameter = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.ClusterManagerReplicatorAddress, StringComparison.OrdinalIgnoreCase));

            if (clusterManagerReplicatorPortParameter != null)
            {
                clusterManagerReplicatorPort = clusterManagerReplicatorPortParameter.Value;
            }

            repairManagerReplicatorPort = null;
            var repairManagerReplicatorPortParameter = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.RepairManagerReplicatorAddress, StringComparison.OrdinalIgnoreCase));

            if (repairManagerReplicatorPortParameter != null)
            {
                repairManagerReplicatorPort = repairManagerReplicatorPortParameter.Value;
            }

            namingReplicatorPort = null;
            var namingReplicatorPortParameter = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.NamingReplicatorAddress, StringComparison.OrdinalIgnoreCase));

            if (namingReplicatorPortParameter != null)
            {
                namingReplicatorPort = namingReplicatorPortParameter.Value;
            }

            failoverManagerReplicatorPort = null;
            var failoverManagerReplicatorPortParameter = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.FailoverManagerReplicatorAddress, StringComparison.OrdinalIgnoreCase));

            if (failoverManagerReplicatorPortParameter != null)
            {
                failoverManagerReplicatorPort = failoverManagerReplicatorPortParameter.Value;
            }

            imageStoreServiceReplicatorPort = null;
            var imageStoreServiceReplicatorPortParameter = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.ImageStoreServiceReplicatorAddress, StringComparison.OrdinalIgnoreCase));

            if (imageStoreServiceReplicatorPortParameter != null)
            {
                imageStoreServiceReplicatorPort = imageStoreServiceReplicatorPortParameter.Value;
            }

            upgradeServiceReplicatorPort = null;
            var upgradeServiceReplicatorPortParameter = fabricNodeSection.Parameter.FirstOrDefault(parameter => parameter.Name.Equals(FabricValidatorConstants.ParameterNames.UpgradeServiceReplicatorAddress, StringComparison.OrdinalIgnoreCase));

            if (upgradeServiceReplicatorPortParameter != null)
            {
                upgradeServiceReplicatorPort = upgradeServiceReplicatorPortParameter.Value;
            }
        }
Beispiel #22
0
        private static void AddAzureTableOperationalConsumerIfNeeded(List <SettingsTypeSection> settings, string queryableProducerSectionName, string operationalProducerSectionName)
        {
            if (FindCorrespondingConsumerSection(
                    settings,
                    operationalProducerSectionName,
                    DcaStandardPluginValidators.AzureTableOperationalEventUploader) != null)
            {
                DeployerTrace.WriteInfo($"{Constants.SectionNames.Diagnostics} section, skipping the addition of {DcaStandardPluginValidators.AzureTableOperationalEventUploader} consumer as one exists.");
                return;
            }

            var queryableConsumer = FindCorrespondingConsumerSection(
                settings,
                queryableProducerSectionName,
                DcaStandardPluginValidators.AzureTableQueryableEventUploader);

            if (queryableConsumer == null ||
                !CheckSettingsSectionParameterValueEquals(
                    queryableConsumer,
                    FabricValidatorConstants.ParameterNames.IsEnabled,
                    "true"))
            {
                DeployerTrace.WriteInfo($"{Constants.SectionNames.Diagnostics} section, skipping the addition of {DcaStandardPluginValidators.AzureTableOperationalEventUploader} consumer.");
                return;
            }

            // Now as queryable consumer exists and enabled, we'll add an operational consumer with the storage settings copied from queryable one.
            var queryableConsumerStoreConnectionString = queryableConsumer.Parameter.Single(p => p.Name == FabricValidatorConstants.ParameterNames.StoreConnectionString);
            var operationalConsumer = new SettingsTypeSection
            {
                Name      = DefaultAzureTableOperationalConsumerSectionName,
                Parameter = new[]
                {
                    new SettingsTypeSectionParameter {
                        Name = FabricValidatorConstants.ParameterNames.ConsumerType, Value = DcaStandardPluginValidators.AzureTableOperationalEventUploader
                    },
                    new SettingsTypeSectionParameter {
                        Name = FabricValidatorConstants.ParameterNames.IsEnabled, Value = "true"
                    },
                    new SettingsTypeSectionParameter {
                        Name = FabricValidatorConstants.ParameterNames.ProducerInstance, Value = operationalProducerSectionName
                    },
                    new SettingsTypeSectionParameter {
                        Name        = FabricValidatorConstants.ParameterNames.StoreConnectionString,
                        Value       = queryableConsumerStoreConnectionString.Value,
                        IsEncrypted = queryableConsumerStoreConnectionString.IsEncrypted
                    },
                    new SettingsTypeSectionParameter {
                        Name  = FabricValidatorConstants.ParameterNames.TableNamePrefix,
                        Value = queryableConsumer.Parameter.Single(p => p.Name == FabricValidatorConstants.ParameterNames.TableNamePrefix).Value
                    }
                }
            };

            var queryableConsumerDataDeletionAgeInDays = queryableConsumer.Parameter.SingleOrDefault(p => p.Name == FabricValidatorConstants.ParameterNames.DataDeletionAgeInDays);

            if (queryableConsumerDataDeletionAgeInDays != null)
            {
                operationalConsumer.Parameter = operationalConsumer.Parameter.Union(
                    new[] {
                    new SettingsTypeSectionParameter {
                        Name  = FabricValidatorConstants.ParameterNames.DataDeletionAgeInDays,
                        Value = queryableConsumerDataDeletionAgeInDays.Value
                    }
                })
                                                .ToArray();
            }

            var queryableConsumerDeploymentId = queryableConsumer.Parameter.SingleOrDefault(p => p.Name == FabricValidatorConstants.ParameterNames.DeploymentId);

            if (queryableConsumerDeploymentId != null)
            {
                operationalConsumer.Parameter = operationalConsumer.Parameter.Union(
                    new[] {
                    new SettingsTypeSectionParameter {
                        Name  = FabricValidatorConstants.ParameterNames.DeploymentId,
                        Value = queryableConsumerDeploymentId.Value
                    }
                })
                                                .ToArray();
            }

            // Remove any existing using same name
            settings.RemoveAll(s => s.Name == operationalConsumer.Name);
            settings.Add(operationalConsumer);

            var diagnosticsSection = settings.Single(section => section.Name.Equals(Constants.SectionNames.Diagnostics, StringComparison.OrdinalIgnoreCase));
            var consumersParam     = diagnosticsSection.Parameter.Single(p => p.Name.Equals(FabricValidatorConstants.ParameterNames.ConsumerInstances, StringComparison.OrdinalIgnoreCase));
            var consumers          = consumersParam.Value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(pluginName => pluginName.Trim());

            consumersParam.Value = string.Join(", ", consumers.Union(new string[] { operationalConsumer.Name }));
        }
        protected List <SettingsTypeSection> GenerateSecuritySection(Security security, List <string> thumbprintClusterCertList, Dictionary <string, string> commonNameClusterCertList)
        {
            if (security == null)
            {
                var securityDefaultParameters = new List <SettingsTypeSectionParameter>
                {
                    new SettingsTypeSectionParameter {
                        Name = StringConstants.ParameterName.ClusterCredentialType, Value = CredentialType.None.ToString()
                    },
                    new SettingsTypeSectionParameter {
                        Name = StringConstants.ParameterName.ServerAuthCredentialType, Value = CredentialType.None.ToString()
                    },
                    new SettingsTypeSectionParameter {
                        Name = StringConstants.ParameterName.ClientRoleEnabled, Value = "false"
                    }
                };

                return(new List <SettingsTypeSection>()
                {
                    new SettingsTypeSection()
                    {
                        Name = StringConstants.SectionName.Security, Parameter = securityDefaultParameters.ToArray()
                    }
                });
            }

            var result = new List <SettingsTypeSection>();
            var securityParameterList = new List <SettingsTypeSectionParameter>
            {
                new SettingsTypeSectionParameter()
                {
                    Name  = StringConstants.ParameterName.ClientRoleEnabled,
                    Value = "true"
                },
                new SettingsTypeSectionParameter
                {
                    Name  = StringConstants.ParameterName.ClusterCredentialType,
                    Value = security.ClusterCredentialType.ToString()
                },
                new SettingsTypeSectionParameter()
                {
                    Name  = StringConstants.ParameterName.ServerAuthCredentialType,
                    Value = security.ServerCredentialType.ToString()
                },
                new SettingsTypeSectionParameter()
                {
                    Name  = StringConstants.ParameterName.AllowDefaultClient,
                    Value = false.ToString()
                }
            };

            if (security.CertificateInformation != null)
            {
                this.AddCertificateSecuritySections(result, securityParameterList, security, thumbprintClusterCertList, commonNameClusterCertList);
            }

            if (security.WindowsIdentities != null)
            {
                this.AddWindowsSecuritySections(securityParameterList, security);
            }

            var securitySectionToAdd = new SettingsTypeSection()
            {
                Name      = StringConstants.SectionName.Security,
                Parameter = securityParameterList.ToArray()
            };

            result.Add(securitySectionToAdd);
            return(result);
        }