Factor release codename fetching out into common.tools

This allows code that runs before the bootstrapinformation object has been created
to also figure out the release codename
This commit is contained in:
Anders Ingemann 2014-07-06 20:23:48 +02:00
parent 376baae583
commit 34bb45bb00
10 changed files with 23 additions and 15 deletions

View file

@ -31,11 +31,8 @@ class BootstrapInformation(object):
# The default apt mirror # The default apt mirror
self.apt_mirror = self.manifest.packages.get('mirror', 'http://http.debian.net/debian') self.apt_mirror = self.manifest.packages.get('mirror', 'http://http.debian.net/debian')
# Normalize the release codenames so that tasks may query for release codenames rather than from bootstrapvz.common.tools import get_codename
# 'stable', 'unstable' etc. This is useful when handling cases that are specific to a release. self.release_codename = get_codename(self.manifest.system['release'])
release_codenames_path = os.path.join(os.path.dirname(__file__), 'release-codenames.yml')
from bootstrapvz.common.tools import config_get
self.release_codename = config_get(release_codenames_path, [self.manifest.system['release']])
# Create the manifest_vars dictionary # Create the manifest_vars dictionary
self.manifest_vars = self.__create_manifest_vars(self.manifest, {'apt_mirror': self.apt_mirror}) self.manifest_vars = self.__create_manifest_vars(self.manifest, {'apt_mirror': self.apt_mirror})

View file

@ -45,7 +45,7 @@ class RemoveHWClock(Task):
@classmethod @classmethod
def run(cls, info): def run(cls, info):
info.initd['disable'].append('hwclock.sh') info.initd['disable'].append('hwclock.sh')
if info.manifest.system['release'] == 'squeeze': if info.release_codename == 'squeeze':
info.initd['disable'].append('hwclockfirst.sh') info.initd['disable'].append('hwclockfirst.sh')

View file

@ -30,7 +30,7 @@ class AddSSHKeyGeneration(Task):
try: try:
log_check_call(['chroot', info.root, log_check_call(['chroot', info.root,
'dpkg-query', '-W', 'openssh-server']) 'dpkg-query', '-W', 'openssh-server'])
if info.manifest.system['release'] == 'squeeze': if info.release_codename == 'squeeze':
install['generate-ssh-hostkeys'] = os.path.join(init_scripts_dir, 'squeeze/generate-ssh-hostkeys') install['generate-ssh-hostkeys'] = os.path.join(init_scripts_dir, 'squeeze/generate-ssh-hostkeys')
else: else:
install['generate-ssh-hostkeys'] = os.path.join(init_scripts_dir, 'generate-ssh-hostkeys') install['generate-ssh-hostkeys'] = os.path.join(init_scripts_dir, 'generate-ssh-hostkeys')
@ -70,7 +70,7 @@ class ShredHostkeys(Task):
def run(cls, info): def run(cls, info):
ssh_hostkeys = ['ssh_host_dsa_key', ssh_hostkeys = ['ssh_host_dsa_key',
'ssh_host_rsa_key'] 'ssh_host_rsa_key']
if info.manifest.system['release'] != 'squeeze': if info.release_codename != 'squeeze':
ssh_hostkeys.append('ssh_host_ecdsa_key') ssh_hostkeys.append('ssh_host_ecdsa_key')
private = [os.path.join(info.root, 'etc/ssh', name) for name in ssh_hostkeys] private = [os.path.join(info.root, 'etc/ssh', name) for name in ssh_hostkeys]

View file

@ -1,3 +1,4 @@
import os
def log_check_call(command, stdin=None, env=None, shell=False, cwd=None): def log_check_call(command, stdin=None, env=None, shell=False, cwd=None):
@ -76,7 +77,6 @@ def load_yaml(path):
def load_data(path): def load_data(path):
import os.path
filename, extension = os.path.splitext(path) filename, extension = os.path.splitext(path)
if not os.path.isfile(path): if not os.path.isfile(path):
raise Exception('The path {path} does not point to a file.'.format(path=path)) raise Exception('The path {path} does not point to a file.'.format(path=path))
@ -95,9 +95,17 @@ def config_get(path, config_path):
return config return config
def get_codename(release):
"""Normalizes the release codenames
This allows tasks to query for release codenames rather than 'stable', 'unstable' etc.
"""
release_codenames_path = os.path.join(os.path.dirname(__file__), 'release-codenames.yml')
from bootstrapvz.common.tools import config_get
return config_get(release_codenames_path, [release])
def copy_tree(from_path, to_path): def copy_tree(from_path, to_path):
from shutil import copy from shutil import copy
import os
for abs_prefix, dirs, files in os.walk(from_path): for abs_prefix, dirs, files in os.walk(from_path):
prefix = os.path.normpath(os.path.relpath(abs_prefix, from_path)) prefix = os.path.normpath(os.path.relpath(abs_prefix, from_path))
for path in dirs: for path in dirs:

View file

@ -12,7 +12,8 @@ def resolve_tasks(taskset, manifest):
from bootstrapvz.common.tasks import initd from bootstrapvz.common.tasks import initd
from bootstrapvz.common.tasks import ssh from bootstrapvz.common.tasks import ssh
if manifest.system['release'] in ['wheezy', 'stable']: from bootstrapvz.common.tools import get_codename
if get_codename(manifest.system['release']) == 'wheezy':
taskset.add(tasks.AddBackports) taskset.add(tasks.AddBackports)
taskset.update([tasks.SetMetadataSource, taskset.update([tasks.SetMetadataSource,

View file

@ -29,7 +29,7 @@ class AddCloudInitPackages(Task):
@classmethod @classmethod
def run(cls, info): def run(cls, info):
target = None target = None
if info.manifest.system['release'] in ['wheezy', 'stable']: if info.release_codename == 'wheezy':
target = '{system.release}-backports' target = '{system.release}-backports'
info.packages.add('cloud-init', target) info.packages.add('cloud-init', target)
info.packages.add('sudo') info.packages.add('sudo')

View file

@ -5,7 +5,8 @@ import os.path
def validate_manifest(data, validator, error): def validate_manifest(data, validator, error):
schema_path = os.path.normpath(os.path.join(os.path.dirname(__file__), 'manifest-schema.yml')) schema_path = os.path.normpath(os.path.join(os.path.dirname(__file__), 'manifest-schema.yml'))
validator(data, schema_path) validator(data, schema_path)
if data.get('system', {}).get('release', None) in ['wheezy', 'stable']: from bootstrapvz.common.tools import get_codename
if get_codename(data['system']['release']) == 'wheezy':
# prefs is a generator of apt preferences across files in the manifest # prefs is a generator of apt preferences across files in the manifest
prefs = (item for vals in data.get('packages', {}).get('preferences', {}).values() for item in vals) prefs = (item for vals in data.get('packages', {}).get('preferences', {}).values() for item in vals)
if not any('linux-image' in item['package'] and 'wheezy-backports' in item['pin'] for item in prefs): if not any('linux-image' in item['package'] and 'wheezy-backports' in item['pin'] for item in prefs):

View file

@ -2,6 +2,7 @@ import tasks
def resolve_tasks(taskset, manifest): def resolve_tasks(taskset, manifest):
if manifest.system['release'] in ['wheezy', 'stable']: from bootstrapvz.common.tools import get_codename
if get_codename(manifest.system['release']) == 'wheezy':
taskset.add(tasks.AddBackports) taskset.add(tasks.AddBackports)
taskset.update([tasks.AddONEContextPackage]) taskset.update([tasks.AddONEContextPackage])

View file

@ -26,6 +26,6 @@ class AddONEContextPackage(Task):
@classmethod @classmethod
def run(cls, info): def run(cls, info):
target = None target = None
if info.manifest.system['release'] in ['wheezy', 'stable']: if info.release_codename == 'wheezy':
target = '{system.release}-backports' target = '{system.release}-backports'
info.packages.add('opennebula-context', target) info.packages.add('opennebula-context', target)