Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        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());
 }
Beispiel #9
0
        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 void AddInstalledPackage(string resourceName, string nodeName, PackageOnNode pack)
 {
     _resourceBase.AddInstalledPackage(resourceName, nodeName, pack, GetUserIdFromHeader());
 }
Beispiel #11
0
 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);
 }
Beispiel #13
0
        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);
        }