from PLC.Nodes import Node
from PLC.Interfaces import Interface
from PLC.Slices import Slice
-from PLC.Ilinks import Ilink
+#from PLC.Ilinks import Ilink
from PLC.Accessors.Factory import define_accessors, all_roles, tech_roles
current_module = sys.modules[__name__]
#### example : attach vlan ids on interfaces
-###define_accessors(current_module, Interface, "Vlan", "vlan","interface/general", "tag for setting VLAN id",
-### get_roles=all_roles, set_roles=tech_roles)
+# The third argument expose_in_api is a boolean flag that tells whether this tag may be handled
+# through the Add/Get/Update methods as a native field
+#
+#define_accessors(current_module, Interface, "Vlan", "vlan",
+# "interface/general", "tag for setting VLAN id",
+# get_roles=all_roles, set_roles=tech_roles)
from PLC.Nodes import Node
from PLC.Interfaces import Interface
from PLC.Slices import Slice
-from PLC.Ilinks import Ilink
+#from PLC.Ilinks import Ilink
from PLC.Accessors.Factory import define_accessors, all_roles, tech_roles
#
# slice vref
-define_accessors(current_module, Slice, "Vref", 'vref', 'slice/config', 'vserver reference image type',
- get_roles=all_roles, set_roles=['admin'])
+# xxx - don't expose yet in api interface and slices dont know how to use that yet
+define_accessors(current_module, Slice, "Vref", "vref",
+ "slice/config", "vserver reference image type",
+ get_roles=all_roles, set_roles=["admin"], expose_in_api=False)
# node architecture
-define_accessors(current_module, Node, "Arch", 'arch', 'node/config', 'architecture name',
- get_roles=all_roles, set_roles=tech_roles )
+define_accessors(current_module, Node, "Arch", "arch",
+ "node/config", "architecture name",
+ get_roles=all_roles, set_roles=tech_roles, expose_in_api=True)
# distribution to be deployed
-define_accessors(current_module, Node, "Pldistro", 'pldistro', 'node/config', 'PlanetLab distribution',
- get_roles=all_roles, set_roles=['admin'] )
+define_accessors(current_module, Node, "Pldistro", "pldistro",
+ "node/config", "PlanetLab distribution",
+ get_roles=all_roles, set_roles=["admin"], expose_in_api=True)
# node deployment (alpha, beta, ...)
-define_accessors(current_module, Node, "Deployment", "deployment", "node/operation",
- 'deployment flavour, typically "alpha", "beta", or "production"',
- get_roles=all_roles, set_roles=['admin'])
+define_accessors(current_module, Node, "Deployment", "deployment",
+ "node/operation", 'typically "alpha", "beta", or "production"',
+ get_roles=all_roles, set_roles=["admin"], expose_in_api=True)
# extension
-define_accessors(current_module, Node, "Extensions", "extensions", "node/config", "space-separated list of extensions to install",
- get_roles=all_roles, set_roles=['admin'])
+define_accessors(current_module, Node, "Extensions", "extensions",
+ "node/config", "space-separated list of extensions to install",
+ get_roles=all_roles, set_roles=["admin"])
# test nodes perform their installation from an uncompressed bootstrapfs
-define_accessors(current_module, Node, "PlainBootstrapfs", "plain-bootstrapfs", "node/config", "use uncompressed bootstrapfs when set",
- get_roles=all_roles, set_roles=['admin','pi','tech'])
-
-# interface accessors
-define_accessors(current_module, Interface, "Ifname", "ifname", "interface/config", "linux name",
+define_accessors(current_module, Node, "PlainBootstrapfs", "plain-bootstrapfs",
+ "node/config", "use uncompressed bootstrapfs when set",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Driver", "driver", "interface/config", "driver name",
+
+# interface
+# xxx - don't expose yet in api interface and slices dont know how to use that yet
+define_accessors(current_module, Interface, "Ifname", "ifname",
+ "interface/config", "linux name",
+ get_roles=all_roles, set_roles=tech_roles, expose_in_api=False)
+define_accessors(current_module, Interface, "Driver", "driver",
+ "interface/config", "driver name",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Alias", "alias", "interface/config", "interface alias",
+define_accessors(current_module, Interface, "Alias", "alias",
+ "interface/config", "interface alias",
get_roles=all_roles, set_roles=tech_roles)
from PLC.Nodes import Node
from PLC.Interfaces import Interface
from PLC.Slices import Slice
-from PLC.Ilinks import Ilink
+#from PLC.Ilinks import Ilink
from PLC.Accessors.Factory import define_accessors, all_roles, tech_roles
current_module = sys.modules[__name__]
#### Wireless
-
-define_accessors(current_module, Interface, "WifiMode", "mode", "interface/wifi", "Wifi operation mode - see iwconfig",
+define_accessors(current_module, Interface, "Mode", "mode",
+ "interface/wifi", "Wifi operation mode - see iwconfig",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Essid", "essid", "interface/wifi", "Wireless essid - see iwconfig",
+define_accessors(current_module, Interface, "Essid", "essid",
+ "interface/wifi", "Wireless essid - see iwconfig",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Nw", "nw", "interface/wifi", "Wireless nw - see iwconfig",
+define_accessors(current_module, Interface, "Nw", "nw",
+ "interface/wifi", "Wireless nw - see iwconfig",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Freq", "freq", "interface/wifi", "Wireless freq - see iwconfig",
+define_accessors(current_module, Interface, "Freq", "freq",
+ "interface/wifi", "Wireless freq - see iwconfig",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Channel", "channel", "interface/wifi", "Wireless channel - see iwconfig",
+define_accessors(current_module, Interface, "Channel", "channel",
+ "interface/wifi", "Wireless channel - see iwconfig",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Sens", "sens", "interface/wifi", "Wireless sens - see iwconfig",
+define_accessors(current_module, Interface, "Sens", "sens",
+ "interface/wifi", "Wireless sens - see iwconfig",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Rate", "rate", "interface/wifi", "Wireless rate - see iwconfig",
+define_accessors(current_module, Interface, "Rate", "rate",
+ "interface/wifi", "Wireless rate - see iwconfig",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Key", "key", "interface/wifi", "Wireless key - see iwconfig key",
+define_accessors(current_module, Interface, "Key", "key",
+ "interface/wifi", "Wireless key - see iwconfig key",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Key1", "key1", "interface/wifi", "Wireless key1 - see iwconfig key[1]",
+define_accessors(current_module, Interface, "Key1", "key1",
+ "interface/wifi", "Wireless key1 - see iwconfig key[1]",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Key2", "key2", "interface/wifi", "Wireless key2 - see iwconfig key[2]",
+define_accessors(current_module, Interface, "Key2", "key2",
+ "interface/wifi", "Wireless key2 - see iwconfig key[2]",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Key3", "key3", "interface/wifi", "Wireless key3 - see iwconfig key[3]",
+define_accessors(current_module, Interface, "Key3", "key3",
+ "interface/wifi", "Wireless key3 - see iwconfig key[3]",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Key4", "key4", "interface/wifi", "Wireless key4 - see iwconfig key[4]",
+define_accessors(current_module, Interface, "Key4", "key4",
+ "interface/wifi", "Wireless key4 - see iwconfig key[4]",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "SecurityMode", "securitymode", "interface/wifi", "Wireless securitymode - see iwconfig enc",
+define_accessors(current_module, Interface, "SecurityMode", "securitymode",
+ "interface/wifi", "Wireless securitymode - see iwconfig enc",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Iwconfig", "iwconfig", "interface/wifi", "Wireless iwconfig - see ifup-wireless",
+define_accessors(current_module, Interface, "Iwconfig", "iwconfig",
+ "interface/wifi", "Wireless iwconfig - see ifup-wireless",
get_roles=all_roles, set_roles=tech_roles)
-define_accessors(current_module, Interface, "Iwpriv", "iwpriv", "interface/wifi", "Wireless iwpriv - see ifup-wireless",
+define_accessors(current_module, Interface, "Iwpriv", "iwpriv",
+ "interface/wifi", "Wireless iwpriv - see ifup-wireless",
get_roles=all_roles, set_roles=tech_roles)
-
all_roles = [ 'admin', 'pi', 'tech', 'user', 'node' ]
tech_roles = [ 'admin', 'pi', 'tech' ]
+#
# generates 2 method classes:
# Get<classname><methodsuffix> (auth, id_or_name) -> value or None
# Set<classname><methodsuffix> (auth, id_or_name, value) -> None
# value is always a string, no cast nor typecheck for now
#
+# The expose_in_api flag tells whether this tag may be handled
+# through the Add/Get/Update methods as a native field
+#
# note: tag_min_role_id gets attached to the tagtype instance,
# while get_roles and set_roles get attached to the created methods
+# this might need a cleanup
#
-# returns a tuple (get_method, set_method)
-# See Accessors* for examples
-def define_accessors (module, objclass, methodsuffix,
- tagname, category, description, tag_min_role_id=10,
- get_roles=['admin'], set_roles=['admin']):
+def define_accessors (module, objclass, methodsuffix, tagname,
+ category, description,
+ get_roles=['admin'], set_roles=['admin'],
+ tag_min_role_id=10, expose_in_api = False):
if objclass not in taggable_classes:
try:
raise PLCInvalidArgument,"PLC.Accessors.Factory: unknown class %s"%objclass.__name__
except:
raise PLCInvalidArgument,"PLC.Accessors.Factory: unknown class ??"
+
+ # side-effect on, say, Node.tags, if required
+ if expose_in_api:
+ getattr(objclass,'tags')[tagname]=Parameter(str,"accessor")
+
classname=objclass.__name__
get_name = "Get" + classname + methodsuffix
set_name = "Set" + classname + methodsuffix
}
view_tags_name = "view_node_tags"
- # tags declared here should also be defined as Accessors to ensure that the TagType is created
- # type info not used yet
- tags = {
- # regular nodes
- 'arch': str,
- 'pldistro' : str,
- 'deployment': str,
- # dummynet nodes
- }
+ # tags are used by the Add/Get/Update methods to expose tags
+ # this is initialized here and updated by the accessors factory
+ tags = { }
def validate_hostname(self, hostname):
if not valid_hostname(hostname):