Setting tag nodeupdate-0.5-8
[nodeupdate.git] / NodeUpdate.py
index 3553035..c6be451 100644 (file)
@@ -23,7 +23,6 @@ RPM_PATH = "/bin/rpm"
 
 RPM_GPG_PATH = "/etc/pki/rpm-gpg"
 
-
 # location of file containing http/https proxy info, if needed
 PROXY_FILE = '/etc/planetlab/http_proxy'
 
@@ -35,9 +34,11 @@ REBOOT_FLAG = '/etc/planetlab/update-reboot'
 # location of directory containing boot server ssl certs
 SSL_CERT_DIR='/mnt/cdrom/bootme/cacert/'
 
-# file containing list of extra groups to attempt to update,
-# if necessary.
-EXTRA_GROUPS_FILE= '/etc/planetlab/extra-node-groups'
+# file containing the list of extensions this node has, each
+# correspond to a package group in yum repository.
+# this is expected to be updated from the 'extensions tag' 
+# through the 'extensions.php' nodeconfig script
+EXTENSIONS_FILE='/etc/planetlab/extensions'
 
 # file containing a list of rpms that we should attempt to delete
 # before updating everything else. This list is not removed with 
@@ -45,6 +46,16 @@ EXTRA_GROUPS_FILE= '/etc/planetlab/extra-node-groups'
 # that were not intended to be deleted.
 DELETE_RPM_LIST_FILE= '/etc/planetlab/delete-rpm-list'
 
+# ok, so the logic should be simple, just yum update the world
+# however there are many cases in the real life where this 
+# just does not work, because of a glitch somewhere
+# so, we force the update of crucial pkgs independently, as 
+# the whole group is sometimes too much to swallow 
+# this one is builtin
+UPDATE_PACKAGES_BUILTIN=[ 'NodeManager' ]
+# and operations can also try to push a list through a conf_file
+UPDATE_PACKAGES_OPTIONAL_PATH='/etc/planetlab/NodeUpdate.packages'
+
 
 # print out a message only if we are displaying output
 def Message(message):
@@ -152,29 +163,44 @@ class NodeUpdate:
             yum_options += " --verbose"
         else:
             Message( "Unsupported, not using --verbose option" )
-                    
+        
+        # a configurable list of packages to try and update independently
+        # cautious..
+        try:
+            crucial_packages = []
+            for package in UPDATE_PACKAGES_BUILTIN: crucial_packages.append(package)
+            try: crucial_packages += file(UPDATE_PACKAGES_OPTIONAL_PATH).read().split()
+            except: pass
+            for package in crucial_packages:
+                Message( "\nUpdating crucial package %s" % package)
+                os.system( "%s %s -y update %s" %(YUM_PATH, yum_options, package))
+        except:
+            pass
+
         Message( "\nUpdating PlanetLab group" )
-        os.system( "%s %s %s -y groupupdate \"PlanetLab\"" %
+        os.system( "%s %s %s -y groupinstall \"PlanetLab\"" %
                    (YUM_PATH, yum_options, sslcertdir) )
 
         Message( "\nUpdating rest of system" )
         os.system( "%s %s %s -y update" %
                    (YUM_PATH, yum_options, sslcertdir) )
 
-        Message( "\nChecking for extra groups to update" )
-        if os.access(EXTRA_GROUPS_FILE, os.R_OK) and \
-           os.path.isfile(EXTRA_GROUPS_FILE):
-            extra_groups_contents= file(EXTRA_GROUPS_FILE).read()
-            extra_groups_contents= string.strip(extra_groups_contents)
-            if extra_groups_contents == "":
+        Message( "\nChecking for extra groups (extensions) to update" )
+        if os.access(EXTENSIONS_FILE, os.R_OK) and \
+           os.path.isfile(EXTENSIONS_FILE):
+            extensions_contents= file(EXTENSIONS_FILE).read()
+            extensions_contents= string.strip(extensions_contents)
+            if extensions_contents == "":
                 Message( "No extra groups found in file." )
             else:
-                for group in string.split(extra_groups_contents,"\n"):
+                extensions_contents.strip()
+                for extension in extensions_contents.split():
+                    group = "extension%s" % extension
                     Message( "\nUpdating %s group" % group )
-                    os.system( "%s %s %s -y groupupdate \"%s\"" %
+                    os.system( "%s %s %s -y groupinstall \"%s\"" %
                                (YUM_PATH, yum_options, sslcertdir, group) )
         else:
-            Message( "No extra groups file found" )
+            Message( "No extensions file found" )
             
         if os.access(REBOOT_FLAG, os.R_OK) and os.path.isfile(REBOOT_FLAG) and self.doReboot:
             Message( "\nAt least one update requested the system be rebooted" )