Conan

 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 distribution
 view release on metacpan -  search on metacpan

( run in 0.739 second using v1.00-cache-2.02-grep-82fe00e-cpan-3b7f77b76a6c )