git://git.onelab.eu
/
nodeupdate.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
bc6f2db
)
totally harmless prettification
author
Thierry Parmentelat
<thierry.parmentelat@inria.fr>
Tue, 1 Dec 2015 10:00:01 +0000
(11:00 +0100)
committer
Thierry Parmentelat
<thierry.parmentelat@inria.fr>
Tue, 1 Dec 2015 10:00:01 +0000
(11:00 +0100)
NodeUpdate.py
patch
|
blob
|
history
diff --git
a/NodeUpdate.py
b/NodeUpdate.py
index
8d07729
..
b35e8a9
100755
(executable)
--- a/
NodeUpdate.py
+++ b/
NodeUpdate.py
@@
-1,8
+1,9
@@
#!/usr/bin/python2
#!/usr/bin/python2
-import sys
, os
-from random import Random
+import sys
+import os
import string
import string
+from random import Random
from types import StringTypes
from time import strftime
from types import StringTypes
from time import strftime
@@
-52,7
+53,12
@@
DELETE_RPM_LIST_FILE= '/etc/planetlab/delete-rpm-list'
# so, we force the update of crucial pkgs independently, as
# the whole group is sometimes too much to swallow
# this one is builtin
# so, we force the update of crucial pkgs independently, as
# the whole group is sometimes too much to swallow
# this one is builtin
-CRUCIAL_PACKAGES_BUILTIN=[ 'NodeUpdate' , 'nodemanager-lib', 'nodemanager-lxc', 'nodemanager-vs' ]
+CRUCIAL_PACKAGES_BUILTIN=[
+ 'NodeUpdate',
+ 'nodemanager-lib',
+ 'nodemanager-lxc',
+ 'nodemanager-vs',
+]
# and operations can also try to push a list through a conf_file
# should use the second one for consistency, try the first one as well for legacy
CRUCIAL_PACKAGES_OPTIONAL_PATHS=[
# and operations can also try to push a list through a conf_file
# should use the second one for consistency, try the first one as well for legacy
CRUCIAL_PACKAGES_OPTIONAL_PATHS=[
@@
-67,9
+73,11
@@
CRUCIAL_PACKAGES_OPTIONAL_PATHS=[
# print out a message only if we are displaying output
def Message(message):
if displayOutput:
# print out a message only if we are displaying output
def Message(message):
if displayOutput:
- if isinstance(message,StringTypes) and len(message) >=2 and message[0]=="\n":
+ if isinstance(message,StringTypes) \
+ and len(message) >= 2 \
+ and message[0] == "\n":
print "\n",
print "\n",
- message
=
message[1:]
+ message
=
message[1:]
print strftime(TIMEFORMAT),
print message
print strftime(TIMEFORMAT),
print message
@@
-85,91
+93,81
@@
def Error(Str):
def UpdateCronFile():
try:
def UpdateCronFile():
try:
- randomMinute= Random().randrange(
0, 59, 1
);
- randomHour= Random().randrange(
0, 11, 1
);
+ randomMinute= Random().randrange(
0, 59, 1
);
+ randomHour= Random().randrange(
0, 11, 1
);
- f = open(
CRON_FILE, 'w'
);
- f.write(
"# %s\n" % (TARGET_DESC)
);
+ f = open(
CRON_FILE, 'w'
);
+ f.write(
"# %s\n" % (TARGET_DESC)
);
### xxx is root aliased to the support mailing list ?
### xxx is root aliased to the support mailing list ?
- f.write( "MAILTO=%s\n" % (TARGET_USER) );
- f.write( "SHELL=%s\n" % (TARGET_SHELL) );
- f.write( "%s %s,%s * * * %s %s\n\n" %
- (randomMinute, randomHour, randomHour + 12, TARGET_USER, TARGET_SCRIPT) );
+ f.write("MAILTO=%s\n" % (TARGET_USER));
+ f.write("SHELL=%s\n" % (TARGET_SHELL));
+ f.write("%s %s,%s * * * %s %s\n\n" %
+ (randomMinute, randomHour,
+ randomHour + 12, TARGET_USER, TARGET_SCRIPT));
f.close()
f.close()
- print(
"Created new cron.d entry."
)
+ print(
"Created new cron.d entry."
)
except:
except:
- print(
"Unable to create cron.d entry."
)
+ print(
"Unable to create cron.d entry."
)
# simply remove the cron file we created
def RemoveCronFile():
try:
# simply remove the cron file we created
def RemoveCronFile():
try:
- os.unlink(
CRON_FILE
)
- print(
"Deleted cron.d entry."
)
+ os.unlink(
CRON_FILE
)
+ print(
"Deleted cron.d entry."
)
except:
except:
- print(
"Unable to delete cron.d entry."
)
+ print(
"Unable to delete cron.d entry."
)
class NodeUpdate:
class NodeUpdate:
- def __init__(
self, doReboot
):
+ def __init__(
self, doReboot
):
if self.CheckProxy():
os.environ['http_proxy']= self.HTTP_PROXY
os.environ['HTTP_PROXY']= self.HTTP_PROXY
if self.CheckProxy():
os.environ['http_proxy']= self.HTTP_PROXY
os.environ['HTTP_PROXY']= self.HTTP_PROXY
-
self.doReboot= doReboot
self.doReboot= doReboot
-
-
- def CheckProxy( self ):
- Message( "Checking existence of proxy config file..." )
-
+ def CheckProxy(self):
+ Message("Checking existence of proxy config file...")
if os.access(PROXY_FILE, os.R_OK) and os.path.isfile(PROXY_FILE):
self.HTTP_PROXY= string.strip(file(PROXY_FILE,'r').readline())
if os.access(PROXY_FILE, os.R_OK) and os.path.isfile(PROXY_FILE):
self.HTTP_PROXY= string.strip(file(PROXY_FILE,'r').readline())
- Message(
"Using proxy %s." % self.HTTP_PROXY
)
+ Message(
"Using proxy %s." % self.HTTP_PROXY
)
return 1
else:
return 1
else:
- Message(
"Not using any proxy."
)
+ Message(
"Not using any proxy."
)
return 0
return 0
+ def InstallKeys(self):
+ Message("\nRemoving any existing GPG signing keys from the RPM database")
+ os.system("%s --allmatches -e gpg-pubkey" % RPM_PATH)
+ Message("\nInstalling all GPG signing keys in %s" % RPM_GPG_PATH)
+ os.system("%s --import %s/*" % (RPM_PATH, RPM_GPG_PATH))
- def InstallKeys( self ):
- Message( "\nRemoving any existing GPG signing keys from the RPM database" )
- os.system( "%s --allmatches -e gpg-pubkey" % RPM_PATH )
-
- Message( "\nInstalling all GPG signing keys in %s" % RPM_GPG_PATH )
- os.system( "%s --import %s/*" % (RPM_PATH, RPM_GPG_PATH) )
-
+ def ClearRebootFlag(self):
+ os.system("/bin/rm -rf %s" % REBOOT_FLAG)
- def ClearRebootFlag( self ):
- os.system( "/bin/rm -rf %s" % REBOOT_FLAG )
-
-
- def CheckForUpdates( self ):
-
- Message( "\nRemoving any existing reboot flags" )
+ def CheckForUpdates(self):
+ Message("\nRemoving any existing reboot flags")
self.ClearRebootFlag()
self.ClearRebootFlag()
-
if self.doReboot == 0:
if self.doReboot == 0:
- Message( "\nIgnoring any reboot flags set by RPMs" );
-
- Message( "\nChecking if yum supports SSL certificate checks" )
- if os.system( "%s --help | grep -q sslcertdir" % YUM_PATH ) == 0:
- Message( "It does, using --sslcertdir option" )
+ Message("\nIgnoring any reboot flags set by RPMs");
+ Message("\nChecking if yum supports SSL certificate checks")
+ if os.system("%s --help | grep -q sslcertdir" % YUM_PATH) == 0:
+ Message("It does, using --sslcertdir option")
sslcertdir = "--sslcertdir=" + SSL_CERT_DIR
else:
sslcertdir = "--sslcertdir=" + SSL_CERT_DIR
else:
- Message(
"Unsupported, not using --sslcertdir option"
)
+ Message(
"Unsupported, not using --sslcertdir option"
)
sslcertdir = ""
yum_options=""
sslcertdir = ""
yum_options=""
- Message(
"\nChecking if yum supports --verbose"
)
- if os.system(
"%s --help | grep -q verbose" % YUM_PATH
) == 0:
- Message(
"It does, using --verbose option"
)
+ Message(
"\nChecking if yum supports --verbose"
)
+ if os.system(
"%s --help | grep -q verbose" % YUM_PATH
) == 0:
+ Message(
"It does, using --verbose option"
)
yum_options += " --verbose"
else:
yum_options += " --verbose"
else:
- Message(
"Unsupported, not using --verbose option"
)
+ Message(
"Unsupported, not using --verbose option"
)
# a configurable list of packages to try and update independently
# cautious..
# a configurable list of packages to try and update independently
# cautious..
@@
-182,72
+180,71
@@
class NodeUpdate:
for package in crucial_packages:
# if package is not yet installed, like e.g. slice images,
# need to yum install, not yum update
for package in crucial_packages:
# if package is not yet installed, like e.g. slice images,
# need to yum install, not yum update
- if os.system("rpm -q %s > /dev/null"%package)
==
0:
- Message(
"\nUpdating crucial package %s" % package)
- os.system(
"%s %s -y update %s" %(YUM_PATH, yum_options, package))
+ if os.system("rpm -q %s > /dev/null"%package)
==
0:
+ Message("\nUpdating crucial package %s" % package)
+ os.system("%s %s -y update %s" %(YUM_PATH, yum_options, package))
else:
else:
- Message(
"\Installing crucial package %s" % package)
- os.system(
"%s %s -y install %s" %(YUM_PATH, yum_options, package))
+ Message("\Installing crucial package %s" % package)
+ os.system("%s %s -y install %s" %(YUM_PATH, yum_options, package))
except:
pass
except:
pass
- Message(
"\nUpdating PlanetLab group"
)
- os.system(
"%s %s %s -y groupinstall \"PlanetLab\"" %
- (YUM_PATH, yum_options, sslcertdir)
)
+ Message(
"\nUpdating PlanetLab group"
)
+ 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(
"\nUpdating rest of system"
)
+ os.system(
"%s %s %s -y update" % (YUM_PATH, yum_options, sslcertdir)
)
- Message(
"\nChecking for extra groups (extensions) to update"
)
+ 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 == "":
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."
)
+ Message(
"No extra groups found in file."
)
else:
extensions_contents.strip()
for extension in extensions_contents.split():
group = "extension%s" % extension
else:
extensions_contents.strip()
for extension in extensions_contents.split():
group = "extension%s" % extension
- Message(
"\nUpdating %s group" % group
)
- os.system(
"%s %s %s -y groupinstall \"%s\"" %
- (YUM_PATH, yum_options, sslcertdir, group)
)
+ Message(
"\nUpdating %s group" % group
)
+ os.system("%s %s %s -y groupinstall \"%s\"" %
+ (YUM_PATH, yum_options, sslcertdir, group))
else:
else:
- Message(
"No extensions file found"
)
+ Message(
"No extensions file found"
)
if os.access(REBOOT_FLAG, os.R_OK) and os.path.isfile(REBOOT_FLAG) and self.doReboot:
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"
)
+ Message(
"\nAt least one update requested the system be rebooted"
)
self.ClearRebootFlag()
self.ClearRebootFlag()
- os.system(
"/sbin/shutdown -r now"
)
+ os.system(
"/sbin/shutdown -r now"
)
- def RebuildRPMdb(
self
):
- Message(
"\nRebuilding RPM Database."
)
- try: os.system(
"rm /var/lib/rpm/__db.*"
)
+ def RebuildRPMdb(
self
):
+ Message(
"\nRebuilding RPM Database."
)
+ try: os.system(
"rm /var/lib/rpm/__db.*"
)
except Exception, err: print "RebuildRPMdb: %s" % err
except Exception, err: print "RebuildRPMdb: %s" % err
- try: os.system(
"%s --rebuilddb" % RPM_PATH
)
+ try: os.system(
"%s --rebuilddb" % RPM_PATH
)
except Exception, err: print "RebuildRPMdb: %s" % err
except Exception, err: print "RebuildRPMdb: %s" % err
- def YumCleanAll (
self
):
+ def YumCleanAll (
self
):
Message ("\nCleaning all yum cache (yum clean all)")
try:
Message ("\nCleaning all yum cache (yum clean all)")
try:
- os.system(
"yum clean all")
+ os.system("yum clean all")
except:
pass
except:
pass
- def RemoveRPMS( self ):
-
- Message( "\nLooking for RPMs to be deleted." )
+ def RemoveRPMS(self):
+ Message("\nLooking for RPMs to be deleted.")
if os.access(DELETE_RPM_LIST_FILE, os.R_OK) and \
os.path.isfile(DELETE_RPM_LIST_FILE):
rpm_list_contents= file(DELETE_RPM_LIST_FILE).read().strip()
if rpm_list_contents == "":
if os.access(DELETE_RPM_LIST_FILE, os.R_OK) and \
os.path.isfile(DELETE_RPM_LIST_FILE):
rpm_list_contents= file(DELETE_RPM_LIST_FILE).read().strip()
if rpm_list_contents == "":
- Message(
"No RPMs listed in file to delete."
)
+ Message(
"No RPMs listed in file to delete."
)
return
rpm_list= string.split(rpm_list_contents)
return
rpm_list= string.split(rpm_list_contents)
- Message(
"Deleting RPMs from %s: %s" %(DELETE_RPM_LIST_FILE," ".join(rpm_list)))
+ Message("Deleting RPMs from %s: %s" %(DELETE_RPM_LIST_FILE," ".join(rpm_list)))
# invoke them separately as otherwise one faulty (e.g. already uninstalled)
# would prevent the other ones from uninstalling
# invoke them separately as otherwise one faulty (e.g. already uninstalled)
# would prevent the other ones from uninstalling
@@
-257,18
+254,17
@@
class NodeUpdate:
if not is_installed:
Message ("Ignoring rpm %s marked to delete, already uninstalled"%rpm)
continue
if not is_installed:
Message ("Ignoring rpm %s marked to delete, already uninstalled"%rpm)
continue
- uninstalled = os.system(
"%s -ev %s" % (RPM_PATH, rpm)
)==0
+ uninstalled = os.system(
"%s -ev %s" % (RPM_PATH, rpm)
)==0
if uninstalled:
Message ("Successfully removed RPM %s"%rpm)
continue
else:
if uninstalled:
Message ("Successfully removed RPM %s"%rpm)
continue
else:
- Error(
"Unable to delete RPM %s, continuing. rc=%d" % (rpm,uninstalled))
+ Error("Unable to delete RPM %s, continuing. rc=%d" % (rpm,uninstalled))
else:
else:
- Message( "No RPMs list file found." )
-
-
+ Message("No RPMs list file found.")
+##############################
if __name__ == "__main__":
# if we are invoked with 'start', display the output.
if __name__ == "__main__":
# if we are invoked with 'start', display the output.
@@
-311,26
+307,25
@@
if __name__ == "__main__":
pid= string.strip(file(NODEUPDATE_PID_FILE).readline())
if pid <> "":
if os.system("/bin/kill -0 %s > /dev/null 2>&1" % pid) == 0:
pid= string.strip(file(NODEUPDATE_PID_FILE).readline())
if pid <> "":
if os.system("/bin/kill -0 %s > /dev/null 2>&1" % pid) == 0:
- Message(
"It appears we are already running, exiting."
)
+ Message(
"It appears we are already running, exiting."
)
sys.exit(1)
# write out our process id
sys.exit(1)
# write out our process id
- pidfile= file(
NODEUPDATE_PID_FILE, 'w'
)
- pidfile.write(
"%d\n" % os.getpid()
)
+ pidfile= file(
NODEUPDATE_PID_FILE, 'w'
)
+ pidfile.write(
"%d\n" % os.getpid()
)
pidfile.close()
nodeupdate= NodeUpdate(doReboot)
if not nodeupdate:
pidfile.close()
nodeupdate= NodeUpdate(doReboot)
if not nodeupdate:
- Error(
"Unable to initialize."
)
+ Error(
"Unable to initialize."
)
else:
nodeupdate.RebuildRPMdb()
nodeupdate.RemoveRPMS()
nodeupdate.InstallKeys()
nodeupdate.YumCleanAll()
nodeupdate.CheckForUpdates()
else:
nodeupdate.RebuildRPMdb()
nodeupdate.RemoveRPMS()
nodeupdate.InstallKeys()
nodeupdate.YumCleanAll()
nodeupdate.CheckForUpdates()
- Message(
"\nUpdate complete."
)
+ Message(
"\nUpdate complete."
)
# remove the PID file
# remove the PID file
- os.unlink( NODEUPDATE_PID_FILE )
-
+ os.unlink(NODEUPDATE_PID_FILE)