/[vz-tools]/trunk/lib/VZ.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/lib/VZ.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 38 by dpavlin, Fri Feb 8 21:45:37 2008 UTC revision 42 by dpavlin, Fri Feb 8 23:53:40 2008 UTC
# Line 2  package VZ; Line 2  package VZ;
2  use Exporter 'import';  use Exporter 'import';
3  our @EXPORT = qw(  our @EXPORT = qw(
4  check_root  check_root
5    
6    ip2hostname
7  hostname2ip  hostname2ip
8    
9    conf_veids
10    
11    vzctl
12    vzlist
13    
14    $vz_root
15    $vz_conf
16    
17    dump
18  );  );
19    
20  use warnings;  use warnings;
21  use strict;  use strict;
22    
23  use Socket;  use Socket;
24    use Data::Dump qw/dump/;
25    
26    our $vz_root = '/vz';
27    our $vz_conf = '/etc/vz/conf';
28    
29    =head1 NAME
30    
31    VZ - helper functions for VZ tools
32    
33    =cut
34    
35    =head1 FUNCTIONS
36    
37    =head2 check_root
38    
39    Restart as C<root> user if needed using C<sudo>
40    
41    =cut
42    
43  sub check_root {  sub check_root {
44          if ( $> != 0 ) {          if ( $> != 0 ) {
# Line 17  sub check_root { Line 47  sub check_root {
47          }          }
48  }  }
49    
50    =head2 hostname2ip
51    
52      my $ip = hostname2ip('www.example.com');
53    
54    =cut
55    
56  sub hostname2ip {  sub hostname2ip {
57          my $hostname = shift || return;          my $hostname = shift || return;
58    
59          my @addresses = gethostbyname($hostname)   or die "Can't resolve $hostname: $!\n";          my @addresses = gethostbyname($hostname)
60                    or die "Can't resolve $hostname: $!\n";
61          @addresses = map { inet_ntoa($_) } @addresses[4 .. $#addresses];          @addresses = map { inet_ntoa($_) } @addresses[4 .. $#addresses];
62          return shift @addresses;          return shift @addresses;
63  }  }
64    
65    =head2 ip2hostname
66    
67      my $hostname = ip2hostname('192.168.0.1');
68    
69    =cut
70    
71    sub ip2hostname {
72            my $ip = shift || return;
73    
74            my $hostname = gethostbyaddr(inet_aton($ip), AF_INET)
75                    or die "Can't look up $ip: $!\n";
76            return $hostname;
77    }
78    
79    =head2 conf_veids
80    
81      my @VEIDs = conf_veids;
82    
83    =cut
84    
85    sub conf_veids {
86            my @c;
87            open( my $cfgs, 'find /etc/vz/conf -maxdepth 1 -name "*.conf" |' ) || die "can't run find: $!";
88            while(<$cfgs>) {
89                    chomp;
90                    if ( m#^.+/(\d+)\.conf$# ) {
91                            if ( -d "$vz_root/private/$1" ) {
92                                    push @c, $1;
93                            } else {
94                                    warn "WARNING: have config for $1 but no private directory\n";
95                            }
96                    } else {
97                            warn "SKIPPED: $_\n";
98                    }
99            }
100            return @c;
101    }
102    
103    =head2 vzctl
104    
105      vzctl('set','--something',42);
106    
107    =cut
108    
109    sub vzctl {
110            my @args = @_;
111            warn "## vzctl ", join(" ",@args), "\n";
112            system('vzctl',@args) == 0 or die "vzctl @args failed: $?"
113    }
114    
115    =head2 vzlist
116    
117      my $output = vzlist();
118      my $hash = vzlist( hash => 1 );
119    
120    =cut
121    
122    my @vzlist_fields;
123    
124    sub vzlist {
125            die "need hash as argument" unless $#_ % 2 == 1;
126            my $args = {@_};
127    
128    
129            my $output;
130    
131            if ( ! @vzlist_fields ) {
132                    open(my $vzlist, 'vzlist -L |') || die "can't start vzlist -L: $!";
133                    while(<$vzlist>) {
134                            push @vzlist_fields, (split(/\s+/, $_, 2 ))[0];
135                    }
136            }
137    
138            open(my $vzlist, 'vzlist -a -H -o ' . join(',', @vzlist_fields) . ' |') || die "can't start vzlist: $!";
139            while(<$vzlist>) {
140                    s/^\s+//;
141                    my @data = split(/\s+/, $_);
142                    
143                    if ( defined $args->{hash} ) {
144                            my $hash;
145                            $hash->{ $vzlist_fields[$_] } = $data[$_] foreach 1 .. $#data;
146                            $output->{ $data[0] } = $hash;
147                    } else {
148                            $output .= $_;
149                    }
150            }
151    
152            return $output;
153    }
154    
155  1;  1;

Legend:
Removed from v.38  
changed lines
  Added in v.42

  ViewVC Help
Powered by ViewVC 1.1.26