public async Task HandlePrivateEndpointEventsAsync( [EventGridTrigger] EventGridEvent eventGridEvent, [DurableClient] IDurableOrchestrationClient starter, ILogger log ) { string eventType = eventGridEvent.EventType; dynamic data = eventGridEvent.Data; string subscriptionId = data.subscriptionId; string resourceId = eventGridEvent.Subject; var durableParameters = new OrchestratorParameters { SubscriptionId = subscriptionId, ResourceId = resourceId }; string instanceId; switch (eventType) { case "Microsoft.Resources.ResourceWriteSuccess": instanceId = await starter.StartNewAsync(nameof(OrchestratePrivateEndpointCreatedAsync), eventGridEvent.Id, durableParameters); break; //case "Microsoft.Resources.ResourceDeleteSuccess": // instanceId = await starter.StartNewAsync(nameof(OrchestratePrivateEndpointDeletedAsync), eventGridEvent.Id, durableParameters); // break; default: throw new Exception(); } log.LogInformation($"Started orchestration with ID = '{instanceId}'."); }
private async Task <bool> OrchestrateNetworkInterfaceUpdateAsync(IDurableOrchestrationContext context, NetworkInterface nic, DnsEntity dnsEntity) { // If NIC tags were removed or no longer contains the hostname tag. var remove = nic.Tags == null || !nic.Tags.ContainsKey(hostNameTagName); var replace = !remove && !nic.Tags[hostNameTagName].Equals(dnsEntity.Hostname, StringComparison.OrdinalIgnoreCase); var removed = false; var orchestratorParameters = new OrchestratorParameters { SubscriptionId = ResourceId.FromString(nic.Id).SubscriptionId, ResourceId = nic.Id }; if (remove || replace) { removed = await context.CallSubOrchestratorAsync <bool>(nameof(OrchestrateNetworkInterfaceDeleteAsync), orchestratorParameters); } if (replace && removed) { return(await context.CallSubOrchestratorAsync <bool>(nameof(OrchestrateNetworkInterfaceWriteAsync), orchestratorParameters)); } return(true); }
public async Task <NetworkInterface> GetNetworkInterfaceAsync([ActivityTrigger] OrchestratorParameters parameters, ILogger log) { var resourceGroupName = Constants.ResourceGroupCaptureRegEx.Match(parameters.ResourceId).Groups["resourcegroup"].Value; var networkInterfaceName = Constants.NicCaptureRegEx.Match(parameters.ResourceId).Groups["nic"].Value; networkManagementService.SetSubscriptionId(parameters.SubscriptionId); return(await networkManagementService.GetNetworkInterfaceAsync(resourceGroupName, networkInterfaceName)); }
public async Task <PrivateEndpoint> GetPrivateEndpointAsync([ActivityTrigger] OrchestratorParameters parameters, ILogger log) { var resourceGroupName = Constants.ResourceGroupCaptureRegEx.Match(parameters.ResourceId).Groups["resourcegroup"].Value; var privateEndpointName = Constants.PrivateEndpointCaptureRegEx.Match(parameters.ResourceId).Groups["privateEndpoint"].Value; networkManagementService.SetSubscriptionId(parameters.SubscriptionId); return(await networkManagementService.GetPrivateEndpointAsync(resourceGroupName, privateEndpointName)); }
public async Task <VirtualMachine> GetVirtualMachineAsync([ActivityTrigger] OrchestratorParameters parameters, ILogger log) { var resourceGroupName = Constants.ResourceGroupCaptureRegEx.Match(parameters.ResourceId).Groups["resourcegroup"].Value; var vmName = Constants.VmCaptureRegEx.Match(parameters.ResourceId).Groups["vm"].Value; computeManagementService.SetSubscriptionId(parameters.SubscriptionId); return(await computeManagementService.GetVirtualMachineAsync(resourceGroupName, vmName)); }
public async Task <IActionResult> TestHandleNetworkInterfaceEventsAsync( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] EventGridEvent eventGridEvent, [DurableClient] IDurableOrchestrationClient starter, ILogger log ) { try { string eventType = eventGridEvent.EventType; dynamic data = eventGridEvent.Data; string subscriptionId = data.subscriptionId; string resourceId = eventGridEvent.Subject; var durableParameters = new OrchestratorParameters { SubscriptionId = subscriptionId, ResourceId = resourceId }; string instanceId; switch (eventType) { case "Microsoft.Resources.ResourceWriteSuccess": instanceId = await starter.StartNewAsync(nameof(NetworkInterfaceEventFunctions.OrchestrateNetworkInterfaceWriteAsync), eventGridEvent.Id, durableParameters); break; case "Microsoft.Resources.ResourceDeleteSuccess": instanceId = await starter.StartNewAsync(nameof(NetworkInterfaceEventFunctions.OrchestrateNetworkInterfaceDeleteAsync), eventGridEvent.Id, durableParameters); break; default: throw new Exception(); } return(new OkResult()); } catch (Exception ex) { return(new InternalServerErrorResult()); } }
public async Task <bool> OrchestrateVirtualMachineDeallocatedAsync([OrchestrationTrigger] IDurableOrchestrationContext context) { var orchestratorParameters = context.GetInput <OrchestratorParameters>(); // Get VM that was just deallocated. var vm = await context.CallActivityAsync <VirtualMachine>(nameof(GetVirtualMachineAsync), orchestratorParameters); foreach (var nic in vm.NetworkProfile.NetworkInterfaces) { var nicOrchestratorParameters = new OrchestratorParameters { SubscriptionId = orchestratorParameters.SubscriptionId, ResourceId = nic.Id }; await context.CallSubOrchestratorAsync(nameof(NetworkInterfaceEventFunctions.OrchestrateNetworkInterfaceDeleteAsync), nicOrchestratorParameters); } return(true); }
public async Task TestHandleVirtualMachineEventsAsync( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] EventGridEvent eventGridEvent, [DurableClient] IDurableOrchestrationClient starter, ILogger log ) { dynamic data = eventGridEvent.Data; string subscriptionId = data.subscriptionId; string operationName = data.operationName; string resourceId = eventGridEvent.Subject; var durableParameters = new OrchestratorParameters { SubscriptionId = subscriptionId, ResourceId = resourceId }; string instanceId; switch (operationName) { case "Microsoft.Compute/virtualMachines/start/action": instanceId = await starter.StartNewAsync(nameof(VirtualMachineEventFunctions.OrchestrateVirtualMachineStartedAsync), eventGridEvent.Id, durableParameters); break; case "Microsoft.Compute/virtualMachines/deallocate/action": instanceId = await starter.StartNewAsync(nameof(VirtualMachineEventFunctions.OrchestrateVirtualMachineDeallocatedAsync), eventGridEvent.Id, durableParameters); break; default: throw new Exception(); } log.LogInformation($"Started orchestration with ID = '{instanceId}'."); }