Example #1
0
        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());
        }
Example #2
0
        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."));
            }
        }
Example #3
0
        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());
        }