[pve-devel] pve api function for blkio limit

Игорь shinespb at gmail.com
Mon Sep 16 18:55:34 CEST 2013


diff --git a/PVE/API2/OpenVZ.pm b/PVE/API2/OpenVZ.pm
index 11b4a9d..b34134d 100644
--- a/PVE/API2/OpenVZ.pm
+++ b/PVE/API2/OpenVZ.pm
@@ -501,6 +501,92 @@ __PACKAGE__->register_method({
     }});

 __PACKAGE__->register_method({
+    name => 'set_io_limit',
+    path => '{vmid}/io_limit',
+    method => 'PUT',
+    protected => 1,
+    proxyto => 'node',
+    description => "Set virtual machine io limit",
+    permissions => {
+        check => ['perm', '/vms/{vmid}', $vm_config_perm_list, any => 1],
+    },
+    parameters => {
+        additionalProperties => 0,
+        properties => PVE::OpenVZ::json_config_properties(
+            {
+                node => get_standard_option('pve-node'),
+                vmid => get_standard_option('pve-vmid'),
+                iops_read_limit => {
+                        type => 'integer',
+                        description => 'iops read limit for container',
+                        optional => 1,
+                        minimum => 0,
+                },
+                iops_write_limit => {
+                        type => 'integer',
+                        description => 'iops write limit for container',
+                        minimum => 0,
+                        optional => 1,
+                },
+            }),
+    },
+    returns => { type => 'null'},
+    code => sub {
+        my ($param) = @_;
+
+        my $rpcenv = PVE::RPCEnvironment::get();
+
+        my $authuser = $rpcenv->get_user();
+
+        my $node = extract_param($param, 'node');
+
+        my $vmid = extract_param($param, 'vmid');
+
+        die "no options specified\n" if !(keys %$param);
+
+        my $iops_read_limit = extract_param($param, 'iops_read_limit');
+
+        my $iops_write_limit = extract_param($param, 'iops_write_limit');
+
+        my $veconf = PVE::OpenVZ::load_config($vmid);
+
+        my $path = PVE::OpenVZ::get_privatedir($veconf, $vmid);
+
+        my $realcmd = sub {
+                my $dnum = sub {
+
+                   my $deviceid = shift;
+
+                   if (defined $iops_write_limit) {
+
+
PVE::OpenVZ::container_blkio_limit_set("write", $vmid, $deviceid,
$iops_write_limit);
+
+                   }
+                   if (defined $iops_read_limit) {
+
+
PVE::OpenVZ::container_blkio_limit_set("read", $vmid, $deviceid,
$iops_read_limit);
+
+                   }
+
+                };
+
+                my $cmd = ['mountpoint', '-d', $path];
+
+                eval { PVE::Tools::run_command($cmd, outfunc => $dnum); };
+
+                my $err = $@;
+
+                syslog('err', $err) if $err;
+
+                return;
+        };
+
+        return $rpcenv->fork_worker('set_blklimit', $vmid, $authuser,
$realcmd);
+
+    }});
+
+
+__PACKAGE__->register_method({
     name => 'vmdiridx',
     path => '{vmid}',
     method => 'GET',



More information about the pve-devel mailing list