예제 #1
0
        public IDictionary <string, string> GetEnvironmentVariablesForSessionHost(int instanceNumber, string logFolderId, VmAgentSettings agentSettings)
        {
            // Note that most of these are being provided based on customer request
            var environmentVariables = new Dictionary <string, string>()
            {
                {
                    ConfigFileEnvVariable, GetGsdkConfigFilePath(_sessionHostsStartInfo.AssignmentId, instanceNumber)
                },
                {
                    ServerInstanceNumberEnvVariable, instanceNumber.ToString()
                },
                {
                    LogsDirectoryEnvVariable, GetLogFolder(logFolderId, VmConfiguration)
                },
                {
                    SharedContentFolderEnvVariable, GetSharedContentFolderPath()
                },
                {
                    CertificateFolderEnvVariable, GetCertificatesPath(_sessionHostsStartInfo.AssignmentId)
                },
                {
                    DumpsDirectoryEnvVariable, GetDumpFolder(logFolderId, VmConfiguration)
                }
            };

            environmentVariables.AddRange(VmConfiguration.GetCommonEnvironmentVariables(_sessionHostsStartInfo, VmConfiguration));

            return(environmentVariables);
        }
예제 #2
0
        private IList <string> GetVolumeBindings(SessionHostsStartInfo request, int sessionHostInstance, string logFolderId, VmAgentSettings agentSettings)
        {
            List <string> volumeBindings = new List <string>();

            if (request.AssetDetails?.Length > 0)
            {
                for (int i = 0; i < request.AssetDetails.Length; i++)
                {
                    string pathOnHost = request.UseReadOnlyAssets ? _vmConfiguration.GetAssetExtractionFolderPathForSessionHost(0, i) :
                                        _vmConfiguration.GetAssetExtractionFolderPathForSessionHost(sessionHostInstance, i);
                    //Set for when containers are run as non root
                    _systemOperations.SetUnixOwnerIfNeeded(pathOnHost, true);
                    volumeBindings.Add($"{pathOnHost}:{request.AssetDetails[i].MountPath}");
                }
            }

            // The folder needs to exist before the mount can happen.
            string logFolderPathOnVm = Path.Combine(_vmConfiguration.VmDirectories.GameLogsRootFolderVm, logFolderId);

            _systemOperations.CreateDirectory(logFolderPathOnVm);

            // Create the dumps folder as a subfolder of the logs folder
            string dumpFolderPathOnVm = Path.Combine(logFolderPathOnVm, VmDirectories.GameDumpsFolderName);

            _systemOperations.CreateDirectory(dumpFolderPathOnVm);

            // Set up the log folder. Maps D:\GameLogs\{logFolderId} on the container host to C:\GameLogs on the container.
            // TODO: TBD whether the log folder should be taken as input from developer during ingestion.
            volumeBindings.Add($"{logFolderPathOnVm}:{_vmConfiguration.VmDirectories.GameLogsRootFolderContainer}");

            //Set for when containers are run as non root
            _systemOperations.SetUnixOwnerIfNeeded(_vmConfiguration.VmDirectories.CertificateRootFolderVm, true);
            // All containers will have the certificate folder mapped
            volumeBindings.Add($"{_vmConfiguration.VmDirectories.CertificateRootFolderVm}:{_vmConfiguration.VmDirectories.CertificateRootFolderContainer}");

            // All containers have the same shared content folder mapped.
            _systemOperations.CreateDirectory(_vmConfiguration.VmDirectories.GameSharedContentFolderVm);
            volumeBindings.Add($"{_vmConfiguration.VmDirectories.GameSharedContentFolderVm}:{_vmConfiguration.VmDirectories.GameSharedContentFolderContainer}");

            // Map the folder that will contain this session host's configuration file
            string configFolderPathOnVm = _vmConfiguration.GetConfigRootFolderForSessionHost(sessionHostInstance);

            _systemOperations.CreateDirectory(configFolderPathOnVm);
            volumeBindings.Add($"{configFolderPathOnVm}:{_vmConfiguration.VmDirectories.GsdkConfigRootFolderContainer}");

            return(volumeBindings);
        }