use tags rather than nodegroups for finding out nodefamily when creating bootcd
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Mon, 1 Sep 2008 15:04:02 +0000 (15:04 +0000)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Mon, 1 Sep 2008 15:04:02 +0000 (15:04 +0000)
PLC/Accessors/Accessors_standard.py
PLC/Methods/GetBootMedium.py

index 89109e8..55da25d 100644 (file)
@@ -11,6 +11,11 @@ from PLC.Accessors.Factory import define_accessors, all_roles, tech_roles
 import sys
 current_module = sys.modules[__name__]
 
+# NOTE.
+# most of these tag types are defined in MyPLC/db-config, so any details here in the 
+# description/category area is unlikely to make it into the database
+#
+
 # node architecture 
 define_accessors(current_module, Node, "Arch", 'arch',  'node/config', 'architecture name', 
                  get_roles=all_roles, set_roles=tech_roles )
index 142185d..d556525 100644 (file)
@@ -12,7 +12,7 @@ from PLC.Auth import Auth
 from PLC.Nodes import Node, Nodes
 from PLC.Interfaces import Interface, Interfaces
 from PLC.InterfaceSettings import InterfaceSetting, InterfaceSettings
-from PLC.NodeGroups import NodeGroup, NodeGroups
+from PLC.NodeTags import NodeTags
 
 # could not define this in the class..
 boot_medium_actions = [ 'node-preview',
@@ -219,32 +219,27 @@ class GetBootMedium(Method):
 
     # see also InstallBootstrapFS in bootmanager that does similar things
     def get_nodefamily (self, node):
+        # get defaults from the myplc build
         try:
             (pldistro,arch) = file("/etc/planetlab/nodefamily").read().strip().split("-")
         except:
             (pldistro,arch) = ("planetlab","i386")
             
+        # with no valid argument, return system-wide defaults
         if not node:
             return (pldistro,arch)
 
-        known_archs = [ 'i386', 'x86_64' ]
-        nodegroupnames = [ ng['groupname'] for ng in NodeGroups (self.api, node['nodegroup_ids'],['groupname'])]
-        # (1) if groupname == arch, nodefamily becomes pldistro-groupname
-        # (2) else if groupname looks like pldistro-arch, it is taken as a nodefamily
-        # (3) otherwise groupname is taken as an extension
-        for nodegroupname in nodegroupnames:
-            if nodegroupname in known_archs:
-                arch = nodegroupname
-            else:
-                for known_arch in known_archs:
-                    try:
-                        (api_pldistro,api_arch)=nodegroupname.split("-")
-                        # sanity check
-                        if api_arch != known_arch: raise Exception,"mismatch"
-                        (pldistro,arch) = (api_pldistro, api_arch)
-                        break
-                    except:
-                        pass
+        node_id=node['node_id']
+        # cannot use accessors in the API itself
+        # the 'arch' tag type is assumed to exist, see db-config
+        arch_tags = NodeTags (self.api, {'tagname':'arch','node_id':node_id},['tagvalue'])
+        if arch_tags:
+            arch=arch_tags[0]['tagvalue']
+        # ditto
+        pldistro_tags = NodeTags (self.api, {'tagname':'pldistro','node_id':node_id},['tagvalue'])
+        if pldistro_tags:
+            pldistro=pldistro_tags[0]['tagvalue']
+
         return (pldistro,arch)
 
     def bootcd_version (self):