]> git.proxmox.com Git - pve-network.git/blob - PVE/Network/Vnet.pm
add vnet api
[pve-network.git] / PVE / Network / Vnet.pm
1 package PVE::Network::Vnet;
2
3 use strict;
4 use warnings;
5 use Data::Dumper;
6 use PVE::Cluster qw(cfs_read_file cfs_write_file cfs_lock_file);
7
8
9 sub vnet_config {
10 my ($cfg, $vnetid, $noerr) = @_;
11
12 die "no vnet ID specified\n" if !$vnetid;
13
14 my $scfg = $cfg->{ids}->{$vnetid};
15 die "vnet '$vnetid' does not exists\n" if (!$noerr && !$scfg);
16
17 return $scfg;
18 }
19
20 sub config {
21
22 return cfs_read_file("network/vnet.cfg");
23 }
24
25 sub write_config {
26 my ($cfg) = @_;
27 cfs_write_file("network/vnet.cfg", $cfg);
28 }
29
30 sub lock_vnet_config {
31 my ($code, $errmsg) = @_;
32
33 cfs_lock_file("network/vnet.cfg", undef, $code);
34 my $err = $@;
35 if ($err) {
36 $errmsg ? die "$errmsg: $err" : die $err;
37 }
38 }
39
40 sub vnets_ids {
41 my ($cfg) = @_;
42
43 return keys %{$cfg->{ids}};
44 }
45
46 sub complete_vnet {
47 my ($cmdname, $pname, $cvalue) = @_;
48
49 my $cfg = PVE::Network::Vnet::config();
50
51 return $cmdname eq 'add' ? [] : [ PVE::Network::Vnet::vnets_ids($cfg) ];
52 }
53
54
55 my $format_config_line = sub {
56 my ($schema, $key, $value) = @_;
57
58 my $ct = $schema->{type};
59
60 die "property '$key' contains a line feed\n"
61 if ($key =~ m/[\n\r]/) || ($value =~ m/[\n\r]/);
62
63 if ($ct eq 'boolean') {
64 return "\t$key " . ($value ? 1 : 0) . "\n"
65 if defined($value);
66 } else {
67 return "\t$key $value\n" if "$value" ne '';
68 }
69 };
70
71 1;