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',
}
)