Conan
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Conan/Configure/Xen.pm view on Meta::CPAN
package Conan::Configure::Xen;
use strict;
use Carp;
sub new {
my $class = shift;
my $args = {
basedir => '/xen/prod/etc/',
@_,
};
# By default the IP isn't outputted, but rather
# generated in the 'extra' field
unless( $args->{generators}->{ip} ){
$args->{generators}->{ip} = sub {
my $self = shift;
return sprintf "#ip = '%s'\n", $self->{settings}->{ip};
};
}
unless( $args->{generators}->{netmask} ){
$args->{generators}->{netmask} = sub {
my $self = shift;
return sprintf "#netmask = '%s'\n", $self->{settings}->{netmask};
};
}
unless( $args->{generators}->{gateway} ){
$args->{generators}->{gateway} = sub {
my $self = shift;
return sprintf "#gateway = '%s'\n", $self->{settings}->{gateway};
};
}
unless( $args->{generators}->{extra} ){
$args->{generators}->{extra} = sub {
my $self = shift;
return sprintf "extra = ' ip=%s::%s:%s::eth0:off NFS=%s= %s %s ro clocksource=jiffies'\n",
$self->{settings}->{ip},
$self->{settings}->{gateway},
$self->{settings}->{netmask},
$self->{settings}->{nfsroot},
$self->{settings}->{postboot},
$self->{settings}->{name} || $self->{name};
};
}
bless $args => $class;
}
sub generate {
my $self = shift;
my $output = sprintf "# This was generated on %s by %s\n", scalar localtime( time() ), 'Conan::Configure::Xen';
$output .= "# Please do not manually edit\n";
for my $key (qw/
name
kernel
memory
vcpus
vif
ip
netmask
gateway
on_poweroff
on_reboot
on_crash
extra/){
if( exists $self->{generators}->{$key} ){
my $sub = $self->{generators}->{$key};
$output .= $sub->($self);
} elsif( defined $self->{settings}->{$key} ){
if( $key eq 'vif' ){
# This is the weird one
$output .= $key . " = [ " . "'$self->{settings}->{$key}'" . " ]\n";
} else {
$output .= $key . " = " . "'$self->{settings}->{$key}'" . "\n";
}
}
}
return $output;
}
sub parse {
my $self = shift;
my %hostsettings;
my @files = glob "$self->{basedir}/*.cfg.tmpl $self->{basedir}/*.cfg";
s/\/{2,}/\//g for @files;
croak "Name not defined" unless defined $self->{name};
# Get the hostconfig files
my @hostconfig = grep { /$self->{name}/ } @files;
my $basename = $self->{name};
$basename =~ s/\d+//g;
my @baseconfig = grep { /$basename\.cfg/ } @files;
for( @baseconfig ){
my %hash2 = $self->parse_template( $_ );
@hostsettings{keys %hash2} = values %hash2;
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.027 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )