1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
from phase import Phase
from task import Task
from main import main
__all__ = ['Phase', 'Task', 'main']
def validate_manifest(data, validator, error):
"""Validates the manifest using the base manifest
:param dict data: The data of the manifest
:param function validator: The function that validates the manifest given the data and a path
:param function error: The function tha raises an error when the validation fails
"""
from bootstrapvz.common.tools import rel_path
validator(data, rel_path(__file__, 'manifest-schema.yml'))
from bootstrapvz.common.releases import get_release, squeeze
release = get_release(data['system']['release'])
if release < squeeze:
error('Only Debian squeeze and later is supported', ['system', 'release'])
# Check the bootloader/partitioning configuration.
# Doing this via the schema is a pain and does not output a useful error message.
if data['system']['bootloader'] == 'grub':
if data['volume']['partitions']['type'] == 'none':
error('Grub cannot boot from unpartitioned disks', ['system', 'bootloader'])
if release == squeeze:
error('Grub installation on squeeze is not supported', ['system', 'bootloader'])
# Check the provided apt.conf(5) options
if 'packages' in data:
for name, val in data['packages'].get('apt.conf.d', {}).iteritems():
from bootstrapvz.common.tools import log_call
status, _, _ = log_call(['apt-config', '-c=/dev/stdin', 'dump'],
stdin=val + '\n')
if status != 0:
error('apt.conf(5) syntax error', ['packages', 'apt.conf.d', name])
|