#
# NEPI, a framework to manage network experiments
# Copyright (C) 2013 INRIA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
# Authors: Alina Quereilhac
# Julien Tribino
from nepi.execution.attribute import Attribute, Flags, Types
from nepi.execution.resource import ResourceManager, clsinit_copy, \
ResourceState, reschedule_delay
#import time
#import threading
#clsinit_copy is used to copy the attirbute from parent class
@clsinit_copy
class RMName(ResourceManager):
_rtype = "RMName" # Name that will be used in the Experiment Description Script
_help = "Help that describe the RM"
_backend_type = "backend" # Name of the platform this RM is attached.
_authorized_connections = ["RMName1" , "RMName2"] # list of valid connection for this RM
@classmethod
def _register_attributes(cls):
'''
This method is used to register all the attribute of this RM. Check the
file src/execution/attribute.py to see all the fields of this class
'''
attribute1 = Attribute("nameOfAttribute1", "Description of the Attribute 1",
flags = Flags.Design)
attribute2 = Attribute("nameOfAttribute2", "Description of the Attribute 2",
flags = Flags.Design)
cls._register_attribute(attribute1)
cls._register_attribute(attribute2)
def __init__(self, ec, guid):
'''
In the init, we usually intialize the variable of the RM that are not attribute
'''
super(RMName, self).__init__(ec, guid)
self.var1 = None
def log_message(self, msg):
'''
In some particular cases, it is required to redefined the log of the RM.
The default log require the name of the node, but sometimes,
it does not mean something.
'''
return " guid %d - host %s - %s " % (self.guid,
self.get("hostname"), msg)
def valid_connection(self, guid):
'''
Check if the connection is valide or not, depending on the list povided in the parameter
_authorized_connection described above
'''
return True
# This one is not mandatory
def do_discover(self):
'''
Do anything required to discover the resource.The meaning of discover
is different for each RM
'''
super(RMName, self).do_discover()
# This one is not mandatory
def do_provision(self):
'''
Do anything required to provision the resource.The meaning of provision
is different for each RM
'''
super(RMName, self).do_provision()
def do_deploy(self):
'''
Do anything required to deploy the resource.The meaning of deploy
is different for each RM
'''
super(RMName, self).do_deploy()
def do_start(self):
'''
Do anything required to start the resource.The meaning of start
is different for each RM
'''
super(RMName, self).do_release()
def do_stop(self):
'''
Do anything required to stop the resource.The meaning of stop
is different for each RM
'''
super(RMName, self).do_release()
def do_release(self):
'''
Do anything required to release the resource.The meaning of release
is different for each RM
'''
super(RMName, self).do_release()