public async Task Consume(ConsumeContext <TMessage> context) { var token = CancellationToken.None; var configurations = await _provisioningConfigurationRepository.GetAll(token); foreach (var configuration in configurations) { if (configuration.IsRepresentationProvisioned(context.Message.Id, context.Message.Version) || configuration.ResourceType != context.Message.ResourceType) { continue; } var provisioner = _provisioners.First(p => p.Type == configuration.Type); ITransaction transaction = null; var description = $"{Enum.GetName(typeof(ProvisioningOperations), Type)} the resource {configuration.ResourceType}"; try { transaction = await _provisioningConfigurationRepository.StartTransaction(token); var workflowResult = await LaunchWorkflow(configuration, context); await provisioner.Seed(Type, context.Message.Id, context.Message.Representation, configuration, token); configuration.Complete(context.Message.Id, description, workflowResult.InstanceId, workflowResult.FileId, context.Message.Version); } catch (Exception ex) { _logger.LogError(ex.ToString()); configuration.Error(context.Message.Id, description, context.Message.Version, ex.ToString()); } finally { await _provisioningConfigurationRepository.Update(configuration, token); await transaction.Commit(token); } } }
public async Task <IActionResult> UpdateConfiguration(string id, [FromBody] UpdateProvisioningConfigurationParameter parameter, CancellationToken cancellationToken) { using (var transaction = await _provisioningConfigurationRepository.StartTransaction(cancellationToken)) { var configuration = await _provisioningConfigurationRepository.Get(id, cancellationToken); if (configuration == null) { return(new NotFoundResult()); } configuration.Update(parameter.Records.Select(r => r.ToDomain())); await _provisioningConfigurationRepository.Update(configuration, cancellationToken); await transaction.Commit(); return(new NoContentResult()); } }