Fix bug in packages stanza (fixes #126)

Created 3 new tasks:
  AddManifestSources
	AddRemoteManifestPackages
	AddLocalManifestPackages
They are added independently depending on what is specified in the manifest.
This commit is contained in:
Anders Ingemann 2014-01-09 17:21:29 +01:00
parent 0723290c45
commit ebd8f71fdb
7 changed files with 65 additions and 30 deletions

View file

@ -45,9 +45,9 @@ class BootstrapInformation(object):
self.manifest_vars[key] = now.strftime(key)
from pkg.sourceslist import SourceLists
self.source_lists = SourceLists(self.manifest.packages, self.manifest_vars)
self.source_lists = SourceLists(self.manifest_vars)
from pkg.packagelist import PackageList
self.packages = PackageList(self.manifest.packages, self.manifest_vars, self.source_lists)
self.packages = PackageList(self.manifest_vars, self.source_lists)
self.include_packages = set()
self.exclude_packages = set()

View file

@ -3,20 +3,11 @@ from exceptions import PackageError
class PackageList(object):
def __init__(self, data, manifest_vars, source_lists):
def __init__(self, manifest_vars, source_lists):
self.manifest_vars = manifest_vars
self.source_lists = source_lists
self.remote = {}
self.local = set()
if 'remote' in data:
for package in data['remote']:
if isinstance(package, dict):
self.add(package['name'], package.get('target', None))
else:
self.add(package, None)
if 'local' in data:
for package_path in data['local']:
self.local.add(package_path)
def add(self, name, target=None):
if target is None:

View file

@ -2,13 +2,9 @@
class SourceLists(object):
def __init__(self, data, manifest_vars):
def __init__(self, manifest_vars):
self.sources = {}
self.manifest_vars = manifest_vars
if 'sources' in data:
for name, lines in data['sources'].iteritems():
for line in lines:
self.add(name, line)
def add(self, name, line):
name = name.format(**self.manifest_vars)

View file

@ -45,17 +45,27 @@ ssh_set = [security.DisableSSHPasswordAuthentication,
cleanup.ShredHostkeys,
]
apt_set = [apt.AddDefaultSources,
apt.WriteSources,
apt.DisableDaemonAutostart,
apt.AptUpdate,
apt.AptUpgrade,
packages.InstallRemotePackages,
packages.InstallLocalPackages,
apt.PurgeUnusedPackages,
apt.AptClean,
apt.EnableDaemonAutostart,
]
def get_apt_set(manifest):
base = [apt.AddDefaultSources,
apt.WriteSources,
apt.DisableDaemonAutostart,
apt.AptUpdate,
apt.AptUpgrade,
packages.InstallRemotePackages,
packages.InstallLocalPackages,
apt.PurgeUnusedPackages,
apt.AptClean,
apt.EnableDaemonAutostart,
]
if 'sources' in manifest.packages:
base.append(apt.AddManifestSources)
if 'remote' in manifest.packages:
base.append(apt.AddRemoteManifestPackages)
if 'local' in manifest.packages:
base.append(apt.AddLocalManifestPackages)
return base
locale_set = [locale.LocaleBootstrapPackage,
locale.GenerateLocale,

View file

@ -5,9 +5,22 @@ import locale
import os
class AddManifestSources(Task):
description = 'Adding sources from the manifest'
phase = phases.preparation
@classmethod
def run(cls, info):
if 'sources' in info.manifest.packages:
for name, lines in info.manifest.packages['sources'].iteritems():
for line in lines:
info.source_lists.add(name, line)
class AddDefaultSources(Task):
description = 'Adding default release sources'
phase = phases.preparation
predecessors = [AddManifestSources]
@classmethod
def run(cls, info):
@ -22,6 +35,31 @@ class AddDefaultSources(Task):
info.source_lists.add('main', 'deb-src {apt_mirror} {system.release}-updates main')
class AddRemoteManifestPackages(Task):
description = 'Adding remote packages from the manifest'
phase = phases.preparation
predecessors = [AddDefaultSources]
@classmethod
def run(cls, info):
for package in info.manifest.packages['remote']:
if isinstance(package, dict):
info.packages.add(package['name'], package.get('target', None))
else:
info.packages.add(package, None)
class AddLocalManifestPackages(Task):
description = 'Adding local packages from the manifest'
phase = phases.preparation
predecessors = [AddDefaultSources]
@classmethod
def run(cls, info):
for package_path in info.manifest.packages['local']:
info.packages.add_local(package_path)
class WriteSources(Task):
description = 'Writing aptitude sources to disk'
phase = phases.package_installation

View file

@ -52,7 +52,7 @@ def resolve_tasks(taskset, manifest):
import common.task_sets
taskset.update(common.task_sets.base_set)
taskset.update(common.task_sets.mounting_set)
taskset.update(common.task_sets.apt_set)
taskset.update(common.task_sets.get_apt_set(manifest))
taskset.update(common.task_sets.locale_set)
taskset.update(common.task_sets.ssh_set)

View file

@ -26,7 +26,7 @@ def resolve_tasks(tasklist, manifest):
tasklist.update(common.task_sets.base_set)
tasklist.update(common.task_sets.volume_set)
tasklist.update(common.task_sets.mounting_set)
tasklist.update(common.task_sets.apt_set)
tasklist.update(common.task_sets.get_apt_set(manifest))
tasklist.update(common.task_sets.locale_set)
tasklist.update(common.task_sets.bootloader_set.get(manifest.system['bootloader']))