Provisioning Cluster Resources
Provisioning cluster resources is managed at the collection or bucket level, depending upon the service affected. Common use cases are outlined here, less common use cases are covered in the API docs.
The primary means for managing clusters is through the Couchbase Web UI which provides an easy to use interface for adding, removing, monitoring and modifying buckets. In some instances you may wish to have a programmatic interface. For example, if you wish to manage a cluster from a setup script, or if you are setting up buckets in test scaffolding.
The .NET SDK also comes with some convenience functionality for common Couchbase management requests.
When using a Couchbase version earlier than 6.5, you must create a valid Bucket connection using cluster.Bucket(name) before you can use cluster level managers.
|
Creating and Removing Buckets
The ClusterManager
interface may be used to create and delete buckets from the Couchbase cluster.
It is instantiated through the Cluster.Buckets()
method.
Refer to the API documentation for details.
The CreateBucketSettings
and BucketSettings
structs are used for creating and updating buckets, BucketSettings
is also used for exposing information about existing buckets.
Note that any property that is not explicitly set when building the BucketSettings will use the default value.
In the case of the update, this is not necessarily the currently configured value, so you should be careful to set all properties to their correct expected values when updating an existing bucket configuration.
|
Flushing Buckets
When a bucket is flushed, all content is removed. Because this operation is potentially dangerous it is disabled by default for each bucket. Bucket flushing may be useful in test environments where it becomes a simpler alternative to removing and creating a test bucket. You may enable bucket flushing on a per-bucket basis using the Couchbase Web Console or when creating a bucket.
You can flush a bucket in the SDK by using FlushBucketAsync()
.
Collection Management
The CollectionManager interface may be used to create and delete scopes and collections from the Couchbase cluster.
It is instantiated through the Bucket.collections()
method.
Refer to the CollectionManager
API documentation
for further details.
ICouchbaseCollectionManager collectionMgr = bucket.Collections;
You can create a scope:
try {
await collectionMgr.CreateScopeAsync("example-scope");
}
catch (ScopeExistsException) {
Console.WriteLine("The scope already exists");
}
You can then create a collection within that scope:
var spec = new CollectionSpec("example-scope", "example-collection");
try {
await collectionMgr.CreateCollectionAsync(spec);
}
catch (CollectionExistsException) {
Console.WriteLine("Collection already exists");
}
catch (ScopeNotFoundException) {
Console.WriteLine("The specified parent scope doesn't exist");
}
Finally, you can drop unneeded collections and scopes:
try {
await collectionMgr.DropCollectionAsync(spec);
}
catch (CollectionNotFoundException) {
Console.WriteLine("The specified collection doesn't exist");
}
catch (ScopeNotFoundException) {
Console.WriteLine("The specified parent scope doesn't exist");
}
try {
await collectionMgr.DropScopeAsync("example-scope");
}
catch (ScopeNotFoundException) {
Console.WriteLine("The specified scope doesn't exist");
}
Note that the most minimal permissions to create and drop a Scope or Collection is Manage Scopes along with Data Reader.
You can create users with the appropriate RBAC programmatically:
ICluster clusterAdmin = await Cluster.ConnectAsync(
"couchbase://localhost", "Administrator", "password");
IUserManager users = clusterAdmin.Users;
var user = new User("scopeAdmin") {
Password = "password",
DisplayName = "Manage Scopes [travel-sample:*]",
Roles = new List<Role>() {
new Role("scope_admin", "travel-sample"),
new Role("data_reader", "travel-sample")}
};
await users.UpsertUserAsync(user);
Listing the Scopes and Collections available
You can enumerate Scopes and Collections using
the CollectionManager
and the properties of the
ScopeSpec
and CollectionSpec
objects retrieved.
var scopes = await collectionMgr.GetAllScopesAsync();
foreach (ScopeSpec scopeSpec in scopes) {
Console.WriteLine($"Scope: {scopeSpec.Name}");
foreach (CollectionSpec collectionSpec in scopeSpec.Collections) {
Console.WriteLine($" - {collectionSpec.Name}");
}
}
View Management
Views are stored in design documents. The SDK provides convenient methods to create, retrieve, and remove design documents. To set up views, you create design documents that contain one or more view definitions, and then insert the design documents into a bucket. Each view in a design document is represented by a name and a set of MapReduce functions. The mandatory map function describes how to select and transform the data from the bucket, and the optional reduce function describes how to aggregate the results.
In the SDK, design documents are represented by the DesignDocument
and View
structs.
All operations on design documents are performed on the ViewIndexManager
instance: