Factor out dependency checking functions to its own class (ref T9).

This commit is contained in:
Daniil Baturin 2016-03-04 15:05:03 -05:00
parent c6bca34587
commit 08a6856b3c
3 changed files with 77 additions and 54 deletions

View File

@ -23,34 +23,31 @@
import os import os
import sys import sys
required_packages = [ import util
deps = {
'packages': [
'sudo', 'sudo',
'make', 'make',
'live-build', 'live-build',
'pbuilder', 'pbuilder',
'devscripts', 'devscripts',
'python-pystache' 'python-pystache'
] ],
'binaries': []
}
def is_installed(name):
result = os.system("dpkg-query -W --showformat='${{Status}}\n' {name} 2>&1 | grep 'install ok installed' >/dev/null".format(name=name))
return True if result == 0 else False
missing_packages = []
print("Checking if packages required for VyOS image build are installed") print("Checking if packages required for VyOS image build are installed")
for p in required_packages: checker = util.DependencyChecker(deps)
if not is_installed(p):
missing_packages.append(p)
if missing_packages: missing = checker.get_missing_dependencies()
print("Your system does not have some of the required packages installed.") if not missing:
print("Please install the following packages:") print("All dependencies are installed")
print(" ".join(missing_packages))
sys.exit(1)
else:
print("All required packages are installed")
sys.exit(0) sys.exit(0)
else:
checker.print_missing_deps()
sys.exit(1)
sys.exit(0)

View File

@ -21,39 +21,29 @@
import os import os
import sys import sys
from distutils.spawn import find_executable
required_packages = [ import util
deps = {
'packages': [
'make', 'make',
'qemu-system-x86', 'qemu-system-x86',
'qemu-utils' 'qemu-utils'
] ],
'binaries': ['packer']
}
print("Checking if packages required for VyOS image build are installed")
def is_installed(name): checker = util.DependencyChecker(deps)
result = os.system("dpkg-query -W --showformat='${{Status}}\n' {name} 2>&1 | grep 'install ok installed' >/dev/null".format(name=name))
return True if result == 0 else False
missing = checker.get_missing_dependencies()
missing_packages = [] if not missing:
print("All dependencies are installed")
print("Checking if packages required for VyOS VM image build are installed") sys.exit(0)
for p in required_packages:
if not is_installed(p):
missing_packages.append(p)
if missing_packages:
print("Your system does not have some of the required packages installed.")
print("Please install the following packages:")
print(" ".join(missing_packages))
sys.exit(1)
else:
print("All required packages are installed")
if find_executable("packer"):
print("Your system has Packer.")
else: else:
checker.print_missing_deps()
if 'packer' in missing['binaries']:
print("Your system does not have Packer.") print("Your system does not have Packer.")
print("Please install Packer from https://www.packer.io/downloads.html.") print("Please install Packer from https://www.packer.io/downloads.html.")
sys.exit(1) sys.exit(1)

View File

@ -19,6 +19,7 @@
import sys import sys
import os import os
from distutils.spawn import find_executable
import defaults import defaults
@ -27,3 +28,38 @@ def check_build_config():
print("Build config file ({file}) does not exist".format(file=defaults.BUILD_CONFIG)) print("Build config file ({file}) does not exist".format(file=defaults.BUILD_CONFIG))
print("If you are running this script by hand, you should better not. Run 'make iso' instead.") print("If you are running this script by hand, you should better not. Run 'make iso' instead.")
sys.exit(1) sys.exit(1)
class DependencyChecker(object):
def __init__(self, spec):
missing_packages = self._get_missing_packages(spec['packages'])
missing_binaries = self._get_missing_binaries(spec['binaries'])
self.__missing = {'packages': missing_packages, 'binaries': missing_binaries}
def _package_installed(self, name):
result = os.system("dpkg-query -W --showformat='${{Status}}\n' {name} 2>&1 | grep 'install ok installed' >/dev/null".format(name=name))
return True if result == 0 else False
def _get_missing_packages(self, packages):
missing_packages = []
for p in packages:
if not self._package_installed(p):
missing_packages.append(p)
return missing_packages
def _get_missing_binaries(self, binaries):
missing_binaries = []
for b in binaries:
if not find_executable(b):
missing_binaries.append(b)
return missing_binaries
def get_missing_dependencies(self):
if self.__missing['packages'] or self.__missing['binaries']:
return self.__missing
return None
def print_missing_deps(self):
print("Missing packages: " + " ".join(self.__missing['packages']))
print("Missing binaries: " + " ".join(self.__missing['binaries']))