#!/usr/bin/perl -T package VServer; our $VERSION = '1.3'; use strict; use warnings; sub get_context_id_by_name($) { my $vserver = shift; if ($vserver =~ /^([-a-z0-9._]*)$/) { $vserver = $1; }; my $dir = "/etc/vservers/$vserver"; return unless -d $dir; open(my $context, '<', "$dir/context") || return undef; my $cid = undef; while (<$context>) { if ($_ =~ m/([0-9]*)/) { $cid = $1; last; } } close $context; return $cid; } sub get_proc_dir($) { my $context = shift; my $dir = "/proc/virtual/$context/"; return $dir if (-d $dir); return undef; } sub get_config_dir($) { my $context = shift; my $dir = qx(/usr/sbin/vuname --xid $context --get context 2> /dev/null); return undef unless ($? eq 0); chomp($dir); return $dir; } sub get_name($) { my $context = shift; my $dir = get_config_dir($context) || return undef; my $name = undef; open(my $file, "<", "$dir/name") || return undef; while (<$file>) { chomp($name = $_); last; } close($file); return $name; } 1; __END__ =pod =head1 NAME VServer - little perl helpers for handling linux-vserver =head1 SYNOPSIS use VServer; my $id = VServer::get_context_id("name"); =head1 DESCRIPTION This module contains some functions for interfacing linux-vserver with perl. It does not use the libvserver library, but reading files in I and I and executing lightwight external tools like I. =head2 Methods =over 4 =item B Returns the context id for a vserver given by its name. If an invalid name is supplied or any other error occurs, B is returned. =item B Build the directory in C for the given context id. The directory is build with the following template: I. If the resulting directory does not exist (e.g. because the vserver is not running), B is returned. =item B Returns the config directory for the given context id. This is done by calling C. If any error occurs, B is returned. =item B Returns the name of the vserver specified by the given context id. This uses B and reading the name file inside the config directory. If any error occurs, B is returned. =back =head1 AUTHORS Alexander Sulfrian =cut