def update_pkgs_filtered(roles, excludes, maxiterations = 16, iteration = 1, blocks = []): print "Installing packages with filtered blocks" packages = os.popen("/usr/bin/yum %s -y groupinfo %s" % (excludes, roles)).readlines() packages = [package.strip() for package in packages if package.startswith(" ")] exclude_file = open("/etc/excludepkg", "r") excludelist = ["--exclude %s" % exclude.strip() for exclude in exclude_file] excludes = " ".join(excludelist) errored = False (input, output) = os.popen4("/usr/bin/yum -y %s install %s" % (excludes, " ".join(packages))) for line in output.readlines(): if line.startswith("Error: Missing Dependency: ") or line.endswith(" is not signed"): errored = True if not errored: update_log() return else: if iteration == maxiterations: raise Exception blocks.extend([line.split()[-1] for line in output.readlines() if line.startswith("Error: Missing Dependency: ")]) blocks.extend([line.split(".", 1)[0].split("-", 1)[-1].split()[1] for line in output.readlines() if line.endswith(" is not signed")]) blocks = list(set(blocks)) # remove duplicates return update_pkgs_filtered(roles, excludes, maxiterations, iteration + 1, blocks)