]>
git.proxmox.com Git - pve-network.git/blob - PVE/API2/Network/SDN/Subnets.pm
1 package PVE
::API2
::Network
::SDN
::Subnets
;
7 use PVE
::Tools
qw(extract_param);
8 use PVE
::Cluster
qw(cfs_read_file cfs_write_file);
10 use PVE
::Network
::SDN
::Subnets
;
11 use PVE
::Network
::SDN
::SubnetPlugin
;
13 use Storable
qw(dclone);
14 use PVE
::JSONSchema
qw(get_standard_option);
15 use PVE
::RPCEnvironment
;
19 use base
qw(PVE::RESTHandler);
21 my $api_sdn_subnets_config = sub {
24 my $scfg = dclone
(PVE
::Network
::SDN
::Subnets
::sdn_subnets_config
($cfg, $id));
25 $scfg->{subnet
} = $id;
26 $scfg->{cidr
} = $id =~ s/-/\//r
;
27 $scfg->{digest
} = $cfg->{digest
};
32 __PACKAGE__-
>register_method ({
36 description
=> "SDN subnets index.",
38 description
=> "Only list entries where you have 'SDN.Audit' or 'SDN.Allocate' permissions on '/sdn/subnets/<subnet>'",
42 additionalProperties
=> 0,
50 links
=> [ { rel
=> 'child', href
=> "{subnet}" } ],
55 my $rpcenv = PVE
::RPCEnvironment
::get
();
56 my $authuser = $rpcenv->get_user();
59 my $cfg = PVE
::Network
::SDN
::Subnets
::config
();
61 my @sids = PVE
::Network
::SDN
::Subnets
::sdn_subnets_ids
($cfg);
63 foreach my $id (@sids) {
64 my $privs = [ 'SDN.Audit', 'SDN.Allocate' ];
65 next if !$rpcenv->check_any($authuser, "/sdn/subnets/$id", $privs, 1);
67 my $scfg = &$api_sdn_subnets_config($cfg, $id);
74 __PACKAGE__-
>register_method ({
78 description
=> "Read sdn subnet configuration.",
80 check
=> ['perm', '/sdn/subnets/{subnet}', ['SDN.Allocate']],
84 additionalProperties
=> 0,
86 subnet
=> get_standard_option
('pve-sdn-subnet-id', {
87 completion
=> \
&PVE
::Network
::SDN
::Subnets
::complete_sdn_subnets
,
91 returns
=> { type
=> 'object' },
95 my $cfg = PVE
::Network
::SDN
::Subnets
::config
();
97 return &$api_sdn_subnets_config($cfg, $param->{subnet
});
100 __PACKAGE__-
>register_method ({
105 description
=> "Create a new sdn subnet object.",
107 check
=> ['perm', '/sdn/subnets', ['SDN.Allocate']],
109 parameters
=> PVE
::Network
::SDN
::SubnetPlugin-
>createSchema(),
110 returns
=> { type
=> 'null' },
114 my $type = extract_param
($param, 'type');
115 my $cidr = extract_param
($param, 'subnet');
116 my $id = $cidr =~ s/\//-/r
;
118 # create /etc/pve/sdn directory
119 PVE
::Cluster
::check_cfs_quorum
();
120 mkdir("/etc/pve/sdn") if ! -d
'/etc/pve/sdn';
122 PVE
::Network
::SDN
::lock_sdn_config
(
125 my $cfg = PVE
::Network
::SDN
::Subnets
::config
();
126 my $opts = PVE
::Network
::SDN
::SubnetPlugin-
>check_config($id, $param, 1, 1);
129 if ($scfg = PVE
::Network
::SDN
::Subnets
::sdn_subnets_config
($cfg, $id, 1)) {
130 die "sdn subnet object ID '$id' already defined\n";
133 $cfg->{ids
}->{$id} = $opts;
134 PVE
::Network
::SDN
::SubnetPlugin-
>on_update_hook($id, $cfg);
135 PVE
::Network
::SDN
::Subnets
::write_config
($cfg);
136 PVE
::Network
::SDN
::increase_version
();
138 }, "create sdn subnet object failed");
143 __PACKAGE__-
>register_method ({
148 description
=> "Update sdn subnet object configuration.",
150 check
=> ['perm', '/sdn/subnets', ['SDN.Allocate']],
152 parameters
=> PVE
::Network
::SDN
::SubnetPlugin-
>updateSchema(),
153 returns
=> { type
=> 'null' },
157 my $id = extract_param
($param, 'subnet');
158 my $digest = extract_param
($param, 'digest');
160 PVE
::Network
::SDN
::lock_sdn_config
(
163 my $cfg = PVE
::Network
::SDN
::Subnets
::config
();
165 PVE
::SectionConfig
::assert_if_modified
($cfg, $digest);
167 my $opts = PVE
::Network
::SDN
::SubnetPlugin-
>check_config($id, $param, 0, 1);
168 $cfg->{ids
}->{$id} = $opts;
170 PVE
::Network
::SDN
::SubnetPlugin-
>on_update_hook($id, $cfg);
171 PVE
::Network
::SDN
::Subnets
::write_config
($cfg);
172 PVE
::Network
::SDN
::increase_version
();
174 }, "update sdn subnet object failed");
179 __PACKAGE__-
>register_method ({
184 description
=> "Delete sdn subnet object configuration.",
186 check
=> ['perm', '/sdn/subnets', ['SDN.Allocate']],
189 additionalProperties
=> 0,
191 subnet
=> get_standard_option
('pve-sdn-subnet-id', {
192 completion
=> \
&PVE
::Network
::SDN
::Subnets
::complete_sdn_subnets
,
196 returns
=> { type
=> 'null' },
200 my $id = extract_param
($param, 'subnet');
202 PVE
::Network
::SDN
::lock_sdn_config
(
205 my $cfg = PVE
::Network
::SDN
::Subnets
::config
();
207 my $scfg = PVE
::Network
::SDN
::Subnets
::sdn_subnets_config
($cfg, $id);
209 my $subnet_cfg = PVE
::Network
::SDN
::Subnets
::config
();
211 delete $cfg->{ids
}->{$id};
212 PVE
::Network
::SDN
::Subnets
::write_config
($cfg);
213 PVE
::Network
::SDN
::increase_version
();
215 }, "delete sdn subnet object failed");