feat: Add Official Microsoft & Gemini Skills (845+ Total)
🚀 Impact Significantly expands the capabilities of **Antigravity Awesome Skills** by integrating official skill collections from **Microsoft** and **Google Gemini**. This update increases the total skill count to **845+**, making the library even more comprehensive for AI coding assistants. ✨ Key Changes 1. New Official Skills - **Microsoft Skills**: Added a massive collection of official skills from [microsoft/skills](https://github.com/microsoft/skills). - Includes Azure, .NET, Python, TypeScript, and Semantic Kernel skills. - Preserves the original directory structure under `skills/official/microsoft/`. - Includes plugin skills from the `.github/plugins` directory. - **Gemini Skills**: Added official Gemini API development skills under `skills/gemini-api-dev/`. 2. New Scripts & Tooling - **`scripts/sync_microsoft_skills.py`**: A robust synchronization script that: - Clones the official Microsoft repository. - Preserves the original directory heirarchy. - Handles symlinks and plugin locations. - Generates attribution metadata. - **`scripts/tests/inspect_microsoft_repo.py`**: Debug tool to inspect the remote repository structure. - **`scripts/tests/test_comprehensive_coverage.py`**: Verification script to ensure 100% of skills are captured during sync. 3. Core Improvements - **`scripts/generate_index.py`**: Enhanced frontmatter parsing to safely handle unquoted values containing `@` symbols and commas (fixing issues with some Microsoft skill descriptions). - **`package.json`**: Added `sync:microsoft` and `sync:all-official` scripts for easy maintenance. 4. Documentation - Updated `README.md` to reflect the new skill counts (845+) and added Microsoft/Gemini to the provider list. - Updated `CATALOG.md` and `skills_index.json` with the new skills. 🧪 Verification - Ran `scripts/tests/test_comprehensive_coverage.py` to verify all Microsoft skills are detected. - Validated `generate_index.py` fixes by successfully indexing the new skills.
This commit is contained in:
@@ -0,0 +1,230 @@
|
||||
---
|
||||
name: azure-mgmt-arizeaiobservabilityeval-dotnet
|
||||
description: |
|
||||
Azure Resource Manager SDK for Arize AI Observability and Evaluation (.NET). Use when managing Arize AI organizations
|
||||
on Azure via Azure Marketplace, creating/updating/deleting Arize resources, or integrating Arize ML observability
|
||||
into .NET applications. Triggers: "Arize AI", "ML observability", "ArizeAIObservabilityEval", "Arize organization".
|
||||
package: Azure.ResourceManager.ArizeAIObservabilityEval
|
||||
---
|
||||
|
||||
# Azure.ResourceManager.ArizeAIObservabilityEval
|
||||
|
||||
.NET SDK for managing Arize AI Observability and Evaluation resources on Azure.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
dotnet add package Azure.ResourceManager.ArizeAIObservabilityEval --version 1.0.0
|
||||
```
|
||||
|
||||
## Package Info
|
||||
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| Package | `Azure.ResourceManager.ArizeAIObservabilityEval` |
|
||||
| Version | `1.0.0` (GA) |
|
||||
| API Version | `2024-10-01` |
|
||||
| ARM Type | `ArizeAi.ObservabilityEval/organizations` |
|
||||
| Dependencies | `Azure.Core` >= 1.46.2, `Azure.ResourceManager` >= 1.13.1 |
|
||||
|
||||
## Environment Variables
|
||||
|
||||
```bash
|
||||
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
|
||||
AZURE_TENANT_ID=<your-tenant-id>
|
||||
AZURE_CLIENT_ID=<your-client-id>
|
||||
AZURE_CLIENT_SECRET=<your-client-secret>
|
||||
```
|
||||
|
||||
## Authentication
|
||||
|
||||
```csharp
|
||||
using Azure.Identity;
|
||||
using Azure.ResourceManager;
|
||||
using Azure.ResourceManager.ArizeAIObservabilityEval;
|
||||
|
||||
// Always use DefaultAzureCredential
|
||||
var credential = new DefaultAzureCredential();
|
||||
var armClient = new ArmClient(credential);
|
||||
```
|
||||
|
||||
## Core Workflow
|
||||
|
||||
### Create an Arize AI Organization
|
||||
|
||||
```csharp
|
||||
using Azure.Core;
|
||||
using Azure.ResourceManager.Resources;
|
||||
using Azure.ResourceManager.ArizeAIObservabilityEval;
|
||||
using Azure.ResourceManager.ArizeAIObservabilityEval.Models;
|
||||
|
||||
// Get subscription and resource group
|
||||
var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
|
||||
var subscription = await armClient.GetSubscriptionResource(
|
||||
SubscriptionResource.CreateResourceIdentifier(subscriptionId)).GetAsync();
|
||||
var resourceGroup = await subscription.Value.GetResourceGroupAsync("my-resource-group");
|
||||
|
||||
// Get the organization collection
|
||||
var collection = resourceGroup.Value.GetArizeAIObservabilityEvalOrganizations();
|
||||
|
||||
// Create organization data
|
||||
var data = new ArizeAIObservabilityEvalOrganizationData(AzureLocation.EastUS)
|
||||
{
|
||||
Properties = new ArizeAIObservabilityEvalOrganizationProperties
|
||||
{
|
||||
Marketplace = new ArizeAIObservabilityEvalMarketplaceDetails
|
||||
{
|
||||
SubscriptionId = "marketplace-subscription-id",
|
||||
OfferDetails = new ArizeAIObservabilityEvalOfferDetails
|
||||
{
|
||||
PublisherId = "arikimlabs1649082416596",
|
||||
OfferId = "arize-liftr-1",
|
||||
PlanId = "arize-liftr-1-plan",
|
||||
PlanName = "Arize AI Plan",
|
||||
TermUnit = "P1M",
|
||||
TermId = "term-id"
|
||||
}
|
||||
},
|
||||
User = new ArizeAIObservabilityEvalUserDetails
|
||||
{
|
||||
FirstName = "John",
|
||||
LastName = "Doe",
|
||||
EmailAddress = "john.doe@example.com"
|
||||
}
|
||||
},
|
||||
Tags = { ["environment"] = "production" }
|
||||
};
|
||||
|
||||
// Create (long-running operation)
|
||||
var operation = await collection.CreateOrUpdateAsync(
|
||||
WaitUntil.Completed,
|
||||
"my-arize-org",
|
||||
data);
|
||||
|
||||
var organization = operation.Value;
|
||||
Console.WriteLine($"Created: {organization.Data.Name}");
|
||||
```
|
||||
|
||||
### Get an Organization
|
||||
|
||||
```csharp
|
||||
// Option 1: From collection
|
||||
var org = await collection.GetAsync("my-arize-org");
|
||||
|
||||
// Option 2: Check if exists first
|
||||
var exists = await collection.ExistsAsync("my-arize-org");
|
||||
if (exists.Value)
|
||||
{
|
||||
var org = await collection.GetAsync("my-arize-org");
|
||||
}
|
||||
|
||||
// Option 3: GetIfExists (returns null if not found)
|
||||
var response = await collection.GetIfExistsAsync("my-arize-org");
|
||||
if (response.HasValue)
|
||||
{
|
||||
var org = response.Value;
|
||||
}
|
||||
```
|
||||
|
||||
### List Organizations
|
||||
|
||||
```csharp
|
||||
// List in resource group
|
||||
await foreach (var org in collection.GetAllAsync())
|
||||
{
|
||||
Console.WriteLine($"Org: {org.Data.Name}, State: {org.Data.Properties?.ProvisioningState}");
|
||||
}
|
||||
|
||||
// List in subscription
|
||||
await foreach (var org in subscription.Value.GetArizeAIObservabilityEvalOrganizationsAsync())
|
||||
{
|
||||
Console.WriteLine($"Org: {org.Data.Name}");
|
||||
}
|
||||
```
|
||||
|
||||
### Update an Organization
|
||||
|
||||
```csharp
|
||||
// Update tags
|
||||
var org = await collection.GetAsync("my-arize-org");
|
||||
var updateData = new ArizeAIObservabilityEvalOrganizationPatch
|
||||
{
|
||||
Tags = { ["environment"] = "staging", ["team"] = "ml-ops" }
|
||||
};
|
||||
var updated = await org.Value.UpdateAsync(updateData);
|
||||
```
|
||||
|
||||
### Delete an Organization
|
||||
|
||||
```csharp
|
||||
var org = await collection.GetAsync("my-arize-org");
|
||||
await org.Value.DeleteAsync(WaitUntil.Completed);
|
||||
```
|
||||
|
||||
## Key Types
|
||||
|
||||
| Type | Purpose |
|
||||
|------|---------|
|
||||
| `ArizeAIObservabilityEvalOrganizationResource` | Main ARM resource for Arize organizations |
|
||||
| `ArizeAIObservabilityEvalOrganizationCollection` | Collection for CRUD operations |
|
||||
| `ArizeAIObservabilityEvalOrganizationData` | Resource data model |
|
||||
| `ArizeAIObservabilityEvalOrganizationProperties` | Organization properties |
|
||||
| `ArizeAIObservabilityEvalMarketplaceDetails` | Azure Marketplace subscription info |
|
||||
| `ArizeAIObservabilityEvalOfferDetails` | Marketplace offer configuration |
|
||||
| `ArizeAIObservabilityEvalUserDetails` | User contact information |
|
||||
| `ArizeAIObservabilityEvalOrganizationPatch` | Patch model for updates |
|
||||
| `ArizeAIObservabilityEvalSingleSignOnPropertiesV2` | SSO configuration |
|
||||
|
||||
## Enums
|
||||
|
||||
| Enum | Values |
|
||||
|------|--------|
|
||||
| `ArizeAIObservabilityEvalOfferProvisioningState` | `Succeeded`, `Failed`, `Canceled`, `Provisioning`, `Updating`, `Deleting`, `Accepted` |
|
||||
| `ArizeAIObservabilityEvalMarketplaceSubscriptionStatus` | `PendingFulfillmentStart`, `Subscribed`, `Suspended`, `Unsubscribed` |
|
||||
| `ArizeAIObservabilityEvalSingleSignOnState` | `Initial`, `Enable`, `Disable` |
|
||||
| `ArizeAIObservabilityEvalSingleSignOnType` | `Saml`, `OpenId` |
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Use async methods** — All operations support async/await
|
||||
2. **Handle long-running operations** — Use `WaitUntil.Completed` or poll manually
|
||||
3. **Use GetIfExistsAsync** — Avoid exceptions for conditional logic
|
||||
4. **Implement retry policies** — Configure via `ArmClientOptions`
|
||||
5. **Use resource identifiers** — For direct resource access without listing
|
||||
6. **Close clients properly** — Use `using` statements or dispose explicitly
|
||||
|
||||
## Error Handling
|
||||
|
||||
```csharp
|
||||
try
|
||||
{
|
||||
var org = await collection.GetAsync("my-arize-org");
|
||||
}
|
||||
catch (Azure.RequestFailedException ex) when (ex.Status == 404)
|
||||
{
|
||||
Console.WriteLine("Organization not found");
|
||||
}
|
||||
catch (Azure.RequestFailedException ex)
|
||||
{
|
||||
Console.WriteLine($"Azure error: {ex.Message}");
|
||||
}
|
||||
```
|
||||
|
||||
## Direct Resource Access
|
||||
|
||||
```csharp
|
||||
// Access resource directly by ID (without listing)
|
||||
var resourceId = ArizeAIObservabilityEvalOrganizationResource.CreateResourceIdentifier(
|
||||
subscriptionId,
|
||||
"my-resource-group",
|
||||
"my-arize-org");
|
||||
|
||||
var org = armClient.GetArizeAIObservabilityEvalOrganizationResource(resourceId);
|
||||
var data = await org.GetAsync();
|
||||
```
|
||||
|
||||
## Links
|
||||
|
||||
- [NuGet Package](https://www.nuget.org/packages/Azure.ResourceManager.ArizeAIObservabilityEval)
|
||||
- [Azure SDK for .NET](https://github.com/Azure/azure-sdk-for-net)
|
||||
- [Arize AI](https://arize.com/)
|
||||
354
skills/official/microsoft/dotnet/partner/mongodbatlas/SKILL.md
Normal file
354
skills/official/microsoft/dotnet/partner/mongodbatlas/SKILL.md
Normal file
@@ -0,0 +1,354 @@
|
||||
---
|
||||
name: azure-mgmt-mongodbatlas-dotnet
|
||||
description: Manage MongoDB Atlas Organizations as Azure ARM resources using Azure.ResourceManager.MongoDBAtlas SDK. Use when creating, updating, listing, or deleting MongoDB Atlas organizations through Azure Marketplace integration. This SDK manages the Azure-side organization resource, not Atlas clusters/databases directly.
|
||||
package: Azure.ResourceManager.MongoDBAtlas
|
||||
---
|
||||
|
||||
# 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](https://www.nuget.org/packages/Azure.ResourceManager.MongoDBAtlas) |
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```csharp
|
||||
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
|
||||
|
||||
```csharp
|
||||
// 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
|
||||
|
||||
```csharp
|
||||
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
|
||||
|
||||
```csharp
|
||||
// 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
|
||||
|
||||
```csharp
|
||||
// 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
|
||||
|
||||
```csharp
|
||||
// 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
|
||||
|
||||
```csharp
|
||||
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
|
||||
|
||||
```csharp
|
||||
// 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
|
||||
|
||||
```csharp
|
||||
// Prefer async for all operations
|
||||
var org = await organizations.GetAsync("my-org");
|
||||
await org.Value.AddTagAsync("key", "value");
|
||||
```
|
||||
|
||||
### Handle Long-Running Operations
|
||||
|
||||
```csharp
|
||||
// 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
|
||||
|
||||
```csharp
|
||||
var org = await organizations.GetAsync("my-org");
|
||||
if (org.Value.Data.Properties?.ProvisioningState ==
|
||||
MongoDBAtlasResourceProvisioningState.Succeeded)
|
||||
{
|
||||
Console.WriteLine("Organization is ready");
|
||||
}
|
||||
```
|
||||
|
||||
### Use Resource Identifiers
|
||||
|
||||
```csharp
|
||||
// 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
|
||||
|
||||
- [Microsoft Learn: MongoDB Atlas on Azure](https://learn.microsoft.com/en-us/azure/partner-solutions/mongodb-atlas/)
|
||||
- [API Reference](https://learn.microsoft.com/en-us/dotnet/api/azure.resourcemanager.mongodbatlas)
|
||||
- [Azure SDK for .NET](https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/mongodbatlas)
|
||||
Reference in New Issue
Block a user