]> git.proxmox.com Git - pve-network.git/blob - PVE/Network/SDN/Vnets.pm
725605bbc0cf985c9eed24d60dc69e3bcba37062
[pve-network.git] / PVE / Network / SDN / Vnets.pm
1 package PVE::Network::SDN::Vnets;
2
3 use strict;
4 use warnings;
5
6 use PVE::Cluster qw(cfs_read_file cfs_write_file cfs_lock_file);
7
8
9 use PVE::Network::SDN::VnetPlugin;
10 PVE::Network::SDN::VnetPlugin->register();
11 PVE::Network::SDN::VnetPlugin->init();
12
13 sub sdn_vnets_config {
14 my ($cfg, $id, $noerr) = @_;
15
16 die "no sdn vnet ID specified\n" if !$id;
17
18 my $scfg = $cfg->{ids}->{$id};
19 die "sdn vnet '$id' does not exist\n" if (!$noerr && !$scfg);
20
21 return $scfg;
22 }
23
24 sub config {
25 my $config = cfs_read_file("sdn/vnets.cfg.new");
26 $config = cfs_read_file("sdn/vnets.cfg") if !keys %{$config->{ids}};
27 return $config;
28 }
29
30 sub write_config {
31 my ($cfg) = @_;
32
33 cfs_write_file("sdn/vnets.cfg.new", $cfg);
34 }
35
36 sub lock_sdn_vnets_config {
37 my ($code, $errmsg) = @_;
38
39 cfs_lock_file("sdn/vnets.cfg.new", undef, $code);
40 if (my $err = $@) {
41 $errmsg ? die "$errmsg: $err" : die $err;
42 }
43 }
44
45 sub sdn_vnets_ids {
46 my ($cfg) = @_;
47
48 return keys %{$cfg->{ids}};
49 }
50
51 sub complete_sdn_vnet {
52 my ($cmdname, $pname, $cvalue) = @_;
53
54 my $cfg = PVE::Network::SDN::Vnets::config();
55
56 return $cmdname eq 'add' ? [] : [ PVE::Network::SDN::Vnets::sdn_vnet_ids($cfg) ];
57 }
58
59 sub get_vnet {
60 my ($vnetid) = @_;
61
62 my $cfg = PVE::Network::SDN::Vnets::config();
63 my $vnet = PVE::Network::SDN::Vnets::sdn_vnets_config($cfg, $vnetid, 1);
64 return $vnet;
65 }
66
67 1;