azure-mgmt-mongodbatlas-dotnet

📁 microsoft/skills 📅 9 days ago
0
总安装量
3
周安装量
#55978
全站排名
安装命令
npx skills add https://github.com/microsoft/skills --skill azure-mgmt-mongodbatlas-dotnet

Agent 安装分布

opencode 2
gemini-cli 2
claude-code 2
codex 2
antigravity 1

Skill 文档

Azure.ResourceManager.MongoDBAtlas SDK

Manage MongoDB Atlas Organizations as Azure ARM resources with unified billing through Azure Marketplace.

Package Information

Property Value
Package Azure.ResourceManager.MongoDBAtlas
Version 1.0.0 (GA)
API Version 2025-06-01
Resource Type MongoDB.Atlas/organizations
NuGet Azure.ResourceManager.MongoDBAtlas

Installation

dotnet add package Azure.ResourceManager.MongoDBAtlas
dotnet add package Azure.Identity
dotnet add package Azure.ResourceManager

Important Scope Limitation

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

using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.MongoDBAtlas;
using Azure.ResourceManager.MongoDBAtlas.Models;

// Create ARM client with DefaultAzureCredential
var credential = new DefaultAzureCredential();
var armClient = new ArmClient(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 group
var subscription = await armClient.GetDefaultSubscriptionAsync();
var resourceGroup = await subscription.GetResourceGroupAsync("my-resource-group");

// Get organizations collection
MongoDBAtlasOrganizationCollection organizations = 
    resourceGroup.Value.GetMongoDBAtlasOrganizations();

Create Organization

var organizationName = "my-atlas-org";
var location = AzureLocation.EastUS2;

// Build organization data
var organizationData = new MongoDBAtlasOrganizationData(location)
{
    Properties = new MongoDBAtlasOrganizationProperties(
        marketplace: new MongoDBAtlasMarketplaceDetails(
            subscriptionId: "your-azure-subscription-id",
            offerDetails: new MongoDBAtlasOfferDetails(
                publisherId: "mongodb",
                offerId: "mongodb_atlas_azure_native_prod",
                planId: "private_plan",
                planName: "Pay as You Go (Free) (Private)",
                termUnit: "P1M",
                termId: "gmz7xq9ge3py"
            )
        ),
        user: new MongoDBAtlasUserDetails(
            emailAddress: "admin@example.com",
            upn: "admin@example.com"
        )
        {
            FirstName = "Admin",
            LastName = "User"
        }
    )
    {
        PartnerProperties = new MongoDBAtlasPartnerProperties
        {
            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 collection
MongoDBAtlasOrganizationResource org = 
    await organizations.GetAsync("my-atlas-org");

// Option 2: From resource identifier
var 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 group
await foreach (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 subscription
await foreach (var org in subscription.GetMongoDBAtlasOrganizationsAsync())
{
    Console.WriteLine($"Org: {org.Data.Name} in {org.Data.Id}");
}

Update Tags

// Add a single tag
await organization.AddTagAsync("CostCenter", "12345");

// Replace all tags
await organization.SetTagsAsync(new Dictionary<string, string>
{
    ["Environment"] = "Production",
    ["Team"] = "Platform"
});

// Remove a tag
await organization.RemoveTagAsync("OldTag");

Update Organization Properties

var patch = new MongoDBAtlasOrganizationPatch
{
    Tags = { ["UpdatedAt"] = DateTime.UtcNow.ToString("o") },
    Properties = new MongoDBAtlasOrganizationUpdateProperties
    {
        // Update user details if needed
        User = new MongoDBAtlasUserDetails(
            emailAddress: "newadmin@example.com",
            upn: "newadmin@example.com"
        )
    }
};

var updateOperation = await organization.UpdateAsync(
    WaitUntil.Completed,
    patch
);

Delete Organization

// Delete (long-running operation)
await organization.DeleteAsync(WaitUntil.Completed);

Model Properties Reference

MongoDBAtlasOrganizationProperties

Property Type Description
Marketplace MongoDBAtlasMarketplaceDetails Required. Marketplace subscription details
User MongoDBAtlasUserDetails Required. Organization admin user
PartnerProperties MongoDBAtlasPartnerProperties MongoDB-specific properties
ProvisioningState MongoDBAtlasResourceProvisioningState Read-only. Current provisioning state

MongoDBAtlasMarketplaceDetails

Property Type Description
SubscriptionId string Required. Azure subscription ID for billing
OfferDetails MongoDBAtlasOfferDetails Required. Marketplace offer configuration
SubscriptionStatus MarketplaceSubscriptionStatus Read-only. Subscription status

MongoDBAtlasOfferDetails

Property Type Description
PublisherId string Required. Publisher ID (typically “mongodb”)
OfferId string Required. Offer ID
PlanId string Required. Plan ID
PlanName string Required. Display name of the plan
TermUnit string Required. Billing term unit (e.g., “P1M”)
TermId string Required. Term identifier

MongoDBAtlasUserDetails

Property Type Description
EmailAddress string Required. User email address
Upn string Required. User principal name
FirstName string Optional. User first name
LastName string Optional. User last name

MongoDBAtlasPartnerProperties

Property Type Description
OrganizationName string Name of the MongoDB Atlas organization
OrganizationId string Read-only. MongoDB Atlas organization ID

Provisioning States

State Description
Succeeded Resource provisioned successfully
Failed Provisioning failed
Canceled Provisioning was canceled
Provisioning Resource is being provisioned
Updating Resource is being updated
Deleting Resource is being deleted
Accepted Request accepted, provisioning starting

Marketplace Subscription Status

Status Description
PendingFulfillmentStart Subscription pending activation
Subscribed Active subscription
Suspended Subscription suspended
Unsubscribed Subscription canceled

Best Practices

Use Async Methods

// Prefer async for all operations
var org = await organizations.GetAsync("my-org");
await org.Value.AddTagAsync("key", "value");

Handle Long-Running Operations

// Wait for completion
var operation = await organizations.CreateOrUpdateAsync(
    WaitUntil.Completed,  // Blocks until done
    name,
    data
);

// Or start and poll later
var operation = await organizations.CreateOrUpdateAsync(
    WaitUntil.Started,  // Returns immediately
    name,
    data
);

// Poll for completion
while (!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 call
var resourceId = MongoDBAtlasOrganizationResource.CreateResourceIdentifier(
    subscriptionId,
    resourceGroupName,
    organizationName
);

// Get resource handle (no data yet)
var orgResource = armClient.GetMongoDBAtlasOrganizationResource(resourceId);

// Fetch data when needed
var response = await orgResource.GetAsync();

Common Errors

Error Cause Solution
ResourceNotFound Organization doesn’t exist Verify name and resource group
AuthorizationFailed Insufficient permissions Check RBAC roles on resource group
InvalidParameter Missing required properties Ensure all required fields are set
MarketplaceError Marketplace subscription issue Verify offer details and subscription

Related Resources