mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-22 09:50:37 +00:00
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:
parent
0723290c45
commit
ebd8f71fdb
7 changed files with 65 additions and 30 deletions
|
@ -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()
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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']))
|
||||
|
|
Loading…
Add table
Reference in a new issue