From 9918af35bd1c1a651eefc1b0d398c28b66371092 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Mon, 1 Sep 2008 15:04:02 +0000 Subject: [PATCH] use tags rather than nodegroups for finding out nodefamily when creating bootcd --- PLC/Accessors/Accessors_standard.py | 5 +++++ PLC/Methods/GetBootMedium.py | 33 ++++++++++++----------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/PLC/Accessors/Accessors_standard.py b/PLC/Accessors/Accessors_standard.py index 89109e8..55da25d 100644 --- a/PLC/Accessors/Accessors_standard.py +++ b/PLC/Accessors/Accessors_standard.py @@ -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 ) diff --git a/PLC/Methods/GetBootMedium.py b/PLC/Methods/GetBootMedium.py index 142185d..d556525 100644 --- a/PLC/Methods/GetBootMedium.py +++ b/PLC/Methods/GetBootMedium.py @@ -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): -- 2.43.0