Beispiel #1
0
        public async Task Run(CommandContext context)
        {
            var server = context.Servers.Get(ServerName);

            HttpSessionStartResponse startResult = null;

            await AuthRetryAsync(async() => {
                startResult = await StartSession(server);
            });

            var sessionId = startResult?.SessionId;

            if (string.IsNullOrEmpty(sessionId))
            {
                throw new ApplicationException($"An invalid session-id was returned! [{sessionId}]");
            }

            var position = 0;

            while (true)
            {
                var data = await UpdateOutput(server, sessionId, position);

                if (data == null)
                {
                    throw new ApplicationException("An empty session-output response was returned!");
                }

                if (data.IsComplete)
                {
                    break;
                }

                if (!data.IsModified)
                {
                    await Task.Delay(PollIntervalMs);

                    continue;
                }

                position = data.NewLength;

                ConsoleEx.Out.WriteLine(data.NewText, ConsoleColor.Gray);
            }

            Result = await GetResult(server, sessionId);
        }
        public override HttpHandlerResult Post()
        {
            try {
                var session = new ServerSecurityPublishSession();

                PhotonServer.Instance.Sessions.BeginSession(session);
                PhotonServer.Instance.Queue.Add(session);

                var response = new HttpSessionStartResponse {
                    SessionId = session.SessionId,
                };

                return(Response.Json(response));
            }
            catch (Exception error) {
                Log.Error("Failed to publish security configuration!", error);
                return(Response.Exception(error));
            }
        }
Beispiel #3
0
        public override async Task <HttpHandlerResult> PostAsync(CancellationToken token)
        {
            var agentIds = GetQuery("agents");

            var updateDirectory = Path.Combine(Configuration.Directory, "Updates");
            var updateFilename  = Path.Combine(updateDirectory, "Photon.Agent.msi");

            PathEx.CreatePath(updateDirectory);

            using (var fileStream = File.Open(updateFilename, FileMode.Create, FileAccess.Write)) {
                await HttpContext.Request.InputStream.CopyToAsync(fileStream);
            }

            try {
                var session = new ServerUpdateSession {
                    UpdateFilename = updateFilename,
                };

                if (!string.IsNullOrEmpty(agentIds))
                {
                    session.AgentIds = ParseNames(agentIds).OrderBy(x => x).ToArray();
                }

                PhotonServer.Instance.Sessions.BeginSession(session);
                PhotonServer.Instance.Queue.Add(session);

                var response = new HttpSessionStartResponse {
                    SessionId = session.SessionId,
                };

                return(Response.Json(response));
            }
            catch (Exception error) {
                Log.Error("Failed to run Update-Task!", error);
                return(Response.Exception(error));
            }
        }
Beispiel #4
0
        public override async Task <HttpHandlerResult> PostAsync(CancellationToken token)
        {
            var qProjectId            = GetQuery("project");
            var projectPackageId      = GetQuery("package");
            var projectPackageVersion = GetQuery("version");
            var environmentName       = GetQuery("env");

            if (string.IsNullOrWhiteSpace(projectPackageId))
            {
                return(Response.BadRequest().SetText("'package' is undefined!"));
            }

            if (string.IsNullOrWhiteSpace(projectPackageVersion))
            {
                return(Response.BadRequest().SetText("'version' is undefined!"));
            }

            try {
                if (!PhotonServer.Instance.ProjectPackages.TryGet(projectPackageId, projectPackageVersion, out var packageFilename))
                {
                    return(Response.BadRequest().SetText($"Project Package '{projectPackageId}.{projectPackageVersion}' was not found!"));
                }

                var metadata = await ProjectPackageTools.GetMetadataAsync(packageFilename);

                var projectId = metadata.Project;

                if (!string.IsNullOrEmpty(qProjectId))
                {
                    projectId = qProjectId;
                }

                if (string.IsNullOrEmpty(projectId))
                {
                    throw new ApplicationException("'project' is undefined!");
                }

                if (!PhotonServer.Instance.Projects.TryGet(projectId, out var project))
                {
                    return(Response.BadRequest().SetText($"Project '{projectId}' was not found!"));
                }

                var deployment = await project.StartNewDeployment();

                deployment.PackageId       = projectPackageId;
                deployment.PackageVersion  = projectPackageVersion;
                deployment.EnvironmentName = environmentName;
                //deployment.ScriptName = ?;

                var session = new ServerDeploySession {
                    Project                = project.Description,
                    Deployment             = deployment,
                    ProjectPackageId       = projectPackageId,
                    ProjectPackageVersion  = projectPackageVersion,
                    ProjectPackageFilename = packageFilename,
                    EnvironmentName        = environmentName,
                };

                deployment.ServerSessionId = session.SessionId;

                PhotonServer.Instance.Sessions.BeginSession(session);
                PhotonServer.Instance.Queue.Add(session);

                var response = new HttpSessionStartResponse {
                    SessionId = session.SessionId,
                };

                return(Response.Json(response));
            }
            catch (Exception error) {
                Log.Error($"Deployment of Project Package '{projectPackageId}.{projectPackageVersion}' has failed!", error);
                return(Response.Exception(error));
            }
        }