oops, refreshpeer in tag plcapi-5.0-17 is broken
[plcapi.git] / PLC / Methods / GetNodeFlavour.py
index c58830a..6ebcc12 100644 (file)
@@ -6,17 +6,17 @@ from PLC.Faults import *
 from PLC.Parameter import *
 from PLC.Nodes import Node, Nodes
 
-from PLC.Accessors.Accessors_standard import *                 # import node accessors
+from PLC.Accessors.Accessors_standard import *                  # import node accessors
 
 class GetNodeFlavour(Method):
     """
     Returns detailed information on a given node's flavour, i.e. its
-    base installation. 
+    base installation.
 
     This depends on the global PLC settings in the PLC_FLAVOUR area,
     optionnally overridden by any of the following tags if set on that node:
 
-    'arch', 'pldistro', 'fcdistro', (xxx fcdistro not yet supported)
+    'arch', 'pldistro', 'fcdistro',
     'deployment', 'extensions',
     """
 
@@ -28,22 +28,27 @@ class GetNodeFlavour(Method):
               Node.fields['hostname']),
         ]
 
-    returns = { 
+    returns = {
         'nodefamily' : Parameter (str, "the nodefamily this node should be based upon"),
+        'fcdistro': Parameter (str, "the fcdistro this node should be based upon"),
         'extensions' : [ Parameter (str, "extensions to add to the base install") ],
         'plain' : Parameter (bool, "use plain bootstrapfs image if set (for tests)" ) ,
         }
 
-    
+
     ########## nodefamily
     def nodefamily (self, auth, node_id, fcdistro, arch):
 
         # the deployment tag, if set, wins
+        # xxx Thierry: this probably is wrong; we need fcdistro to be set anyway
+        # for generating the proper yum config....
         deployment = GetNodeDeployment (self.api).call(auth,node_id)
         if deployment: return deployment
 
         pldistro = GetNodePldistro (self.api).call(auth, node_id)
-        if not pldistro: pldistro = self.api.config.PLC_FLAVOUR_NODE_PLDISTRO
+        if not pldistro:
+            pldistro = self.api.config.PLC_FLAVOUR_NODE_PLDISTRO
+            SetNodePldistro(self.api).call(auth,node_id,pldistro)
 
         # xxx would make sense to check the corresponding bootstrapfs is available
         return "%s-%s-%s"%(pldistro,fcdistro,arch)
@@ -66,10 +71,15 @@ class GetNodeFlavour(Method):
         node_id = node['node_id']
 
         arch = GetNodeArch (self.api).call(auth,node_id)
-        if not arch: arch = self.api.config.PLC_FLAVOUR_NODE_ARCH
+        # if not set, use the global default and tag the node, in case the global default changes later on
+        if not arch:
+            arch = self.api.config.PLC_FLAVOUR_NODE_ARCH
+            SetNodeArch (self.api).call(auth,node_id,arch)
 
         fcdistro = GetNodeFcdistro (self.api).call(auth, node_id)
-        if not fcdistro: fcdistro = self.api.config.PLC_FLAVOUR_NODE_FCDISTRO
+        if not fcdistro:
+            fcdistro = self.api.config.PLC_FLAVOUR_NODE_FCDISTRO
+            SetNodeFcdistro (self.api).call (auth, node_id, fcdistro)
 
         # xxx could use some sanity checking, and could provide fallbacks
         return { 'nodefamily' : self.nodefamily(auth,node_id, fcdistro, arch),