From d276e596d4104dbd73ee93d435ee27cec42740fb Mon Sep 17 00:00:00 2001 From: Andreas Bednarz Date: Mon, 3 Mar 2025 16:48:59 +1100 Subject: [PATCH 1/2] Migrate RabbitMQ management API settings from separate app.config entries into the connection string --- .../ServiceControl/ServiceControlAppConfig.cs | 52 ++++++++++++++++++- .../ServiceControl/SettingsList.cs | 18 +++++++ 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAppConfig.cs b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAppConfig.cs index 950058cfa7..36059de97f 100644 --- a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAppConfig.cs +++ b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAppConfig.cs @@ -1,6 +1,10 @@ namespace ServiceControlInstaller.Engine.Configuration.ServiceControl { + using System; + using System.Collections.Generic; + using System.Data.Common; using System.IO; + using System.Linq; using Instances; public class ServiceControlAppConfig : AppConfig @@ -12,7 +16,7 @@ public ServiceControlAppConfig(IServiceControlInstance instance) : base(Path.Com protected override void UpdateSettings() { - Config.ConnectionStrings.ConnectionStrings.Set("NServiceBus/Transport", details.ConnectionString); + Config.ConnectionStrings.ConnectionStrings.Set("NServiceBus/Transport", UpdateConnectionString()); var settings = Config.AppSettings.Settings; var version = details.Version; settings.Set(ServiceControlSettings.InstanceName, details.InstanceName, version); @@ -37,6 +41,9 @@ protected override void UpdateSettings() settings.RemoveIfRetired(ServiceControlSettings.AuditLogQueue, version); settings.RemoveIfRetired(ServiceControlSettings.ForwardAuditMessages, version); settings.RemoveIfRetired(ServiceControlSettings.InternalQueueName, version); + settings.RemoveIfRetired(ServiceControlSettings.RabbitMqManagementApiUrl, version); + settings.RemoveIfRetired(ServiceControlSettings.RabbitMqManagementApiUsername, version); + settings.RemoveIfRetired(ServiceControlSettings.RabbitMqManagementApiPassword, version); RemoveRavenDB35Settings(settings, version); } @@ -62,6 +69,47 @@ public override void SetTransportType(string transportTypeName) settings.Set(ServiceControlSettings.TransportType, transportTypeName, version); } - IServiceControlInstance details; + string UpdateConnectionString() + { + var kvpList = new DbConnectionStringBuilder { ConnectionString = details.ConnectionString } + .OfType>() + .Select(kvp => new KeyValuePair(kvp.Key, kvp.Value.ToString())) + .ToList(); + + MigrateRabbitMqManagementApiSettings(kvpList); + + return string.Join(";", kvpList.Select(kvp => $"{kvp.Key}={kvp.Value}")); + } + + void MigrateRabbitMqManagementApiSettings(IList> connectionStringPairs) + { + if (!details.TransportPackage.Name.Contains("rabbitmq", StringComparison.OrdinalIgnoreCase) || + connectionStringPairs.Any(kvp => kvp.Key.Equals("ManagementApiUrl", StringComparison.OrdinalIgnoreCase) || kvp.Key.Equals("ManagementApiUserName", StringComparison.OrdinalIgnoreCase))) + { + return; + } + + var settings = Config.AppSettings.Settings; + + var legacySetting = settings["LicensingComponent/RabbitMQ/ApiUrl"]; + if (legacySetting is not null) + { + connectionStringPairs.Add(new KeyValuePair("ManagementApiUrl", legacySetting.Value)); + } + + legacySetting = settings["LicensingComponent/RabbitMQ/UserName"]; + if (legacySetting is not null) + { + connectionStringPairs.Add(new KeyValuePair("ManagementApiUserName", legacySetting.Value)); + } + + legacySetting = settings["LicensingComponent/RabbitMQ/Password"]; + if (legacySetting is not null) + { + connectionStringPairs.Add(new KeyValuePair("ManagementApiPassword", legacySetting.Value)); + } + } + + readonly IServiceControlInstance details; } } \ No newline at end of file diff --git a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/SettingsList.cs b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/SettingsList.cs index bd0b5e4c87..07ab9d67ad 100644 --- a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/SettingsList.cs +++ b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/SettingsList.cs @@ -89,5 +89,23 @@ public static class ServiceControlSettings Name = "ServiceControl/EnableFullTextSearchOnBodies", SupportedFrom = new SemanticVersion(4, 17, 0) }; + + public static readonly SettingInfo RabbitMqManagementApiUrl = new() + { + Name = "LicensingComponent/RabbitMQ/ApiUrl", + RemovedFrom = new SemanticVersion(6, 5, 0) + }; + + public static readonly SettingInfo RabbitMqManagementApiUsername = new() + { + Name = "LicensingComponent/RabbitMQ/UserName", + RemovedFrom = new SemanticVersion(6, 5, 0) + }; + + public static readonly SettingInfo RabbitMqManagementApiPassword = new() + { + Name = "LicensingComponent/RabbitMQ/Password", + RemovedFrom = new SemanticVersion(6, 5, 0) + }; } } \ No newline at end of file From fc3decf8f7b02cb563dcb79c55401c4a46da831a Mon Sep 17 00:00:00 2001 From: Andreas Bednarz Date: Tue, 4 Mar 2025 15:21:01 +1100 Subject: [PATCH 2/2] Renamed settings related to Licensing component's use of RabbitMQ management API Removed unnecessary LINQ usage when working with DbConnectionStringBuilder in ServiceControlAppConfig --- .../ServiceControl/ServiceControlAppConfig.cs | 40 ++++++++----------- .../ServiceControl/SettingsList.cs | 6 +-- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAppConfig.cs b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAppConfig.cs index 36059de97f..82b06479f9 100644 --- a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAppConfig.cs +++ b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/ServiceControlAppConfig.cs @@ -1,10 +1,8 @@ namespace ServiceControlInstaller.Engine.Configuration.ServiceControl { using System; - using System.Collections.Generic; using System.Data.Common; using System.IO; - using System.Linq; using Instances; public class ServiceControlAppConfig : AppConfig @@ -41,9 +39,9 @@ protected override void UpdateSettings() settings.RemoveIfRetired(ServiceControlSettings.AuditLogQueue, version); settings.RemoveIfRetired(ServiceControlSettings.ForwardAuditMessages, version); settings.RemoveIfRetired(ServiceControlSettings.InternalQueueName, version); - settings.RemoveIfRetired(ServiceControlSettings.RabbitMqManagementApiUrl, version); - settings.RemoveIfRetired(ServiceControlSettings.RabbitMqManagementApiUsername, version); - settings.RemoveIfRetired(ServiceControlSettings.RabbitMqManagementApiPassword, version); + settings.RemoveIfRetired(ServiceControlSettings.LicensingComponentRabbitMqManagementApiUrl, version); + settings.RemoveIfRetired(ServiceControlSettings.LicensingComponentRabbitMqManagementApiUsername, version); + settings.RemoveIfRetired(ServiceControlSettings.LicensingComponentRabbitMqManagementApiPassword, version); RemoveRavenDB35Settings(settings, version); } @@ -71,42 +69,38 @@ public override void SetTransportType(string transportTypeName) string UpdateConnectionString() { - var kvpList = new DbConnectionStringBuilder { ConnectionString = details.ConnectionString } - .OfType>() - .Select(kvp => new KeyValuePair(kvp.Key, kvp.Value.ToString())) - .ToList(); + var connectionStringBuilder = new DbConnectionStringBuilder { ConnectionString = details.ConnectionString }; - MigrateRabbitMqManagementApiSettings(kvpList); + MigrateLicensingComponentRabbitMqManagementApiSettings(connectionStringBuilder); - return string.Join(";", kvpList.Select(kvp => $"{kvp.Key}={kvp.Value}")); + return connectionStringBuilder.ConnectionString; } - void MigrateRabbitMqManagementApiSettings(IList> connectionStringPairs) + void MigrateLicensingComponentRabbitMqManagementApiSettings(DbConnectionStringBuilder connectionStringBuilder) { - if (!details.TransportPackage.Name.Contains("rabbitmq", StringComparison.OrdinalIgnoreCase) || - connectionStringPairs.Any(kvp => kvp.Key.Equals("ManagementApiUrl", StringComparison.OrdinalIgnoreCase) || kvp.Key.Equals("ManagementApiUserName", StringComparison.OrdinalIgnoreCase))) + if (!details.TransportPackage.Name.Contains("rabbitmq", StringComparison.OrdinalIgnoreCase)) { return; } var settings = Config.AppSettings.Settings; - var legacySetting = settings["LicensingComponent/RabbitMQ/ApiUrl"]; - if (legacySetting is not null) + var legacySetting = settings[ServiceControlSettings.LicensingComponentRabbitMqManagementApiUrl.Name]; + if (legacySetting is not null && !connectionStringBuilder.ContainsKey("ManagementApiUrl")) { - connectionStringPairs.Add(new KeyValuePair("ManagementApiUrl", legacySetting.Value)); + connectionStringBuilder.Add("ManagementApiUrl", legacySetting.Value); } - legacySetting = settings["LicensingComponent/RabbitMQ/UserName"]; - if (legacySetting is not null) + legacySetting = settings[ServiceControlSettings.LicensingComponentRabbitMqManagementApiUsername.Name]; + if (legacySetting is not null && !connectionStringBuilder.ContainsKey("ManagementApiUserName")) { - connectionStringPairs.Add(new KeyValuePair("ManagementApiUserName", legacySetting.Value)); + connectionStringBuilder.Add("ManagementApiUserName", legacySetting.Value); } - legacySetting = settings["LicensingComponent/RabbitMQ/Password"]; - if (legacySetting is not null) + legacySetting = settings[ServiceControlSettings.LicensingComponentRabbitMqManagementApiPassword.Name]; + if (legacySetting is not null && !connectionStringBuilder.ContainsKey("ManagementApiPassword")) { - connectionStringPairs.Add(new KeyValuePair("ManagementApiPassword", legacySetting.Value)); + connectionStringBuilder.Add("ManagementApiPassword", legacySetting.Value); } } diff --git a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/SettingsList.cs b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/SettingsList.cs index 07ab9d67ad..d356247afa 100644 --- a/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/SettingsList.cs +++ b/src/ServiceControlInstaller.Engine/Configuration/ServiceControl/SettingsList.cs @@ -90,19 +90,19 @@ public static class ServiceControlSettings SupportedFrom = new SemanticVersion(4, 17, 0) }; - public static readonly SettingInfo RabbitMqManagementApiUrl = new() + public static readonly SettingInfo LicensingComponentRabbitMqManagementApiUrl = new() { Name = "LicensingComponent/RabbitMQ/ApiUrl", RemovedFrom = new SemanticVersion(6, 5, 0) }; - public static readonly SettingInfo RabbitMqManagementApiUsername = new() + public static readonly SettingInfo LicensingComponentRabbitMqManagementApiUsername = new() { Name = "LicensingComponent/RabbitMQ/UserName", RemovedFrom = new SemanticVersion(6, 5, 0) }; - public static readonly SettingInfo RabbitMqManagementApiPassword = new() + public static readonly SettingInfo LicensingComponentRabbitMqManagementApiPassword = new() { Name = "LicensingComponent/RabbitMQ/Password", RemovedFrom = new SemanticVersion(6, 5, 0)