From 91041f99b87965968a1d90c674ea8df3eed05790 Mon Sep 17 00:00:00 2001 From: Claudio-Daniel Freire Date: Thu, 28 Jul 2011 18:19:01 +0200 Subject: [PATCH] Add useful and important tag filters for node selection: - Location - CPU available - Load average --- src/nepi/testbeds/planetlab/metadata.py | 53 +++++++++++++++++++++++++ src/nepi/testbeds/planetlab/node.py | 24 ++++++++++- 2 files changed, 76 insertions(+), 1 deletion(-) diff --git a/src/nepi/testbeds/planetlab/metadata.py b/src/nepi/testbeds/planetlab/metadata.py index 2ce01c23..e319c5de 100644 --- a/src/nepi/testbeds/planetlab/metadata.py +++ b/src/nepi/testbeds/planetlab/metadata.py @@ -636,6 +636,27 @@ attributes = dict({ "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable, "validation_function": validation.is_string, }), + "city": dict({ + "name": "city", + "help": "Constrain location (city) during resource discovery. May use wildcards.", + "type": Attribute.STRING, + "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable, + "validation_function": validation.is_string, + }), + "country": dict({ + "name": "hostname", + "help": "Constrain location (country) during resource discovery. May use wildcards.", + "type": Attribute.STRING, + "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable, + "validation_function": validation.is_string, + }), + "region": dict({ + "name": "hostname", + "help": "Constrain location (region) during resource discovery. May use wildcards.", + "type": Attribute.STRING, + "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable, + "validation_function": validation.is_string, + }), "architecture": dict({ "name": "architecture", "help": "Constrain architexture during resource discovery.", @@ -699,6 +720,38 @@ attributes = dict({ "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable, "validation_function": validation.is_number, }), + "min_load": dict({ + "name": "minLoad", + "help": "Constrain node load average while picking PlanetLab nodes. Specifies a lower acceptable bound.", + "type": Attribute.DOUBLE, + "range": (0,2**31), + "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable, + "validation_function": validation.is_number, + }), + "max_load": dict({ + "name": "maxLoad", + "help": "Constrain node load average while picking PlanetLab nodes. Specifies an upper acceptable bound.", + "type": Attribute.DOUBLE, + "range": (0,2**31), + "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable, + "validation_function": validation.is_number, + }), + "min_cpu": dict({ + "name": "minCpu", + "help": "Constrain available cpu time while picking PlanetLab nodes. Specifies a lower acceptable bound.", + "type": Attribute.DOUBLE, + "range": (0,100), + "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable, + "validation_function": validation.is_number, + }), + "max_cpu": dict({ + "name": "maxCpu", + "help": "Constrain available cpu time while picking PlanetLab nodes. Specifies an upper acceptable bound.", + "type": Attribute.DOUBLE, + "range": (0,100), + "flags": Attribute.ExecReadOnly | Attribute.ExecImmutable, + "validation_function": validation.is_number, + }), "up": dict({ "name": "up", diff --git a/src/nepi/testbeds/planetlab/node.py b/src/nepi/testbeds/planetlab/node.py index 1b9b15e2..4d055c10 100644 --- a/src/nepi/testbeds/planetlab/node.py +++ b/src/nepi/testbeds/planetlab/node.py @@ -49,10 +49,17 @@ class Node(object): 'architecture' : ('arch','value'), 'operatingSystem' : ('fcdistro','value'), 'pl_distro' : ('pldistro','value'), + 'city' : ('city','value'), + 'country' : ('country','value'), + 'region' : ('region','value'), 'minReliability' : ('reliability%(timeframe)s', ']value'), 'maxReliability' : ('reliability%(timeframe)s', '[value'), 'minBandwidth' : ('bw%(timeframe)s', ']value'), 'maxBandwidth' : ('bw%(timeframe)s', '[value'), + 'minLoad' : ('load%(timeframe)s', ']value'), + 'maxLoad' : ('load%(timeframe)s', '[value'), + 'minCpu' : ('cpu%(timeframe)s', ']value'), + 'maxCpu' : ('cpu%(timeframe)s', '[value'), } DEPENDS_PIDFILE = '/tmp/nepi-depends.pid' @@ -64,6 +71,10 @@ class Node(object): maxReliability = _castproperty(float, '_maxReliability') minBandwidth = _castproperty(float, '_minBandwidth') maxBandwidth = _castproperty(float, '_maxBandwidth') + minCpu = _castproperty(float, '_minCpu') + maxCpu = _castproperty(float, '_maxCpu') + minLoad = _castproperty(float, '_minLoad') + maxLoad = _castproperty(float, '_maxLoad') def __init__(self, api=None): if not api: @@ -76,10 +87,17 @@ class Node(object): self.operatingSystem = None self.pl_distro = None self.site = None + self.city = None + self.country = None + self.region = None self.minReliability = None self.maxReliability = None self.minBandwidth = None self.maxBandwidth = None + self.minCpu = None + self.maxCpu = None + self.minLoad = None + self.maxLoad = None self.min_num_external_ifaces = None self.max_num_external_ifaces = None self.timeframe = 'm' @@ -348,7 +366,11 @@ class Node(object): self.minReliability = \ self.maxReliability = \ self.minBandwidth = \ - self.maxBandwidth = None + self.maxBandwidth = \ + self.minCpu = \ + self.maxCpu = \ + self.minLoad = \ + self.maxLoad = None def install_dependencies(self): if self.required_packages and not self._installed: -- 2.47.0