Ejemplo n.º 1
0
        public async Task <Deployment> DeployAsync(DeployRequest request, ISecurityContext context)
        {
            Ensure.NotNull(request, nameof(request));
            Ensure.NotNull(context, nameof(context));

            var environment = request.Environment;
            var program     = request.Program;

            var release = await releaseService.GetAsync(program.Id, program.Version);

            var hosts = await hostService.ListAsync(environment);

            var deployment = await StartAsync(
                environment : environment,
                release : release,
                creatorId : context.UserId.Value
                );

            var targets = new DeploymentTarget[hosts.Count];

            for (var i = 0; i < hosts.Count; i++)
            {
                targets[i] = new DeploymentTarget(
                    deploymentId: deployment.Id,
                    hostId: hosts[i].Id,
                    status: DeploymentStatus.Pending
                    );
            }

            var results = await ActivateAsync(release, hosts);

            for (var i = 0; i < results.Length; i++)
            {
                var deployResult = results[i];

                targets[i].Status = deployResult.Succeeded
                    ? DeploymentStatus.Succeeded
                    : DeploymentStatus.Failed;

                targets[i].Message = deployResult.Message;
            }

            // Complete the deployment & save the targets
            await CompleteAsync(deployment, targets, succceded : true);

            // Log the action
            await eventLog.CreateAsync(new Event(
                                           action   : "deploy",
                                           resource : "program#" + release.Id + "@" + release.Version,
                                           userId   : context.UserId
                                           ));

            return(deployment);
        }