Skip to content

Commit faef475

Browse files
committed
Allow services specified at cluster level to be server group defaults
1 parent 339b66f commit faef475

File tree

2 files changed

+27
-16
lines changed

2 files changed

+27
-16
lines changed

src/Couchbase.Aspire.Hosting/CouchbaseClusterBuilderExtensions.cs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,8 @@ await rns.PublishUpdateAsync(resource, s =>
258258
}
259259

260260
/// <summary>
261-
/// Specify the Couchbase services to be enabled on this cluster. Only applies if no server groups are added.
261+
/// Specify the Couchbase services to be enabled on this cluster. This is the default for any
262+
/// server groups added which do not explicitly specify services.
262263
/// </summary>
263264
/// <param name="builder">Builder for the Couchbase cluster.</param>
264265
/// <param name="services">The services to be enabled.</param>
@@ -268,15 +269,7 @@ public static IResourceBuilder<CouchbaseClusterResource> WithServices(this IReso
268269
{
269270
ArgumentNullException.ThrowIfNull(builder);
270271

271-
var serverGroup = builder.Resource.ServerGroups.Values.FirstOrDefault(p => p.IsDefaultServerGroup);
272-
if (serverGroup is null)
273-
{
274-
throw new InvalidOperationException("Services may only be set on the Couchbase cluster when no service groups are added. Use WithServices on the server group instead.");
275-
}
276-
277-
builder.ApplicationBuilder.CreateResourceBuilder(serverGroup).WithServices(services);
278-
279-
return builder;
272+
return builder.WithAnnotation(new CouchbaseServicesAnnotation(services), ResourceAnnotationMutationBehavior.Replace);
280273
}
281274

282275
public static IResourceBuilder<CouchbaseClusterResource> WithSettings(this IResourceBuilder<CouchbaseClusterResource> builder, Action<CouchbaseClusterSettingsCallbackContext> configureSettings)

src/Couchbase.Aspire.Hosting/CouchbaseResourceExtensions.cs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,37 @@ public static CouchbaseIndexStorageMode GetIndexStorageMode(this CouchbaseCluste
4848
: CouchbaseIndexStorageMode.ForestDB);
4949
}
5050

51-
public static CouchbaseServices GetCouchbaseServices(this ICouchbaseCustomResource resource)
51+
private static CouchbaseServices ApplyDefaults(this CouchbaseServices services) =>
52+
services == CouchbaseServices.Default
53+
? CouchbaseServicesAnnotation.DefaultServices
54+
: services;
55+
56+
private static CouchbaseServicesAnnotation? GetCouchbaseServicesAnnotation(this ICouchbaseCustomResource resource)
5257
{
5358
ArgumentNullException.ThrowIfNull(resource);
5459

55-
CouchbaseServices services = CouchbaseServices.Default;
5660
if (resource.TryGetLastAnnotation<CouchbaseServicesAnnotation>(out var annotation))
5761
{
58-
services = annotation.Services;
62+
return annotation;
5963
}
6064

61-
return services == CouchbaseServices.Default
62-
? CouchbaseServicesAnnotation.DefaultServices
63-
: services;
65+
return null;
66+
}
67+
68+
public static CouchbaseServices GetCouchbaseServices(this CouchbaseClusterResource cluster)
69+
{
70+
ArgumentNullException.ThrowIfNull(cluster);
71+
72+
return (cluster.GetCouchbaseServicesAnnotation()?.Services ?? CouchbaseServices.Default).ApplyDefaults();
73+
}
74+
75+
public static CouchbaseServices GetCouchbaseServices(this CouchbaseServerGroupResource serverGroup)
76+
{
77+
ArgumentNullException.ThrowIfNull(serverGroup);
78+
79+
var annotation = serverGroup.GetCouchbaseServicesAnnotation() ?? serverGroup.Parent.GetCouchbaseServicesAnnotation();
80+
81+
return (annotation?.Services ?? CouchbaseServices.Default).ApplyDefaults();
6482
}
6583

6684
public static CouchbaseServices GetCouchbaseServices(this CouchbaseServerResource server)

0 commit comments

Comments
 (0)