StorageActivity.cs 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using Microsoft.Azure.Management.Storage;
  2. using Microsoft.Azure.Management.Storage.Models;
  3. using Microsoft.Azure.Services.AppAuthentication;
  4. using Microsoft.Azure.WebJobs;
  5. using Microsoft.Azure.WebJobs.Extensions.DurableTask;
  6. using Microsoft.Extensions.Logging;
  7. using Microsoft.Rest;
  8. using Microsoft.WindowsAzure.Storage;
  9. using Microsoft.WindowsAzure.Storage.Auth;
  10. using Microsoft.WindowsAzure.Storage.Blob;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.IO;
  14. using System.Linq;
  15. using System.Text;
  16. namespace ADPControl
  17. {
  18. public static class StorageActivity
  19. {
  20. private const string ArmTemplateFileName = "template.json";
  21. [FunctionName(nameof(GettingJobContainerUrl))]
  22. public static string GettingJobContainerUrl([ActivityTrigger] (Guid, string, string, string) input, ILogger log)
  23. {
  24. Guid SubscriptionId = input.Item1;
  25. String ResourceGroupName = input.Item2;
  26. String StorageAccountName = input.Item3;
  27. String ContainerName = input.Item4;
  28. var azureServiceTokenProvider = new AzureServiceTokenProvider();
  29. TokenCredentials tokenArmCredential = new TokenCredentials(azureServiceTokenProvider.GetAccessTokenAsync("https://management.core.windows.net/").Result);
  30. StorageManagementClient storageMgmtClient = new StorageManagementClient(tokenArmCredential) { SubscriptionId = SubscriptionId.ToString() };
  31. // Get the storage account keys for a given account and resource group
  32. IList<StorageAccountKey> acctKeys = storageMgmtClient.StorageAccounts.ListKeys(ResourceGroupName, StorageAccountName).Keys;
  33. // Get a Storage account using account creds:
  34. StorageCredentials storageCred = new StorageCredentials(StorageAccountName, acctKeys.FirstOrDefault().Value);
  35. CloudStorageAccount linkedStorageAccount = new CloudStorageAccount(storageCred, true);
  36. bool createContainer = false;
  37. // Normalize the container name for the Export action.
  38. if (ContainerName.Contains("-Export-"))
  39. {
  40. ContainerName = ContainerName.Replace("Export-", "");
  41. createContainer = true;
  42. }
  43. CloudBlobContainer container = linkedStorageAccount.CreateCloudBlobClient().GetContainerReference(ContainerName);
  44. if(createContainer)
  45. container.CreateIfNotExistsAsync().Wait();
  46. string containerUrl = container.Uri.ToString() +
  47. container.GetSharedAccessSignature(new SharedAccessBlobPolicy()
  48. {
  49. Permissions = SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.List,
  50. SharedAccessExpiryTime = DateTime.UtcNow.AddDays(7)
  51. });
  52. return containerUrl;
  53. }
  54. [FunctionName(nameof(UploadingArmTemplate))]
  55. public static void UploadingArmTemplate([ActivityTrigger] (string, string) input, ILogger log)
  56. {
  57. string containerUrl = input.Item1;
  58. string json = input.Item2;
  59. CloudBlobContainer container = new CloudBlobContainer(new Uri(containerUrl));
  60. CloudBlockBlob blob = container.GetBlockBlobReference(ArmTemplateFileName);
  61. blob.Properties.ContentType = "application/json";
  62. using (Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
  63. {
  64. blob.UploadFromStreamAsync(stream).Wait();
  65. }
  66. }
  67. }
  68. }