#!/usr/bin/python3 # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you 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 subprocess depLibraries = ['bzip2', 'gzip', 'unzip', 'openssh-clients', 'nfs-utils', 'wget', 'ws-commons-util', 'commons-dbcp', 'commons-collections', 'commons-httpclient', 'jpackage-utils', 'mysql-connector-python3', 'python-paramiko', 'ipmitool', 'commons-httpclient', 'commons-collections', 'commons-pool', 'commons-dbcp', 'jakarta-commons-logging', 'java-*-openjdk'] def runCmd(cmds): process = subprocess.Popen(' '.join(cmds), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = process.communicate() if process.returncode != 0: raise Exception(stderr.decode('utf-8')) return stdout.decode('utf-8') def getDependentLibraryInfo(): def getVersion(res, pkgname): start = False for l in res.split('\n'): if "Installed Packages" in l: start = True continue if not start: continue (key, value) = l.split(':', 2) key = key.strip() value = value.strip() if key == 'Name' and "*" not in pkgname and pkgname not in value: print("Required package name %s doesn't equal to package %s installed"%(pkgname, value)) return 'UNKNOWN' if 'Version' in key: return value if 'Description' in key: return 'UNKNOWN' # we hit the end return 'UNKNOWN' libraryMap = {} for l in depLibraries: cmd = ['yum', 'info', '"%s"'%l] try: result = runCmd(cmd) version = getVersion(result, l) libraryMap[l] = version except Exception as e: print("When finding %s, encounters %s"%(l, e)) continue return libraryMap def arrangeOutPut(libraryMap): msg = ['\n\n\nBelow is the checking list of library version that CloudStack depends on:'] for l in depLibraries: if l in libraryMap: entry = "%-40s: %s"%(l, libraryMap[l]) else: entry = "%-40s: %s"%(l, 'UNKNOWN') msg.append(entry) print('\n'.join(msg)) if __name__ == '__main__': pythonDepLibraries = ['python', 'python3'] relver = runCmd(['rpm', '-q', 'centos-release']) if relver.startswith('centos-release-') and int(relver[len('centos-release-')]) >= 8: pythonDepLibraries = ['python2', 'python36'] depLibraries = pythonDepLibraries + depLibraries arrangeOutPut(getDependentLibraryInfo())