fabdeploy / fabdeploy /

Full commit
import re
import ast

from fabric.api import env, run, sudo, settings, hide
from fabric.utils import puts, abort
from fabric.contrib.files import append

from .containers import conf
from .task import Task

__all__ = [

class ExePython(Task):
    def escaped_code(self):
        return self.conf.code.replace('"', r'\\"')

    def exe(self):
        with settings(hide('everything')):
            output = run('python -c "%(escaped_code)s"' % self.conf)
        return ast.literal_eval(output)

    def do(self):
        r = self.execute()

exe_python = ExePython()

class CpuCount(ExePython):
    def code(self):
        return 'import multiprocessing; print(multiprocessing.cpu_count())'

    def cpu_count(self):
        return self.exe()

    def do(self):
        cpu_count = self.cpu_count()
        puts('Number of CPUs: %s' % cpu_count)

cpu_count = CpuCount()

class OSCodename(ExePython):
    def code(self):
        return 'import platform; print(platform.dist())'

    def os_codename(self):
        distname, version, id = self.exe()

        patterns = [
            ('squeeze', ('debian', '^6', '')),
            ('lenny', ('debian', '^5', '')),
            ('natty', ('Ubuntu', '^11.04', '')),
            ('maverick', ('Ubuntu', '^10.10', '')),
            ('lucid', ('Ubuntu', '^10.04', '')),
        for name, p in patterns:
            if (re.match(p[0], distname) and
                    re.match(p[1], version) and
                    re.match(p[2], id)):
                return name

    def do(self):
        os_codename = self.os_codename()
        if os_codename is None:
            abort('Your OS is unsupported')
        puts('OS codename: %s' % os_codename)

os_codename = OSCodename()

class AptitudeUpdate(Task):
    def force(self):
        return False

    def do(self):
        if self.conf.force or not hasattr(env, '_aptitude_updated'):
            sudo('aptitude update')
            env._aptitude_updated = True

aptitude_update = AptitudeUpdate()

class AptitudeInstall(Task):
    def options(self):
        return ''

    def do(self):
        sudo('aptitude install %(options)s -y %(packages)s' % self.conf)

aptitude_install = AptitudeInstall()

    'lenny': (' '
              'lenny-backports main contrib non-free'),
    'squeeze': (' '
                'squeeze-backports main contrib non-free'),
    'natty': (' '
              'natty-backports main universe multiverse restricted'),
    'maverick': (' '
                 'maverick-backports main universe multiverse restricted'),
    'lucid': (' '
              'lucid-backports main universe multiverse restricted'),

class SetupBackports(Task):
    def backports(self):
        if self.conf.os in BACKPORTS:
            return BACKPORTS[self.conf.os]

    def do(self):
        if not self.backports:
            puts('Backports are not available for %(os)s' % self.conf)

            'deb %(backports)s' % self.conf,

setup_backports = SetupBackports()