Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Storage mgmt track 2 library #23564

Merged
merged 44 commits into from
Sep 1, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
a2e5080
Feature/mgmt track2 storage2 (#23468)
yukun-dong Aug 24, 2021
3c0f17e
add and change some test cases
yukun-dong Aug 24, 2021
54192ee
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Aug 24, 2021
af8fed8
add some storage account test cases
yukun-dong Aug 25, 2021
ce14f13
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Aug 25, 2021
6f67cf4
regenerate code using autorest c# v3.0.0 beta.20210825.1
yukun-dong Aug 26, 2021
def95d7
add some storage account test cases
yukun-dong Aug 26, 2021
76c6a28
modify some test cases
yukun-dong Aug 26, 2021
3640df2
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Aug 26, 2021
189a7ca
regenerate code using autorest c# v3.0.0-beta20210825.2
yukun-dong Aug 26, 2021
620140d
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Aug 26, 2021
090df19
update api
yukun-dong Aug 26, 2021
cec8bfb
generate code using autorest c# v3.0.0-beta.20210826.2
yukun-dong Aug 27, 2021
7dc330c
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Aug 27, 2021
6d41dd9
update api and README.md
yukun-dong Aug 27, 2021
85e63d0
update changelog
yukun-dong Aug 27, 2021
4abff81
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Aug 30, 2021
67ea4ba
change README.md file
yukun-dong Aug 30, 2021
4bf66a7
change README.md
yukun-dong Aug 30, 2021
9d6ae27
bump storage version
yukun-dong Aug 30, 2021
cf8b04a
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Aug 30, 2021
ba3e030
modify samples' typos
yukun-dong Aug 30, 2021
eb98ebc
modify samples and update snippets
yukun-dong Aug 30, 2021
491f42c
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Aug 30, 2021
f2c4aa3
regenerate using autorest c# 3.0.0-beta.20210830.1
yukun-dong Aug 31, 2021
20b103b
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Aug 31, 2021
19ae8fb
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Aug 31, 2021
251085e
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Aug 31, 2021
fe7cf31
modify createResourceGroup method due to ResourceManager's version ch…
yukun-dong Aug 31, 2021
f4337e5
update snippets
yukun-dong Aug 31, 2021
d22b782
add storage account test case
yukun-dong Aug 31, 2021
1b9522c
add one blob container test case
yukun-dong Aug 31, 2021
3efd00a
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Sep 1, 2021
cf4c272
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Sep 1, 2021
ccea54e
change mgmt storage version
yukun-dong Sep 1, 2021
deb9546
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Sep 1, 2021
d2b8182
fix compile errors in eventhub and network; modify typos in storage c…
yukun-dong Sep 1, 2021
093406e
fix confict in data props
yukun-dong Sep 1, 2021
de82d31
fix merge conflicts
yukun-dong Sep 1, 2021
612f7fc
ignore storage account list key test
yukun-dong Sep 1, 2021
931a8c7
Merge remote-tracking branch 'upstream/main' into feature/mgmt-track2…
yukun-dong Sep 1, 2021
8ff2d01
remove records that are not used
yukun-dong Sep 1, 2021
3f627f9
update with prepare release
m-nash Sep 1, 2021
eedc7ab
merge main
m-nash Sep 1, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion eng/Packages.Data.props
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@
<PackageReference Update="Azure.ResourceManager.Compute" Version="1.0.0-beta.1" />
<PackageReference Update="Azure.ResourceManager.Network" Version="1.0.0-beta.1" />
<PackageReference Update="Azure.ResourceManager.Resources" Version="1.0.0-beta.1" />
<PackageReference Update="Azure.ResourceManager.Storage" Version="1.0.0-preview.2" />
<PackageReference Update="Azure.ResourceManager.Storage" Version="1.0.0-alpha.20210831.3" />
<PackageReference Update="Azure.Search.Documents" Version="11.2.0" />
<PackageReference Update="Azure.Security.KeyVault.Secrets" Version="4.2.0-beta.4" />
<PackageReference Update="Azure.Storage.Blobs" Version="12.8.0" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ public abstract class EventHubsManagementClientBase : ManagementRecordedTestBase
public NamespacesOperations NamespacesOperations { get; set; }
public ConsumerGroupsOperations ConsumerGroupsOperations { get; set; }
public DisasterRecoveryConfigsOperations DisasterRecoveryConfigsOperations { get; set; }
public StorageManagementClient StorageManagementClient { get; set; }

protected EventHubsManagementClientBase(bool isAsync)
: base(isAsync)
Expand All @@ -42,8 +41,6 @@ protected void InitializeClients()
ConsumerGroupsOperations = EventHubsManagementClient.ConsumerGroups;
DisasterRecoveryConfigsOperations = EventHubsManagementClient.DisasterRecoveryConfigs;
Operations = EventHubsManagementClient.Operations;

StorageManagementClient = GetStorageManagementClient();
}

internal EventHubsManagementClient GetEventHubManagementClient()
Expand All @@ -52,14 +49,6 @@ internal EventHubsManagementClient GetEventHubManagementClient()
TestEnvironment.Credential,
InstrumentClientOptions(new EventHubsManagementClientOptions()));
}

internal StorageManagementClient GetStorageManagementClient()
{
return CreateClient<StorageManagementClient>(this.SubscriptionId,
TestEnvironment.Credential,
InstrumentClientOptions(new StorageManagementClientOptions()));
}

internal ArmClient GetArmClient()
{
var options = InstrumentClientOptions(new ArmClientOptions());
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Azure.ResourceManager.EventHubs.Models;
using Azure.ResourceManager.EventHubs.Tests;
using Azure.ResourceManager.Storage.Models;
using Azure.ResourceManager.Storage;
using NUnit.Framework;

namespace Azure.Management.EventHub.Tests
Expand Down Expand Up @@ -41,7 +42,7 @@ public async Task EventCreateGetUpdateDelete()
{
var location = await GetLocation();
var resourceGroupName = Recording.GenerateAssetName(Helper.ResourceGroupPrefix);
await ArmClient.DefaultSubscription.GetResourceGroups().CreateOrUpdateAsync(resourceGroupName, new ResourceGroupData(location));
ResourceGroup resourceGroup=(await ArmClient.DefaultSubscription.GetResourceGroups().CreateOrUpdateAsync(resourceGroupName, new ResourceGroupData(location))).Value;

// Prepare Storage Account
var accountName = Recording.GenerateAssetName("sdktestaccount");
Expand All @@ -53,8 +54,8 @@ public async Task EventCreateGetUpdateDelete()
{
AccessTier = AccessTier.Hot
};
await WaitForCompletionAsync(await StorageManagementClient.StorageAccounts.StartCreateAsync(resourceGroupName, accountName, storageAccountCreateParameters));

StorageAccountContainer storageAccountContainer = resourceGroup.GetStorageAccounts();
await storageAccountContainer.CreateOrUpdateAsync(accountName, storageAccountCreateParameters);
// Create NameSpace
var namespaceName = Recording.GenerateAssetName(Helper.NamespacePrefix);
var createNamespaceResponse = await NamespacesOperations.StartCreateOrUpdateAsync(resourceGroupName, namespaceName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Azure.Identity" />
<PackageReference Include="Azure.ResourceManager.Storage" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
using Azure.ResourceManager.Network.Tests.Helpers;
using Azure.ResourceManager.Resources;
using NUnit.Framework;
using Azure.ResourceManager.Storage.Models;
using Azure.ResourceManager.Storage;
using Azure.ResourceManager.Network.Models;

namespace Azure.ResourceManager.Network.Tests.Tests
Expand All @@ -16,7 +18,7 @@ public class PrivateEndpointTests : NetworkServiceClientTestBase
private VirtualNetwork virtualNetwork;
private GenericResource privateDnsZone;
private Resources.ResourceGroup resourceGroup;
private GenericResource storageAccount;
private StorageAccount storageAccount;

public PrivateEndpointTests(bool isAsync) : base(isAsync)
{
Expand Down Expand Up @@ -56,21 +58,23 @@ private async Task<Response<VirtualNetwork>> createVirtualNetwork()
return await resourceGroup.GetVirtualNetworks().CreateOrUpdate(name, vnet).WaitForCompletionAsync();
}

private async Task<GenericResource> createStorageAccount()
private async Task<StorageAccount> createStorageAccount()
{
var name = Recording.GenerateAssetName("testsa");
var storageAccountId = $"/subscriptions/{TestEnvironment.SubscriptionId}/resourceGroups/{resourceGroup.Data.Name}/providers/Microsoft.Storage/storageAccounts/{name}";
var parameters = new StorageAccountCreateParameters(new Storage.Models.Sku(SkuName.StandardLRS),Kind.Storage,TestEnvironment.Location);
return (await resourceGroup.GetStorageAccounts().CreateOrUpdateAsync(name,parameters)).Value;
//var storageAccountId = $"/subscriptions/{TestEnvironment.SubscriptionId}/resourceGroups/{resourceGroup.Data.Name}/providers/Microsoft.Storage/storageAccounts/{name}";

//var storageParameters = new Storage.Models.StorageAccountCreateParameters(new Storage.Models.Sku(Storage.Models.SkuName.StandardLRS), Storage.Models.Kind.Storage, TestEnvironment.Location);
//var accountOperation = await StorageManagementClient.StorageAccounts.CreateAsync(resourceGroup.Data.Name, name, storageParameters);
//Response<Storage.Models.StorageAccount> account = await accountOperation.WaitForCompletionAsync();
//return account.Value;

return (await ArmClient.DefaultSubscription.GetGenericResources().CreateOrUpdateAsync(storageAccountId, new GenericResourceData(TestEnvironment.Location)
{
//Sku = new Resources.Models.Sku(),
Kind = "storage",
})).Value;
//return (await ArmClient.DefaultSubscription.GetGenericResources().CreateOrUpdateAsync(storageAccountId, new GenericResourceData(TestEnvironment.Location)
//{
// //Sku = new Resources.Models.Sku(),
// Kind = "storage",
//})).Value;
}

private async Task CleanUpVirtualNetwork()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30011.22
# Visual Studio Version 17
VisualStudioVersion = 17.0.31630.363
MinimumVisualStudioVersion = 15.0.26124.0
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.Core", "..\..\core\Azure.Core\src\Azure.Core.csproj", "{94E23818-B4C6-4E73-A3B5-7BFE379999CD}"
EndProject
Expand All @@ -10,8 +10,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.ResourceManager.Stora
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.ResourceManager.Storage.Tests", "tests\Azure.ResourceManager.Storage.Tests.csproj", "{48D7DDA4-78A6-40D2-9366-32CDBB14E841}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Azure.Identity", "..\..\identity\Azure.Identity\src\Azure.Identity.csproj", "{DFC96D0F-45EE-4B39-9D03-0C99A7A4EC93}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -34,10 +32,6 @@ Global
{48D7DDA4-78A6-40D2-9366-32CDBB14E841}.Debug|Any CPU.Build.0 = Debug|Any CPU
{48D7DDA4-78A6-40D2-9366-32CDBB14E841}.Release|Any CPU.ActiveCfg = Release|Any CPU
{48D7DDA4-78A6-40D2-9366-32CDBB14E841}.Release|Any CPU.Build.0 = Release|Any CPU
{DFC96D0F-45EE-4B39-9D03-0C99A7A4EC93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DFC96D0F-45EE-4B39-9D03-0C99A7A4EC93}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DFC96D0F-45EE-4B39-9D03-0C99A7A4EC93}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DFC96D0F-45EE-4B39-9D03-0C99A7A4EC93}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
42 changes: 15 additions & 27 deletions sdk/storage/Azure.ResourceManager.Storage/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
# Release History

## 1.0.0-preview.3 (Unreleased)


## 1.0.0-preview.2 (2020-09-23)

- Accept header added to all requests.
- Collections are now always initialized and collection properties are readonly by default.

## 1.0.0-preview.1
## 1.0.0-beta.1 (2021-09-01)

This package follows the [Azure SDK Design Guidelines for .NET](https://azure.github.io/azure-sdk/dotnet_introduction.html) which provide a number of core capabilities that are shared amongst all Azure SDKs, including the intuitive Azure Identity library, an HTTP Pipeline with custom policies, error-handling, distributed tracing, and much more.

Expand All @@ -24,8 +16,6 @@ This is a Public Preview version, so expect incompatible changes in subsequent r

> NOTE: For more information about unified authentication, please refer to [Azure Identity documentation for .NET](https://docs.microsoft.com//dotnet/api/overview/azure/identity-readme?view=azure-dotnet)

### Migration from Previous Version of Azure Management SDK

#### Package Name
The package name has been changed from `Microsoft.Azure.Management.Storage` to `Azure.ResourceManager.Storage`

Expand Down Expand Up @@ -58,24 +48,22 @@ storageManagementClient.StorageAccounts.Create(resourceGroupName, accountName, p
```

After upgrade:
```csharp
```C# Snippet:Create_Storage_Account
using System.Collections.Generic;
using Azure.Identity;
using Azure.ResourceManager.Storage;
using Azure.ResourceManager.Resources;
using Azure.ResourceManager.Resources.Models;
using Azure.ResourceManager.Storage.Models;

var storageManagementClient = new StorageManagementClient(subscriptionId, new DefaultAzureCredential());
var storageAccountsOperations = storageManagementClient.StorageAccounts;

var parameters = new StorageAccountCreateParameters(new Sku(SkuName.StandardGRS), Kind.Storage, "westus")
{
Tags = new Dictionary<string, string>
{
{"key1","value1"},
{"key2","value2"}
}
};
var accountResponse = await storageAccountsOperations.StartCreateAsync(resourceGroupName, accountName, parameters);
StorageAccount account = await accountResponse.WaitForCompletionAsync();
string accountName = "myaccount";
string resourceGropuName = "myResourceGroup";
ArmClient client = new ArmClient(new DefaultAzureCredential());
ResourceGroup resourceGroup = client.DefaultSubscription.GetResourceGroups().Get(resourceGropuName);
StorageAccountContainer storageAccountContainer = resourceGroup.GetStorageAccounts();
Sku sku = new Sku(SkuName.PremiumLRS);
StorageAccountCreateParameters parameters = new StorageAccountCreateParameters(new Sku(SkuName.StandardGRS), Kind.Storage, Location.WestUS);
parameters.Tags.Add("key1", "value1");
parameters.Tags.Add("key2", "value2");
StorageAccount account = storageAccountContainer.CreateOrUpdate(accountName, parameters).Value;
```

#### Object Model Changes
Expand Down
131 changes: 114 additions & 17 deletions sdk/storage/Azure.ResourceManager.Storage/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,46 +9,143 @@ This package follows the [new Azure SDK guidelines](https://azure.github.io/azur
Install the Azure Storage management library for .NET with [NuGet](https://www.nuget.org/):

```PowerShell
Install-Package Azure.ResourceManager.Storage -Version 1.0.0-preview.2
Install-Package Azure.ResourceManager.Storage -Version 1.0.0-beta1
```

### Prerequisites
Set up a way to authenticate to Azure with Azure Identity.

* You must have an [Azure subscription](https://azure.microsoft.com/free/dotnet/)
Some options are:
- Through the [Azure CLI Login](https://docs.microsoft.com/cli/azure/authenticate-azure-cli).
- Via [Visual Studio](https://docs.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#authenticating-via-visual-studio).
- Setting [Environment Variables](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/resourcemanager/Azure.ResourceManager/docs/AuthUsingEnvironmentVariables.md).

More information and different authentication approaches using Azure Identity can be found in [this document](https://docs.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet).

### Authenticate the Client

To create an authenticated client and start interacting with Azure resources, please see the [quickstart guide here](https://github.com/Azure/azure-sdk-for-net/blob/main/doc/mgmt_preview_quickstart.md)
The default option to create an authenticated client is to use `DefaultAzureCredential`. Since all management APIs go through the same endpoint, in order to interact with resources, only one top-level `ArmClient` has to be created.

## Key concepts
To authenticate to Azure and create an `ArmClient`, do the following:

Key concepts of the Azure .NET SDK can be found [here](https://azure.github.io/azure-sdk/dotnet_introduction.html)
```C# Snippet:Managing_StorageAccounts_AuthClient
using Azure.Identity;
using Azure.ResourceManager;

ArmClient armClient = new ArmClient(new DefaultAzureCredential());
```

## Documentation
Additional documentation for the `Azure.Identity.DefaultAzureCredential` class can be found in [this document](https://docs.microsoft.com/dotnet/api/azure.identity.defaultazurecredential).

Documentation is available to help you learn how to use this package
## Key concepts

- [Quickstart](https://github.com/Azure/azure-sdk-for-net/blob/main/doc/mgmt_preview_quickstart.md)
- [API References](https://docs.microsoft.com/dotnet/api/?view=azure-dotnet)
- [Authentication](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/identity/Azure.Identity/README.md)
Key concepts of the Azure .NET SDK can be found [here](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/resourcemanager/Azure.ResourceManager/README.md#key-concepts)

## Examples

Code samples for using the management library for .NET can be found in the following locations
- [.NET Management Library Code Samples](https://docs.microsoft.com/samples/browse/?branch=master&languages=csharp&term=managing%20using%20Azure%20.NET%20SDK)
### Create a storage account

Before creating a storage account, we need to have a resource group.

```C# Snippet:Managing_StorageAccounts_DefaultSubscription
ArmClient armClient = new ArmClient(new DefaultAzureCredential());
Subscription subscription = armClient.DefaultSubscription;
```
```C# Snippet:Managing_StorageAccounts_GetResourceGroupContainer
string rgName = "myRgName";
Location location = Location.WestUS2;
ResourceGroupCreateOrUpdateOperation operation= await subscription.GetResourceGroups().CreateOrUpdateAsync(rgName, new ResourceGroupData(location));
ResourceGroup resourceGroup = operation.Value;
```

Then we can create a storage account inside this resource group.

```C# Snippet:Managing_StorageAccounts_CreateStorageAccount
//first we need to define the StorageAccountCreateParameters
Sku sku = new Sku(SkuName.StandardGRS);
Kind kind = Kind.Storage;
string location = "westus2";
StorageAccountCreateParameters parameters = new StorageAccountCreateParameters(sku, kind, location);
//now we can create a storage account with defined account name and parameters
StorageAccountContainer accountContainer = resourceGroup.GetStorageAccounts();
string accountName = "myAccount";
StorageAccountCreateOperation accountCreateOperation = await accountContainer.CreateOrUpdateAsync(accountName, parameters);
StorageAccount storageAccount = accountCreateOperation.Value;
```

### Get all storage accounts in a resource group

```C# Snippet:Managing_StorageAccounts_ListStorageAccounts
StorageAccountContainer accountContainer = resourceGroup.GetStorageAccounts();
AsyncPageable<StorageAccount> response = accountContainer.GetAllAsync();
await foreach (StorageAccount storageAccount in response)
{
Console.WriteLine(storageAccount.Id.Name);
}
```

### Get a storage account

```C# Snippet:Managing_StorageAccounts_GetStorageAccount
StorageAccountContainer accountContainer = resourceGroup.GetStorageAccounts();
StorageAccount storageAccount = await accountContainer.GetAsync("myAccount");
Console.WriteLine(storageAccount.Id.Name);
```

### Try to get a storage account if it exists


```C# Snippet:Managing_StorageAccounts_GetStorageAccountIfExists
StorageAccountContainer accountContainer = resourceGroup.GetStorageAccounts();
StorageAccount storageAccount = await accountContainer.GetIfExistsAsync("foo");
if (storageAccount != null)
{
Console.WriteLine(storageAccount.Id.Name);
}
if (await accountContainer.CheckIfExistsAsync("bar"))
{
Console.WriteLine("storage account 'bar' exists");
}
```

### Delete a storage account

```C# Snippet:Managing_StorageAccounts_DeleteStorageAccount
StorageAccountContainer accountContainer = resourceGroup.GetStorageAccounts();
StorageAccount storageAccount = await accountContainer.GetAsync("myAccount");
await storageAccount.DeleteAsync();
```

### Add a tag to the storage account

```C# Snippet:Managing_StorageAccounts_AddTagStorageAccount
StorageAccountContainer accountContainer = resourceGroup.GetStorageAccounts();
StorageAccount storageAccount = await accountContainer.GetAsync("myAccount");
// add a tag on this storage account
await storageAccount.AddTagAsync("key", "value");
```

For more detailed examples, take a look at [samples](https://github.com/Azure/azure-sdk-for-net/tree/feature/mgmt-track2-storage/sdk/storage/Azure.ResourceManager.Storage/samples) we have available.

## Troubleshooting

- File an issue via [Github
Issues](https://github.com/Azure/azure-sdk-for-net/issues)
- Check [previous
- If you find a bug or have a suggestion, file an issue via [GitHub issues](https://github.com/Azure/azure-sdk-for-net/issues) and make sure you add the "Preview" label to the issue.
- If you need help, check [previous
questions](https://stackoverflow.com/questions/tagged/azure+.net)
or ask new ones on Stack Overflow using azure and .net tags.
or ask new ones on StackOverflow using azure and .NET tags.
- If having trouble with authentication, go to [DefaultAzureCredential documentation](https://docs.microsoft.com/dotnet/api/azure.identity.defaultazurecredential?view=azure-dotnet)


## Next steps

For more information on Azure SDK, please refer to [this website](https://azure.github.io/azure-sdk/)
### More sample code

- [Managing Blob Containers](https://github.com/Azure/azure-sdk-for-net/blob/feature/mgmt-track2-storage/sdk/storage/Azure.ResourceManager.Storage/samples/Sample1_ManagingBlobContainers.md)
- [Managing File Shares](https://github.com/Azure/azure-sdk-for-net/blob/feature/mgmt-track2-storage/sdk/storage/Azure.ResourceManager.Storage/samples/Sample2_ManagingFileShares.md)

### Additional Documentation

For more information on Azure SDK, please refer to [this website](https://azure.github.io/azure-sdk/).

## Contributing

Expand Down
Loading