This SDK manages MongoDB Atlas Organizations as Azure ARM resources for marketplace integration. It does NOT directly manage:
Atlas clusters
Databases
Collections
Users/roles
For cluster management, use the MongoDB Atlas API directly after creating the organization.
Authentication
usingAzure.Identity;usingAzure.ResourceManager;usingAzure.ResourceManager.MongoDBAtlas;usingAzure.ResourceManager.MongoDBAtlas.Models;// Create ARM client with DefaultAzureCredentialvar credential =newDefaultAzureCredential();var armClient =newArmClient(credential);
Core Types
Type
Purpose
MongoDBAtlasOrganizationResource
ARM resource representing an Atlas organization
MongoDBAtlasOrganizationCollection
Collection of organizations in a resource group
MongoDBAtlasOrganizationData
Data model for organization resource
MongoDBAtlasOrganizationProperties
Organization-specific properties
MongoDBAtlasMarketplaceDetails
Azure Marketplace subscription details
MongoDBAtlasOfferDetails
Marketplace offer configuration
MongoDBAtlasUserDetails
User information for the organization
MongoDBAtlasPartnerProperties
MongoDB-specific properties (org name, ID)
Workflows
Get Organization Collection
// Get resource groupvar subscription =await armClient.GetDefaultSubscriptionAsync();var resourceGroup =await subscription.GetResourceGroupAsync("my-resource-group");// Get organizations collectionMongoDBAtlasOrganizationCollection organizations = resourceGroup.Value.GetMongoDBAtlasOrganizations();
Create Organization
var organizationName ="my-atlas-org";var location = AzureLocation.EastUS2;// Build organization datavar organizationData =newMongoDBAtlasOrganizationData(location){ Properties =newMongoDBAtlasOrganizationProperties(marketplace:newMongoDBAtlasMarketplaceDetails(subscriptionId:"your-azure-subscription-id",offerDetails:newMongoDBAtlasOfferDetails(publisherId:"mongodb",offerId:"mongodb_atlas_azure_native_prod",planId:"private_plan",planName:"Pay as You Go (Free) (Private)",termUnit:"P1M",termId:"gmz7xq9ge3py")),user:newMongoDBAtlasUserDetails(emailAddress:"admin@example.com",upn:"admin@example.com"){ FirstName ="Admin", LastName ="User"}){ PartnerProperties =newMongoDBAtlasPartnerProperties{ OrganizationName = organizationName
}}, Tags ={["Environment"]="Production"}};// Create the organization (long-running operation)var operation =await organizations.CreateOrUpdateAsync( WaitUntil.Completed, organizationName, organizationData
);MongoDBAtlasOrganizationResource organization = operation.Value;Console.WriteLine($"Created: {organization.Id}");
Get Existing Organization
// Option 1: From collectionMongoDBAtlasOrganizationResource org =await organizations.GetAsync("my-atlas-org");// Option 2: From resource identifiervar resourceId = MongoDBAtlasOrganizationResource.CreateResourceIdentifier(subscriptionId:"subscription-id",resourceGroupName:"my-resource-group",organizationName:"my-atlas-org");MongoDBAtlasOrganizationResource org2 = armClient.GetMongoDBAtlasOrganizationResource(resourceId);await org2.GetAsync();// Fetch data
List Organizations
// List in resource groupawaitforeach(var org in organizations.GetAllAsync()){ Console.WriteLine($"Org: {org.Data.Name}"); Console.WriteLine($" Location: {org.Data.Location}"); Console.WriteLine($" State: {org.Data.Properties?.ProvisioningState}");}// List across subscriptionawaitforeach(var org in subscription.GetMongoDBAtlasOrganizationsAsync()){ Console.WriteLine($"Org: {org.Data.Name} in {org.Data.Id}");}
Update Tags
// Add a single tagawait organization.AddTagAsync("CostCenter","12345");// Replace all tagsawait organization.SetTagsAsync(newDictionary<string,string>{["Environment"]="Production",["Team"]="Platform"});// Remove a tagawait organization.RemoveTagAsync("OldTag");
Update Organization Properties
var patch =newMongoDBAtlasOrganizationPatch{ Tags ={["UpdatedAt"]= DateTime.UtcNow.ToString("o")}, Properties =newMongoDBAtlasOrganizationUpdateProperties{// Update user details if needed User =newMongoDBAtlasUserDetails(emailAddress:"newadmin@example.com",upn:"newadmin@example.com")}};var updateOperation =await organization.UpdateAsync( WaitUntil.Completed, patch
);
// Prefer async for all operationsvar org =await organizations.GetAsync("my-org");await org.Value.AddTagAsync("key","value");
Handle Long-Running Operations
// Wait for completionvar operation =await organizations.CreateOrUpdateAsync( WaitUntil.Completed,// Blocks until done name, data
);// Or start and poll latervar operation =await organizations.CreateOrUpdateAsync( WaitUntil.Started,// Returns immediately name, data
);// Poll for completionwhile(!operation.HasCompleted){await Task.Delay(TimeSpan.FromSeconds(5));await operation.UpdateStatusAsync();}
Check Provisioning State
var org =await organizations.GetAsync("my-org");if(org.Value.Data.Properties?.ProvisioningState == MongoDBAtlasResourceProvisioningState.Succeeded){ Console.WriteLine("Organization is ready");}
Use Resource Identifiers
// Create identifier without API callvar resourceId = MongoDBAtlasOrganizationResource.CreateResourceIdentifier( subscriptionId, resourceGroupName, organizationName
);// Get resource handle (no data yet)var orgResource = armClient.GetMongoDBAtlasOrganizationResource(resourceId);// Fetch data when neededvar response =await orgResource.GetAsync();