Add technology-based infrastructure connection strings#2273
Conversation
|
|
Co-authored-by: niemyjski <1020579+niemyjski@users.noreply.github.com>
|
Follow-up reviewer and thermo-nuclear audit complete at Feedback inventory:
Validation and RCA:
Thermo-nuclear review:
Verification:
No additional code change or push was needed in this follow-up. The only remaining merge blocker is administrative: the PR is still draft and |
…bbitmq-as-messagebus
…bbitmq-as-messagebus
…bbitmq-as-messagebus
…bbitmq-as-messagebus
|
Final live follow-up completed at head 980301b. Feedback disposition:
Current verification:
No commit or push was made because the live feedback and effective-diff audit found no surgical change to apply. The PR remains draft and BLOCKED only by the pending CLA status. |
Closes #1526
Summary
Infrastructure configuration is now technology-based: declare
Redis,RabbitMQ,AzureQueues,SQS,AzureStorage,S3,Aliyun, orFolderonce and Exceptionless selects only compatible roles.Existing
Cache,MessageBus,Queue, andStorageselectors remain supported as compatibility overrides. New installations can use technology-only connection strings; existing self-hosted deployments do not need to change.What changed
amqp://andamqps://RabbitMQ URIs, including encoded credentials, virtual hosts, query options, quotes, named values, inline values, and legacyserver=selectors.localas an explicit in-memory role override; blank legacy role values remain absent.EX_variables deterministically override ordinary/Aspire variables with the same normalized key.IConnectionMultiplexerregistration, and keeps WebSocket mapping on the cache connection.Aspire and deployment compatibility
The AppHost references remain
Redis,AzureStorage, andAzureQueuesfor both API and Jobs. Aspire injectsConnectionStrings__{resource-name}, so those existing names match the resolver without role selectors.The current Helm chart intentionally remains in legacy-selector mode. Its explicit role values continue to win, including folder Storage and existing PVC behavior. A rolling version-only upgrade is mixed-version compatible when every rendered role selector and exact effective connection string remains unchanged.
This PR also prevents bundled Redis and Elasticsearch pods from restarting merely because the app ConfigMap or chart package version changed: their pod templates no longer include the unrelated app-config checksum or version-bearing chart label. Application and job workloads retain their config checksums.
Removing a selector is safe only when the inferred provider and exact effective connection string are identical before and after removal. A real MessageBus, Queue, Storage, Cache, or endpoint change is a separate infrastructure migration and is not a zero-downtime rolling cleanup; use a bridge/dual-read-write strategy or a quiesce-and-drain maintenance procedure.
With the current chart, configure RabbitMQ through the compatibility value:
A named RabbitMQ string alone is intentionally shadowed by the chart's explicit MessageBus selector.
Documentation
Added a canonical self-hosting guide and four rendered diagrams covering:
EX_overridesFolder, andlocalThe Docker, Kubernetes, self-hosting index, and upgrade guides link to the canonical configuration contract.
Verification
Exact local head:
30c62e6db.dotnet test Exceptionless.slnx --configuration Release --no-build --no-restore: 2,759 total; 2,757 passed; 2 intentional performance-test skips; 0 failed.dotnet build Exceptionless.slnx --configuration Release --no-restore: 0 warnings, 0 errors.dotnet format --verify-no-changes: passed.git diff --check: passed.No Helm, Kubernetes, Docker, Aspire, container, deployment-script, or deployment command was run locally. Helm safety was audited statically.