+
+%pythoncode %{
+def CreateSSHContainerResource(hostname,applipath,nbOfNodes=1):
+ return CreateContainerResource(hostname,applipath,"ssh",nbOfNodes)
+
+def CreateSRUNContainerResource(hostname,applipath,nbOfNodes=1):
+ return CreateContainerResource(hostname,applipath,"srun",nbOfNodes)
+
+def CreateContainerResource(hostname,applipath,protocol,nbOfNodes=1):
+ import getpass
+ ret = ResourceDefinition_cpp()
+ ret.name = hostname.split(".")[0]
+ ret.hostname = ret.name
+ ret.protocol = protocol
+ ret.applipath = applipath
+ ret.nb_node = nbOfNodes
+ ret.nb_proc_per_node = 1
+ ret.can_run_containers = True
+ ret.can_launch_batch_jobs = False
+ ret.mpiImpl = "no mpi"
+ ret.iprotocol = protocol
+ ret.type = "single_machine"
+ ret.username = getpass.getuser()
+ return ret
+
+def ResourceDefinition_cpp_repr(self):
+ pat0 = "{} = {}"
+ pat1 = "{} = \"{}\""
+ data = [("name","name",pat0),
+ ("hostname","hostname",pat0),
+ ("type","type",pat0),
+ ("protocol","protocol",pat0),
+ ("userName","username",pat0),
+ ("appliPath","applipath",pat1),
+ ("mpi","mpiImpl",pat0),
+ ("nbOfNodes","nb_node",pat0),
+ ("nbOfProcPerNode","nb_proc_per_node",pat0),
+ ("canRunContainer","can_run_containers",pat0)
+ ]
+ ret = [c.format(a,getattr(self,b)) for a,b,c in data]
+ return "\n".join( ret )
+
+def ResourcesManager_cpp_GetList(self):
+ return {name:self.GetResourceDefinition(name) for name in self.GetListOfEntries()}
+
+def ResourcesManager_cpp___getitem__(self,name):
+ return self.GetResourceDefinition(name)
+
+def ResourcesManager_cpp___repr__(self):
+ return str( self.GetList() )
+
+def RetrieveRMCppSingleton():
+ import KernelLauncher
+ return HandleToLocalInstance( KernelLauncher.RetrieveInternalInstanceOfLocalCppResourcesManager() )
+
+def GetPlayGroundInsideASlurmJob():
+ import subprocess as sp
+ cont = sp.check_output(["srun","hostname"])
+ nodesMul = [elt for elt in cont.decode().split("\n") if elt != ""]
+ from collections import defaultdict
+ d = defaultdict(int)
+ for elt in nodesMul:
+ d[elt]+=1
+ return d
+
+def BuildCatalogFromScratch(protocol):
+ import os
+ d = GetPlayGroundInsideASlurmJob()
+ rmcpp = RetrieveRMCppSingleton()
+ rmcpp.DeleteAllResourcesInCatalog()
+ for k,v in d.items():
+ contRes = CreateContainerResource(hostname=k,applipath=os.environ["APPLI"],protocol=protocol,nbOfNodes=v)
+ rmcpp.AddResourceInCatalog(contRes)
+
+def GetRequestForGiveContainer(hostname, contName):
+ import Engines
+ import os
+ rp=Engines.ResourceParameters(name=hostname,
+ hostname=hostname,
+ can_launch_batch_jobs=False,
+ can_run_containers=True,
+ OS="Linux",
+ componentList=[],
+ nb_proc=1,
+ mem_mb=1000,
+ cpu_clock=1000,
+ nb_node=1,
+ nb_proc_per_node=1,
+ policy="first",
+ resList=[])
+
+ cp=Engines.ContainerParameters(container_name=contName,
+ mode="start",
+ workingdir=os.path.expanduser("~"),
+ nb_proc=1,
+ isMPI=False,
+ parallelLib="",
+ resource_params=rp)
+ return cp
+
+ResourceDefinition_cpp.repr = ResourceDefinition_cpp_repr
+ResourceDefinition_cpp.__repr__ = ResourceDefinition_cpp_repr
+ResourcesManager_cpp.GetList = ResourcesManager_cpp_GetList
+ResourcesManager_cpp.__getitem__ = ResourcesManager_cpp___getitem__
+ResourcesManager_cpp.__repr__ = ResourcesManager_cpp___repr__
+%}