private CasterApiClient RefreshClient(CasterApiClient clientObject, TokenResponse tokenResponse, CancellationToken ct) { // TODO: check for token expiration also if (clientObject == null) { clientObject = CasterApiExtensions.GetCasterApiClient(_httpClientFactory, _clientOptions.CurrentValue.urls.casterApi, tokenResponse); } return(clientObject); }
public async Task <Event> RedeployAsync(Guid eventId, CancellationToken ct) { try { var eventEntity = await GetTheEventAsync(eventId, true, false, ct); if (eventEntity.Status != EventStatus.Active) { var msg = $"Only an Active Event can be redeployed"; _logger.LogError(msg); throw new Exception(msg); } var tokenResponse = await ApiClientsExtensions.RequestTokenAsync(_resourceOwnerAuthorizationOptions, _httpClientFactory.CreateClient()); var casterApiClient = CasterApiExtensions.GetCasterApiClient(_httpClientFactory, _clientOptions.urls.casterApi, tokenResponse); var result = await casterApiClient.TaintResourcesAsync( eventEntity.WorkspaceId.Value, new Caster.Api.Client.TaintResourcesCommand { SelectAll = true }, ct); if (result.Resources.Any(r => r.Tainted == false)) { var msg = $"Taint failed"; _logger.LogError(msg); throw new Exception(msg); } eventEntity.Status = EventStatus.Planning; eventEntity.InternalStatus = InternalEventStatus.PlanningRedeploy; await _context.SaveChangesAsync(ct); // add the event to the event queue for AlloyBackgrounsService to process the caster destroy. _alloyEventQueue.Add(eventEntity); } catch (Exception ex) { _logger.LogError($"Error ending Event {eventId}.", ex); throw; } return(await GetAsync(eventId, ct)); }