]> git.mjollnir.org Git - vserverctl.git/commitdiff
Allow context numbers for vservers to be customised
authorNigel McNie <nigel@catalyst.net.nz>
Mon, 2 Apr 2007 11:13:16 +0000 (23:13 +1200)
committerNigel McNie <nigel@freud.wgtn.cat-it.co.nz>
Mon, 2 Apr 2007 11:13:16 +0000 (23:13 +1200)
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

index 8d0a4f5e1541d72dbbeb6a16f939fba4e9ae7436..035e41c004640a0a03d23af72a7df5a5b8c200bc 100755 (executable)
@@ -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;
+} # }}}