public async Task <IActionResult> Post([FromRoute] string secret, [FromBody] DockerHubHookData data) { if (!_dockerHubSecretValidator.IsTheRightSecret(secret)) { _logger.LogWarning("Hook event with a wrong secret! secret: {secret}; data: {@data}", secret, data); return(new UnauthorizedResult()); } _logger.LogDebug("Hook event. Data: {@data}", data); var currentServices = await _swarmClient.GetServices(); var servicesToRedeploy = _swarmServiceSelector.GetServicesToRedeploy(data, currentServices); _logger.LogDebug("Services to redeploy: {@servicesToRedeploy}", servicesToRedeploy); foreach (var service in servicesToRedeploy) { // TODO: Consider compare local service digest with docker hub one. // Since hook data does not contain digest information, we cannot confirm if // the service is not already updated. _logger.LogDebug("Redeploying {@service}", service); await _swarmClient.RedeployService(service.id); _logger.LogDebug("Done {@service}", service); } return(new OkResult()); }
public async Task <IActionResult> GetServicesAsync() { try { var services = await _swarmClient.GetServices(); _logger.LogInformation("Fetch swarm services"); return(Json(services.ToArray())); } catch (Exception ex) { return(CreateErrorResponse(ex, "Cannot fetch information about services.")); } }
public async Task ShouldReturnAllServicesInfoWhenGetServicesCalled() { //Given _swarmClient.GetServices().Returns(x => { return(Task.FromResult <IEnumerable <SwarmService> >(new [] { _any.Create <SwarmService>(), _any.Create <SwarmService>() })); }); var swarmService = new SwarmApi.Services.SwarmService(_swarmClient, _loggerFactory); var serviceController = new SwarmController(swarmService); //When var response = await serviceController.GetService(); var jsonResult = response as JsonResult; var value = jsonResult?.Value as IEnumerable <SwarmService>; //Then Assert.NotNull(jsonResult); Assert.NotNull(value); Assert.Equal(200, jsonResult.StatusCode); Assert.Equal(2, value.Count()); }