From cf65a70feb6aca041d11fd0bc18923b330a9c858 Mon Sep 17 00:00:00 2001 From: Nigel McNie Date: Mon, 2 Apr 2007 23:13:16 +1200 Subject: [PATCH] Allow context numbers for vservers to be customised This patch adds a subroutine that returns a unique context number for a new vserver to use, so now more than one vserver can be created with this script. --- vserverctl | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/vserverctl b/vserverctl index 8d0a4f5..035e41c 100755 --- a/vserverctl +++ b/vserverctl @@ -81,6 +81,7 @@ if ( $action eq 'add' ) { '-d' => $config->{release}, '-m' => $config->{mirror}, ); + write_file('/etc/vservers/' . $vsname . '/context', getFreeContext() . "\n"); system('vserver', $vsname, 'start'); write_file('/etc/vservers/' . $vsname . '/profile', $profile . "\n"); write_file($vsroot . 'etc/apt/sources.list', $config->{files}{aptsources}); @@ -234,5 +235,19 @@ sub getFreeIPAddress { # {{{ return undef; } # }}} +sub getFreeContext { # {{{ + my $existingContext = { 1 => 1 }; + foreach my $contextFile ( glob '/etc/vservers/*/context' ) { + my $context = slurp($contextFile); + next unless $context =~ m{ \A \s* (\d+) \s* \z }xms; + $existingContext->{$1} = 1; + } + + # Note: probably should allow more than 255 vservers here + for ( my $i = 101; $i < 255 ; $i++ ) { + return "$i" unless $existingContext->{$i}; + } + return undef; +} # }}} -- 2.39.5