#!/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())