summaryrefslogblamecommitdiffstats
path: root/os-plugins/plugins/xen/OpenSLX/OSPlugin/xen.pm
blob: 123319838d6dde192229cc72a71dbfe0b32aed55 (plain) (tree)
1
2

                                      




























                                                                               
                      





























                                                                       

























                                                                            



          





























                                                                             





                                    




                                                                 


                             















































                                                                             
  
# Copyright (c) 2010 - RZ Uni Freiburg
# Copyright (c) 2010 - OpenSLX GmbH
#
# This program is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
#
# If you have any feedback please consult http://openslx.org/feedback and
# send your suggestions, praise, or complaints to feedback@openslx.org
#
# General information about OpenSLX can be found at http://openslx.org/
# -----------------------------------------------------------------------------
# xen.pm
#    - implementation of the 'xen' plugin
# -----------------------------------------------------------------------------
package OpenSLX::OSPlugin::xen;

use strict;
use warnings;

use base qw(OpenSLX::OSPlugin::Base);

use File::Path;

use OpenSLX::Basics;
use OpenSLX::Utils;

sub new
{
    my $class = shift;

    my $self = {
        name => 'xen',
    };

    return bless $self, $class;
}

sub getInfo
{
    my $self = shift;

    return {
        description => unshiftHereDoc(<<'        End-of-Here'),
            Configures Xen diskless boot, no installation yet.
        End-of-Here
        precedence => 10,
    };
}

sub getAttrInfo
{
    my $self = shift;

    return {
        'xen::active' => {
            applies_to_systems => 1,
            applies_to_clients => 1,
            description => unshiftHereDoc(<<'            End-of-Here'),
                should the 'xen'-plugin be executed during boot?
            End-of-Here
            content_regex => qr{^(0|1)$},
            content_descr => '1 means active - 0 means inactive',
            # set active to 0, later set specially created Xen system to 1
            default => '0',
        },
        # attribute 'imagesrc' defines where we can find xen images
        'xen::imagesrc' => {
            applies_to_systems => 1,
            applies_to_clients => 1,
            description => unshiftHereDoc(<<'            End-of-Here'),
                Where do we store our xen images? NFS? Filesystem?
            End-of-Here
            content_regex => qr{^(/|nfs://)},
            content_descr => 'local path or URI or "-" (unset)',
            default => undef,
        },
         # attribute 'tftpdir' defines TFTP dir for network boots /w NAT
        'xen::tftpdir' => {
            applies_to_systems => 1,
            applies_to_clients => 1,
            description => unshiftHereDoc(<<'            End-of-Here'),
                Do you want to define a stage 4 TFTP dir for netwoork boots?
                Needed to boot Xen via NFS, we only need the initramfs
                Hint: Mount your TFTP ro via NFS to a local dir
            End-of-Here
            content_regex => qr{^(/)},
            content_descr => 'local path or "-" (unset)',
            default => undef,
        },
    };
}

sub installationPhase
{
    my $self = shift;
    my $info = shift;

    $self->{pluginRepositoryPath} = $info->{'plugin-repo-path'};
    $self->{openslxBasePath}      = $info->{'openslx-base-path'};

    # Copy run-virt.include and template files to the appropriate place for
    # inclusion in stage4
    my $pluginName = $self->{'name'};
    my $pluginBasePath = 
      "$self->{openslxBasePath}/lib/plugins/$pluginName/files";

    foreach my $file ( qw( run-virt.include machine.include hvm.include ) ) {
        copyFile("$pluginBasePath/$file", "$self->{pluginRepositoryPath}/");
        chmod 0644, "$self->{pluginRepositoryPath}/$file";
    }

    return;
}

sub removalPhase
{
    my $self = shift;
    my $info = shift;

    return;
}

sub suggestAdditionalKernelModules
{
    my $self                = shift;
    my $makeInitRamFSEngine = shift;

    my @suggestedModules;

    # Xen needs bridge module, for guests xennet and maybe xenblk
    # earlier versions needed netloop
    push @suggestedModules, qw( bridge xennet xenblk );

    return @suggestedModules;
}

#sub _xenLabel
#{
#    # set label for each Xen system
#    foreach my $info (@$systemInfos) {
#        if ($info->{xen::active} eq 1) {
#            my $label = $info->{label} || '';
#            if (!length($label) || $label eq $info->{name}) {
#                if ($info->{name} =~ m{^(.+)::(.+)$}) {
#                    my $system = $1;
#                    my $exportType = $2;
#                    $label = $system . "-xen" . ' ' x (36-length($system))
#                      . $exportType;
#                } else {
#                    $label = $info->{name};
#                }
#            }
#        }
#        $info->{pxeLabel} = $label;
#    }
#    return $info; #??? 
#}

#sub _xenBootEntry
#{
#    # Xen entries look different
#    # Example:
#    # KERNEL mboot.c32 vendor-os/xen.gz dom0_mem=128000 ---
#    # vendor-os/vmlinuz-xen debug=3 --- vendor-os/initramfs-1
#    # TODO: versionsort oder per attr?
#    if ($info->{xen::active} eq 1) {
#        my $xenKernel = slxsystem(ls /boot/xen* | sort | tail -n 1);
#        $append .= " file=$bootURI"     if length($bootURI);
#        $append .= " file=$tftpPrefix"  if length($tftpPrefix);
#        $append .= " $clientAppend";
#        $append .= " --- $pxePrefix$vendorOSName/$info->{'initramfs-name'}";
#        $slxLabels .= "LABEL openslx-$info->{'external-id'}-xen\n";
#        # $slxLabels .= $pxeDefault;
#        $slxLabels .= "\tMENU LABEL ^$info->{pxeLabel}\n";
#        $slxLabels .= "\tKERNEL mboot.c32\n";
#        $slxLabels .= "\tAPPEND $pxePrefix$vendorOSName/$xenKernel";
#        # $slxLabels .= " dom0_mem=128000";
#        $slxLabels .= " --- $pxePrefix$vendorOSName/$kernelName";
#        $slxLabels .= " --- $append\n";
#        $slxLabels .= "\tIPAPPEND 3\n";
#    }
#    return $slxLabels;
#}

1;