image_test/configuration/linux/redhat.py (50 lines of code) (raw):

#!/usr/bin/env python3 # Copyright 2018 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import abc import generic_distro import utils class RedHatTests(generic_distro.GenericDistroTests): """ Abstract class. Please use a derived one. """ __metaclass__ = abc.ABCMeta @utils.RetryOnFailure() def TestPackageInstallation(self): """ Network instabilities can lead to errors when fetching the yum repository. It worths to try if that happens """ # install something to test repository sanity utils.Execute(['yum', '-y', 'install', 'tree']) # in case it was already installed, ask for reinstall just to be sure utils.Execute(['yum', '-y', 'reinstall', 'tree']) def IsPackageInstalled(self, package_name): # the following command returns zero if package is installed command = ['yum', 'list', 'installed', package_name] rc, output = utils.Execute(command, raise_errors=False) return rc == 0 def TestPackageManagerConfig(self): command = ['grep', '-r', 'packages.cloud.google.com', '/etc/yum.repos.d/'] utils.Execute(command) @abc.abstractmethod def GetYumCronConfig(self): """ Return the location of yum-cron configuration on the system and a configuration dictionary to be checked on """ pass def TestAutomaticSecurityUpdates(self): # the following command returns zero if package is installed utils.Execute(['yum', 'list', 'installed', 'yum-cron']) # service returns zero if service exists and is running utils.Execute(['service', 'yum-cron', 'status']) # check yum-cron configuration # Now this part is, unfortunately, different between RedHat 6 and 7 yum_cron_file, configs = self.GetYumCronConfig() for key in configs: command = ['grep', key, yum_cron_file] rc, output = utils.Execute(command, capture_output=True) # get clean text after '=' token cur_value = generic_distro.RemoveCommentAndStrip( output[output.find('=') + 1:] ) if configs[key] != cur_value: raise Exception('Yum-cron config "%s" is "%s" but expected "%s"' % ( key, cur_value, configs[key])) class RedHat6Tests(RedHatTests): def GetYumCronConfig(self): return ( '/etc/sysconfig/yum-cron', { 'CHECK_ONLY': 'no', 'DOWNLOAD_ONLY': 'no', } ) class RedHat7Tests(RedHatTests): def GetYumCronConfig(self): return ( '/etc/yum/yum-cron.conf', { 'download_updates': 'yes', 'apply_updates': 'yes', } )