protected virtual void ScriptPrepare(PackageOnNode pack, string cmdLine, ResourceNode node, String clusterHomeFolder, out String scriptPath) { var scriptDir = clusterHomeFolder.TrimEnd(new[] { '/', '\\' }); scriptPath = scriptDir + "/run.sh"; var scriptContent = new StringBuilder(); scriptContent.Append("#!/bin/bash\n"); scriptContent.Append("#PBS -l nodes=" + node.NodeName + "\n"); // String.Join("+", nodes.Select(n => n.NodeName)) scriptContent.Append("cd " + scriptDir + "\n"); scriptContent.Append(String.Format("date +%s%N > {0}\n", ClavireStartFileName)); foreach (var pair in pack.EnvVars) { scriptContent.AppendFormat("export {0}={1}\n", pair.Key, pair.Value); } // -n = do not override files, so user's input file doesn't vanish => copying startup files in reverse order foreach (string path in pack.CopyOnStartup.Reverse()) { scriptContent.Append("cp -r -n " + path + " ./\n"); } scriptContent.Append(cmdLine); scriptContent.Append(String.Format("\n date +%s%N > {0}\n", ClavireFinishFileName)); string scriptFilePathLocal = Path.GetTempFileName(); File.WriteAllText(scriptFilePathLocal, scriptContent.ToString()); //ScpCopy(node, scriptPath, scriptFilePathLocal); UploadFile(node, scriptPath, scriptFilePathLocal); // todo: File.Delete(scriptFilePathLocal); }
public void AddInstalledPackage(string resourceName, string nodeName, PackageOnNode pack, string userId) { lock (_updateLock) { //throw new NotImplementedException(); var oldRes = GetResourceByName(resourceName, userId); if (oldRes == null) { throw new InvalidDataException("There is no resources which can be modified. Check resource name, node name or access rights"); } var json = oldRes.Json; var resource = JObject.Parse(json); var node = resource["Nodes"].FirstOrDefault(x => (string)x["NodeName"] == nodeName); if (node == null) { throw new InvalidDataException(string.Format("Resource:{0} doesn't contain node:{1}", resourceName, nodeName)); } var packages = (node["Packages"] != null) ? node["Packages"].ToObject <JArray>() : new JArray(); var newPack = BuildPackageDescription(pack); packages.Add(newPack); node["Packages"] = packages; var newJson = resource.ToString(); Resource.SaveResource(newJson, oldRes.ResourceName); } }
public void AddInstalledPackage(string resourceName, string nodeName, PackageOnNode pack, string userId) { lock (_updateLock) { //throw new NotImplementedException(); var oldRes = GetResourceByName(resourceName, userId); if (oldRes == null) { throw new InvalidDataException("There is no resources which can be modified. Check resource name, node name or access rights"); } var json = oldRes.Json; var resource = JObject.Parse(json); var node = resource["Nodes"].FirstOrDefault(x => (string)x["NodeName"] == nodeName); if (node == null) { throw new InvalidDataException(string.Format("Resource:{0} doesn't contain node:{1}",resourceName, nodeName)); } var packages = (node["Packages"] != null) ? node["Packages"].ToObject<JArray>() : new JArray(); var newPack = BuildPackageDescription(pack); packages.Add(newPack); node["Packages"] = packages; var newJson = resource.ToString(); Resource.SaveResource(newJson, oldRes.ResourceName); } }
private JObject BuildPackageDescription(PackageOnNode package) { //todo make proper fillness later var json = new JObject(); json.Add("Name", package.Name); json.Add("Version", package.Version); json.Add("AppPath", package.AppPath); return(json); }
protected virtual string MakeScript(PackageOnNode pack, string cmdLine, ResourceNode node, string clusterHomeFolder) { string workDir = clusterHomeFolder.TrimEnd(new[] { '/', '\\' }); string scriptPath = workDir + "/run.sh"; var scriptContent = new StringBuilder(); scriptContent.Append("#!/bin/bash\n"); scriptContent.Append("#SBATCH --partition=" + GetPartition(node) + "\n"); scriptContent.Append(@"#SBATCH --workdir=""" + workDir + "\"\n"); scriptContent.Append(@"#SBATCH --output=std.out" + "\n"); //scriptContent.Append("#SBATCH --immediate\n"); // не ставить в очередь, а упасть, если нету сразу доступных ресурсов //scriptContent.Append("#SBATCH --no-requeue\n"); // не перезапускать в случа падения //scriptContent.Append("#SBATCH --wait-all-nodes=1\n"); // не запускать, пока не будут готовы все узлы //scriptContent.Append("#SBATCH --gres\n"); // запрос ресурсов //scriptContent.Append("#SBATCH --nodes=1-1\n"); //min-max //scriptContent.Append("#SBATCH --nodelist=" + node.NodeName + "\n"); // String.Join(",", nodes.Select(n => n.NodeName)) scriptContent.Append("cd " + workDir + "\n"); scriptContent.AppendFormat("date +%s%N > {0}\n", ClavireStartFileName); foreach (var pair in pack.EnvVars) { scriptContent.AppendFormat("export {0}={1}\n", pair.Key, pair.Value); } // -n = do not override files, so user's input file doesn't vanish => copying startup files in reverse order foreach (string path in pack.CopyOnStartup.Reverse()) { scriptContent.Append("cp -r -n " + path + " ./\n"); } scriptContent.Append(cmdLine); scriptContent.AppendFormat("\ndate +%s%N > {0}\n", ClavireFinishFileName); string scriptFilePathLocal = Path.GetTempFileName(); File.WriteAllText(scriptFilePathLocal, scriptContent.ToString()); //ScpCopy(node, scriptPath, scriptFilePathLocal); UploadFile(node, scriptPath, scriptFilePathLocal); File.Delete(scriptFilePathLocal); return(scriptPath); }
public PackageOnNode(PackageOnNode other) { Init(); if (other == null) { return; } Name = other.Name; Version = other.Version; AppPath = other.AppPath; LocalDir = other.LocalDir; // it's ok, because those enumerable fields are read-only: if (other.CopyOnStartup != null) { CopyOnStartup = other.CopyOnStartup.ToArray(); } if (other.CleanupIgnore != null) { CleanupIgnore = other.CleanupIgnore.ToArray(); } if (other.Cleanup != null) { Cleanup = other.Cleanup.ToArray(); } if (other.EnvVars != null) { EnvVars = new Dictionary <string, string>(other.EnvVars); } if (other.Params != null) { Params = new Dictionary <string, string>(other.Params); } }
public PackageOnNode(PackageOnNode other) { Init(); if (other == null) return; Name = other.Name; Version = other.Version; AppPath = other.AppPath; LocalDir = other.LocalDir; // it's ok, because those enumerable fields are read-only: if (other.CopyOnStartup != null) CopyOnStartup = other.CopyOnStartup.ToArray(); if (other.CleanupIgnore != null) CleanupIgnore = other.CleanupIgnore.ToArray(); if (other.Cleanup != null) Cleanup = other.Cleanup.ToArray(); if (other.EnvVars != null) EnvVars = new Dictionary<string, string>(other.EnvVars); if (other.Params != null) Params = new Dictionary<string, string>(other.Params); }
public void AddInstalledPackage(string resourceName, string nodeName, PackageOnNode pack) { _resourceBase.AddInstalledPackage(resourceName, nodeName, pack, GetUserIdFromHeader()); }
protected virtual string MakeScript(PackageOnNode pack, string cmdLine, ResourceNode node, string clusterHomeFolder) { string workDir = clusterHomeFolder.TrimEnd(new[] { '/', '\\' }); string scriptPath = workDir + "/run.sh"; var scriptContent = new StringBuilder(); scriptContent.Append("#!/bin/bash\n"); scriptContent.Append("#SBATCH --partition=" + GetPartition(node) + "\n"); scriptContent.Append(@"#SBATCH --workdir=""" + workDir + "\"\n"); scriptContent.Append(@"#SBATCH --output=std.out" + "\n"); //scriptContent.Append("#SBATCH --immediate\n"); // не ставить в очередь, а упасть, если нету сразу доступных ресурсов //scriptContent.Append("#SBATCH --no-requeue\n"); // не перезапускать в случа падения //scriptContent.Append("#SBATCH --wait-all-nodes=1\n"); // не запускать, пока не будут готовы все узлы //scriptContent.Append("#SBATCH --gres\n"); // запрос ресурсов //scriptContent.Append("#SBATCH --nodes=1-1\n"); //min-max //scriptContent.Append("#SBATCH --nodelist=" + node.NodeName + "\n"); // String.Join(",", nodes.Select(n => n.NodeName)) scriptContent.Append("cd " + workDir + "\n"); scriptContent.AppendFormat("date +%s%N > {0}\n", ClavireStartFileName); foreach (var pair in pack.EnvVars) scriptContent.AppendFormat("export {0}={1}\n", pair.Key, pair.Value); // -n = do not override files, so user's input file doesn't vanish => copying startup files in reverse order foreach (string path in pack.CopyOnStartup.Reverse()) scriptContent.Append("cp -r -n " + path + " ./\n"); scriptContent.Append(cmdLine); scriptContent.AppendFormat("\ndate +%s%N > {0}\n", ClavireFinishFileName); string scriptFilePathLocal = Path.GetTempFileName(); File.WriteAllText(scriptFilePathLocal, scriptContent.ToString()); //ScpCopy(node, scriptPath, scriptFilePathLocal); UploadFile(node, scriptPath, scriptFilePathLocal); File.Delete(scriptFilePathLocal); return scriptPath; }
private JObject BuildPackageDescription(PackageOnNode package) { //todo make proper fillness later var json = new JObject(); json.Add("Name", package.Name); json.Add("Version", package.Version); json.Add("AppPath", package.AppPath); return json; }
private void PrepareEnviroment(ExecuteServiceClient esService, PackageOnNode pack, string resorceHomeFolder, string farmId) { esService.CopyOnStartPaths(pack.CopyOnStartup, farmId, resorceHomeFolder); }
protected virtual void ScriptPrepare(PackageOnNode pack, string cmdLine, ResourceNode node, String clusterHomeFolder, out String scriptPath) { var scriptDir = clusterHomeFolder.TrimEnd(new[] { '/', '\\' }); scriptPath = scriptDir + "/run.sh"; var scriptContent = new StringBuilder(); scriptContent.Append("#!/bin/bash\n"); scriptContent.Append("#PBS -l nodes=" + node.NodeName + "\n"); // String.Join("+", nodes.Select(n => n.NodeName)) scriptContent.Append("cd " + scriptDir + "\n"); scriptContent.Append(String.Format("date +%s%N > {0}\n", ClavireStartFileName)); foreach (var pair in pack.EnvVars) scriptContent.AppendFormat("export {0}={1}\n", pair.Key, pair.Value); // -n = do not override files, so user's input file doesn't vanish => copying startup files in reverse order foreach (string path in pack.CopyOnStartup.Reverse()) scriptContent.Append("cp -r -n " + path + " ./\n"); scriptContent.Append(cmdLine); scriptContent.Append(String.Format("\n date +%s%N > {0}\n", ClavireFinishFileName)); string scriptFilePathLocal = Path.GetTempFileName(); File.WriteAllText(scriptFilePathLocal, scriptContent.ToString()); //ScpCopy(node, scriptPath, scriptFilePathLocal); UploadFile(node, scriptPath, scriptFilePathLocal); // todo: File.Delete(scriptFilePathLocal); }