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); }
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); }