HttpSurface.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using Microsoft.Azure.WebJobs;
  2. using Microsoft.Azure.WebJobs.Extensions.DurableTask;
  3. using Microsoft.Azure.WebJobs.Extensions.Http;
  4. using Microsoft.Extensions.Logging;
  5. using System;
  6. using System.Net.Http;
  7. using System.Threading.Tasks;
  8. namespace ADPControl
  9. {
  10. public static class HttpSurface
  11. {
  12. public class ExportRequest
  13. {
  14. public Guid SubscriptionId { get; set; }
  15. public string ResourceGroupName { get; set; }
  16. public string SourceSqlServerResourceGroupName { get; set; }
  17. public string SourceSqlServerName { get; set; }
  18. public string BatchAccountUrl { get; set; }
  19. public string StorageAccountName { get; set; }
  20. public string AccessToken { get; set; }
  21. public string VNetSubnetId { get; set; }
  22. }
  23. public class ImportRequest
  24. {
  25. public Guid SubscriptionId { get; set; }
  26. public string ResourceGroupName { get; set; }
  27. public string TargetSqlServerResourceGroupName { get; set; }
  28. public string TargetSqlServerName { get; set; }
  29. public string TargetAccessToken { get; set; }
  30. public string BatchAccountUrl { get; set; }
  31. public string StorageAccountName { get; set; }
  32. public string ContainerName { get; set; }
  33. public string SqlAdminPassword { get; set; }
  34. public string VNetSubnetId { get; set; }
  35. }
  36. [FunctionName("Export")]
  37. public static async Task<HttpResponseMessage> PostExport(
  38. [HttpTrigger(AuthorizationLevel.Function, "post", Route = "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/Export")]
  39. HttpRequestMessage req,
  40. [DurableClient] IDurableOrchestrationClient starter,
  41. ILogger log,
  42. Guid subscriptionId,
  43. string resourceGroupName)
  44. {
  45. log.LogInformation("C# HTTP trigger function processed an Export request.");
  46. ExportRequest request = await req.Content.ReadAsAsync<ExportRequest>();
  47. request.SubscriptionId = subscriptionId;
  48. request.ResourceGroupName = resourceGroupName;
  49. if (request.SourceSqlServerResourceGroupName == null)
  50. request.SourceSqlServerResourceGroupName = resourceGroupName;
  51. string instanceId = await starter.StartNewAsync(nameof(Orchestrator.RunExportOrchestrator), request);
  52. log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
  53. return starter.CreateCheckStatusResponse(req, instanceId);
  54. }
  55. [FunctionName("Import")]
  56. public static async Task<HttpResponseMessage> PostImport(
  57. [HttpTrigger(AuthorizationLevel.Function, "post", Route = "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/Import")]
  58. HttpRequestMessage req,
  59. [DurableClient] IDurableOrchestrationClient starter,
  60. ILogger log,
  61. Guid subscriptionId,
  62. string resourceGroupName)
  63. {
  64. log.LogInformation("C# HTTP trigger function processed an Import request.");
  65. ImportRequest request = await req.Content.ReadAsAsync<ImportRequest>();
  66. request.SubscriptionId = subscriptionId;
  67. request.ResourceGroupName = resourceGroupName;
  68. if (request.TargetSqlServerResourceGroupName == null)
  69. request.TargetSqlServerResourceGroupName = resourceGroupName;
  70. string instanceId = await starter.StartNewAsync(nameof(Orchestrator.RunImportOrchestrator), request);
  71. log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
  72. return starter.CreateCheckStatusResponse(req, instanceId);
  73. }
  74. }
  75. }