Exemplo n.º 1
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();
            }
        }
Exemplo n.º 2
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();
            }
        }
Exemplo n.º 3
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()
            });
        }
Exemplo n.º 4
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);
        }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
0
 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);
     }
 }
Exemplo n.º 7
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);
        }
        private void UpdateClusterSettings(ClusterSettings clusterSettingsNoUnreliableTransport)
        {
            var fabricHostSetting = clusterSettingsNoUnreliableTransport.Settings.FirstOrDefault(
                setting =>
                setting.Name.Equals(FabricValidatorConstants.SectionNames.FabricHost, StringComparison.OrdinalIgnoreCase));

            if (fabricHostSetting == null)
            {
                return;
            }

            var autoFabricUpdateParameterValue = fabricHostSetting.Parameter.FirstOrDefault(
                param =>
                param.Name.Equals(FabricValidatorConstants.ParameterNames.EnableServiceFabricAutomaticUpdates, StringComparison.OrdinalIgnoreCase) &&
                param.Value.Equals("true", StringComparison.OrdinalIgnoreCase));

            var autoFabricBaseUpgradeParameterValue = fabricHostSetting.Parameter.FirstOrDefault(
                param =>
                param.Name.Equals(FabricValidatorConstants.ParameterNames.EnableServiceFabricBaseUpgrade, StringComparison.OrdinalIgnoreCase) &&
                param.Value.Equals("true", StringComparison.OrdinalIgnoreCase));

            var restartManagementParameterValue = fabricHostSetting.Parameter.FirstOrDefault(
                param =>
                param.Name.Equals(FabricValidatorConstants.ParameterNames.EnableRestartManagement, StringComparison.OrdinalIgnoreCase) &&
                param.Value.Equals("true", StringComparison.OrdinalIgnoreCase));

            if (autoFabricUpdateParameterValue == null &&
                autoFabricBaseUpgradeParameterValue == null &&
                restartManagementParameterValue == null)
            {
                return;
            }

            string targetReplicaSetSize = this.infrastructure.InfrastructureNodes.Count() < 3 ? "1" : "3";
            string minReplicaSetSize    = this.infrastructure.InfrastructureNodes.Count() < 3 ? "1" : "2";
            var    targetSetSizeSetting = new SettingsTypeSectionParameter()
            {
                Name  = FabricValidatorConstants.ParameterNames.TargetReplicaSetSize,
                Value = targetReplicaSetSize
            };

            var minSetSizeSetting = new SettingsTypeSectionParameter()
            {
                Name  = FabricValidatorConstants.ParameterNames.MinReplicaSetSize,
                Value = minReplicaSetSize
            };

            if (autoFabricBaseUpgradeParameterValue != null || autoFabricUpdateParameterValue != null)
            {
                List <SettingsTypeSectionParameter> parameters = new List <SettingsTypeSectionParameter>
                {
                    targetSetSizeSetting,
                    minSetSizeSetting,
                    new SettingsTypeSectionParameter()
                    {
                        Name  = FabricValidatorConstants.ParameterNames.CoordinatorType,
                        Value = FabricValidatorConstants.WindowsUpdateServiceCoordinatorType
                    }
                };

                if (autoFabricBaseUpgradeParameterValue != null &&
                    autoFabricUpdateParameterValue == null)
                {
                    parameters.Add(
                        new SettingsTypeSectionParameter()
                    {
                        Name  = FabricValidatorConstants.ParameterNames.OnlyBaseUpgrade,
                        Value = "true"
                    });
                }

                clusterSettingsNoUnreliableTransport.Settings.Add(
                    new SettingsTypeSection()
                {
                    Name      = FabricValidatorConstants.SectionNames.UpgradeService,
                    Parameter = parameters.ToArray()
                });
            }

            if (restartManagementParameterValue != null)
            {
                clusterSettingsNoUnreliableTransport.Settings.Add(
                    new SettingsTypeSection()
                {
                    Name      = FabricValidatorConstants.SectionNames.RepairManager,
                    Parameter = new SettingsTypeSectionParameter[]
                    {
                        targetSetSizeSetting,
                        minSetSizeSetting,
                    }
                });

                clusterSettingsNoUnreliableTransport.Settings.Add(
                    new SettingsTypeSection()
                {
                    Name      = FabricValidatorConstants.SectionNames.InfrastructureService,
                    Parameter = new SettingsTypeSectionParameter[]
                    {
                        targetSetSizeSetting,
                        minSetSizeSetting,
                        new SettingsTypeSectionParameter()
                        {
                            Name  = FabricValidatorConstants.ParameterNames.CoordinatorType,
                            Value = FabricValidatorConstants.ServerRestartCoordinatorType
                        }
                    }
                });
            }
        }