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 sys
required_packages = [
'sudo',
'make',
'live-build',
'pbuilder',
'devscripts',
'python-pystache'
]
import util
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 = []
deps = {
'packages': [
'sudo',
'make',
'live-build',
'pbuilder',
'devscripts',
'python-pystache'
],
'binaries': []
}
print("Checking if packages required for VyOS image build are installed")
for p in required_packages:
if not is_installed(p):
missing_packages.append(p)
checker = util.DependencyChecker(deps)
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")
missing = checker.get_missing_dependencies()
if not missing:
print("All dependencies are installed")
sys.exit(0)
else:
checker.print_missing_deps()
sys.exit(1)
sys.exit(0)

View File

@ -21,41 +21,31 @@
import os
import sys
from distutils.spawn import find_executable
required_packages = [
'make',
'qemu-system-x86',
'qemu-utils'
]
import util
deps = {
'packages': [
'make',
'qemu-system-x86',
'qemu-utils'
],
'binaries': ['packer']
}
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
print("Checking if packages required for VyOS image build are installed")
checker = util.DependencyChecker(deps)
missing_packages = []
print("Checking if packages required for VyOS VM image build are installed")
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)
missing = checker.get_missing_dependencies()
if not missing:
print("All dependencies are installed")
sys.exit(0)
else:
print("All required packages are installed")
if find_executable("packer"):
print("Your system has Packer.")
else:
print("Your system does not have Packer.")
print("Please install Packer from https://www.packer.io/downloads.html.")
checker.print_missing_deps()
if 'packer' in missing['binaries']:
print("Your system does not have Packer.")
print("Please install Packer from https://www.packer.io/downloads.html.")
sys.exit(1)
sys.exit(0)

View File

@ -19,6 +19,7 @@
import sys
import os
from distutils.spawn import find_executable
import defaults
@ -27,3 +28,38 @@ def check_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.")
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']))