]> git.proxmox.com Git - pve-manager.git/blame - bin/pvectl
add mount/unmount command for openvz
[pve-manager.git] / bin / pvectl
CommitLineData
aff192e6
DM
1#!/usr/bin/perl -w
2
3use strict;
aff192e6 4
339e4159
DM
5use PVE::Tools qw(extract_param);
6use PVE::Cluster qw(cfs_register_file cfs_read_file);
7use PVE::SafeSyslog;
8use PVE::INotify;
9use PVE::RPCEnvironment;
10use PVE::CLIHandler;
11use PVE::API2::OpenVZ;
aff192e6 12
339e4159 13use Data::Dumper; # fixme: remove
aff192e6 14
339e4159 15use base qw(PVE::CLIHandler);
aff192e6 16
339e4159 17$ENV{'PATH'} = '/sbin:/bin:/usr/sbin:/usr/bin';
aff192e6 18
339e4159 19initlog('pvectl');
aff192e6 20
339e4159 21die "please run as root\n" if $> != 0;
aff192e6 22
339e4159
DM
23PVE::INotify::inotify_init();
24my $nodename = PVE::INotify::nodename();
aff192e6 25
339e4159 26my $rpcenv = PVE::RPCEnvironment->init('cli');
aff192e6 27
339e4159
DM
28$rpcenv->init_request();
29$rpcenv->set_language($ENV{LANG});
30$rpcenv->set_user('root@pam');
aff192e6 31
07151796
DM
32my $upid_exit = sub {
33 my $upid = shift;
34 my $status = PVE::Tools::upid_read_status($upid);
35 exit($status eq 'OK' ? 0 : -1);
36};
37
339e4159 38my $cmddef = {
aff192e6 39
339e4159
DM
40 list => [ "PVE::API2::OpenVZ", 'vmlist', [],
41 { node => $nodename }, sub {
42 my $vmlist = shift;
aff192e6 43
339e4159 44 exit 0 if (!scalar(@$vmlist));
aff192e6 45
c3163e37 46 printf "%10s %-20s %-10s %-10s %-12s %-10s\n",
339e4159 47 qw(VMID NAME STATUS MEM(MB) DISK(GB));
aff192e6 48
339e4159
DM
49 foreach my $rec (sort { $a->{vmid} <=> $b->{vmid} } @$vmlist) {
50 printf "%10s %-20s %-10s %-10s %-12.2f\n", $rec->{vmid}, $rec->{name} || '',
51 $rec->{status},
52 ($rec->{maxmem} || 0)/(1024*1024),
53 ($rec->{maxdisk} || 0)/(1024*1024*1024);
54 }
55 } ],
aff192e6 56
0618d446
DM
57 create => [ 'PVE::API2::OpenVZ', 'create_vm', ['vmid', 'ostemplate'], { node => $nodename }, $upid_exit ],
58 destroy => [ 'PVE::API2::OpenVZ', 'destroy_vm', ['vmid'], { node => $nodename }, $upid_exit ],
aff192e6 59
9020f201
DM
60 set => [ "PVE::API2::OpenVZ", 'update_vm', ['vmid'], { node => $nodename } ],
61
c3163e37
DM
62 config => [ "PVE::API2::OpenVZ", 'vm_config', ['vmid'],
63 { node => $nodename }, sub {
64 my $config = shift;
65 foreach my $k (sort (keys %$config)) {
66 next if $k eq 'digest';
67 my $v = $config->{$k};
68 if ($k eq 'description') {
69 $v = PVE::Tools::encode_text($v);
70 }
71 print "$k: $v\n";
72 }
73 }],
9020f201 74
07151796 75 start => [ 'PVE::API2::OpenVZ', 'vm_start', ['vmid'], { node => $nodename }, $upid_exit],
51ed1415 76 shutdown => [ 'PVE::API2::OpenVZ', 'vm_shutdown', ['vmid'], { node => $nodename }, $upid_exit],
07151796 77 stop => [ 'PVE::API2::OpenVZ', 'vm_stop', ['vmid'], { node => $nodename }, $upid_exit],
8710f280
DM
78 mount => [ 'PVE::API2::OpenVZ', 'vm_mount', ['vmid'], { node => $nodename }, $upid_exit],
79 umount => [ 'PVE::API2::OpenVZ', 'vm_umount', ['vmid'], { node => $nodename }, $upid_exit],
8b711be0 80 migrate => [ "PVE::API2::OpenVZ", 'migrate_vm', ['vmid', 'target'], { node => $nodename }, $upid_exit],
07151796 81
339e4159 82};
aff192e6 83
339e4159 84my $cmd = shift;
aff192e6 85
339e4159 86PVE::CLIHandler::handle_cmd($cmddef, "pvectl", $cmd, \@ARGV, undef, $0);
aff192e6 87
339e4159 88exit 0;
aff192e6 89
339e4159 90__END__
aff192e6 91
339e4159 92=head1 NAME
aff192e6 93
339e4159 94pvectl - vzctl wrapper to manage OpenVZ containers
aff192e6 95
339e4159 96=head1 SYNOPSIS
aff192e6 97
339e4159 98=include synopsis
aff192e6 99
339e4159 100=head1 DESCRIPTION
aff192e6 101
339e4159 102This is a small wrapper around vztl.
aff192e6 103
339e4159 104=include pve_copyright