]> git.proxmox.com Git - pmg-api.git/blame - PMG/CLI/pmgdb.pm
reload_ruledb: untaint pid
[pmg-api.git] / PMG / CLI / pmgdb.pm
CommitLineData
82782d70 1package PMG::CLI::pmgdb;
8b91b776
DM
2
3use strict;
4use warnings;
5use Data::Dumper;
6
7use PVE::SafeSyslog;
8use PVE::Tools qw(extract_param);
9use PVE::INotify;
595f5e50 10use PVE::CLIHandler;
8b91b776 11
80a43e18 12use PMG::RESTEnvironment;
a355f100 13use PMG::DBTools;
595f5e50 14use PMG::RuleDB;
354ae1b2 15use PMG::Cluster;
9f67f5b3 16use PMG::ClusterConfig;
354ae1b2 17use PMG::Statistic;
a355f100 18
8b91b776
DM
19use base qw(PVE::CLIHandler);
20
80a43e18
DM
21sub setup_environment {
22 PMG::RESTEnvironment->setup_default_cli_env();
23}
24
c881fe35
DM
25sub print_objects {
26 my ($ruledb, $og) = @_;
27
28 my $objects = $ruledb->load_group_objects ($og->{id});
29
30 foreach my $obj (@$objects) {
31 my $desc = $obj->short_desc ();
32 print " OBJECT $obj->{id}: $desc\n";
33 }
34}
35
36sub print_rule {
37 my ($ruledb, $rule) = @_;
38
39 print "Found RULE $rule->{id}: $rule->{name}\n";
40
41 my ($from, $to, $when, $what, $action) =
42 $ruledb->load_groups($rule);
43
44 foreach my $og (@$from) {
45 print " FOUND FROM GROUP $og->{id}: $og->{name}\n";
46 print_objects($ruledb, $og);
47 }
48 foreach my $og (@$to) {
49 print " FOUND TO GROUP $og->{id}: $og->{name}\n";
50 print_objects($ruledb, $og);
51 }
52 foreach my $og (@$when) {
53 print " FOUND WHEN GROUP $og->{id}: $og->{name}\n";
54 print_objects($ruledb, $og);
55 }
56 foreach my $og (@$what) {
57 print " FOUND WHAT GROUP $og->{id}: $og->{name}\n";
58 print_objects($ruledb, $og);
59 }
60 foreach my $og (@$action) {
61 print " FOUND ACTION GROUP $og->{id}: $og->{name}\n";
62 print_objects($ruledb, $og);
63 }
64}
8b91b776 65
8b91b776
DM
66__PACKAGE__->register_method ({
67 name => 'dump',
68 path => 'dump',
69 method => 'GET',
70 description => "Print the PMG rule database.",
71 parameters => {
72 additionalProperties => 0,
73 },
74 returns => { type => 'null'},
75 code => sub {
76 my ($param) = @_;
77
c881fe35
DM
78 my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
79 my $ruledb = PMG::RuleDB->new($dbh);
80
c881fe35
DM
81 my $rules = $ruledb->load_rules();
82
83 foreach my $rule (@$rules) {
84 print_rule($ruledb, $rule);
85 }
86
87 $ruledb->close();
8b91b776
DM
88
89 return undef;
90 }});
91
92
93__PACKAGE__->register_method ({
94 name => 'delete',
95 path => 'delete',
96 method => 'DELETE',
97 description => "Delete PMG rule database.",
98 parameters => {
99 additionalProperties => 0,
100 },
101 returns => { type => 'null'},
102 code => sub {
103 my ($param) = @_;
104
f1bf78ff
DM
105 my $list = PMG::DBTools::database_list();
106
107 my $dbname = "Proxmox_ruledb";
108
109 die "Database '$dbname' does not exist\n" if !$list->{$dbname};
a355f100 110
8b91b776
DM
111 syslog('info', "delete rule database");
112
f1bf78ff 113 PMG::DBTools::delete_ruledb($dbname);
8b91b776
DM
114
115 return undef;
116 }});
117
118
119__PACKAGE__->register_method ({
dfcae855
DM
120 name => 'init',
121 path => 'init',
8b91b776 122 method => 'POST',
dfcae855 123 description => "Initialize/Upgrade the PMG rule database.",
8b91b776
DM
124 parameters => {
125 additionalProperties => 0,
126 properties => {
f1bf78ff 127 force => {
8b91b776 128 type => 'boolean',
f1bf78ff 129 description => "Delete existing database.",
8b91b776
DM
130 optional => 1,
131 default => 0,
132 },
133 statistics => {
134 type => 'boolean',
dfcae855 135 description => "Reset and update statistic database.",
8b91b776 136 optional => 1,
dfcae855 137 default => 0,
8b91b776
DM
138 },
139 }
140 },
141 returns => { type => 'null'},
142 code => sub {
143 my ($param) = @_;
144
f1bf78ff
DM
145 my $list = PMG::DBTools::database_list();
146
147 my $dbname = "Proxmox_ruledb";
148
149 if (!$list->{$dbname} || $param->{force}) {
8b91b776 150
f1bf78ff
DM
151 if ($list->{$dbname}) {
152 print "Destroy existing rule database\n";
153 PMG::DBTools::delete_ruledb($dbname);
154 }
155
156 print "Initialize rule database\n";
157
158 my $dbh = PMG::DBTools::create_ruledb ($dbname);
f4fe6fc4 159 my $ruledb = PMG::RuleDB->new($dbh);
0a580593 160 PMG::DBTools::init_ruledb($ruledb);
f1bf78ff
DM
161
162 $dbh->disconnect();
163
164 } else {
165
166 my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
e7c865af 167 my $ruledb = PMG::RuleDB->new($dbh);
f1bf78ff 168
0a580593 169 print "Analyzing/Upgrading existing Databases...";
f4fe6fc4 170 PMG::DBTools::upgradedb ($ruledb);
0a580593 171 print "done\n";
f1bf78ff
DM
172
173 # reset and update statistic databases
174 if ($param->{statistics}) {
175 print "Generating Proxmox Statistic Databases... ";
354ae1b2
DM
176 PMG::Statistic::clear_stats($dbh);
177 my $cinfo = PVE::INotify::read_file("cluster.conf");
178 PMG::Statistic::update_stats($dbh, $cinfo);
f1bf78ff
DM
179 print "done\n";
180 }
181
182 $dbh->disconnect();
183 }
a355f100 184
8b91b776
DM
185 return undef;
186 }});
187
188
354ae1b2
DM
189__PACKAGE__->register_method ({
190 name => 'update',
191 path => 'update',
192 method => 'POST',
193 description => "Update the PMG statistic database.",
194 parameters => {
195 additionalProperties => 0,
196 },
197 returns => { type => 'null'},
198 code => sub {
199 my ($param) = @_;
200
201 my $dbh = PMG::DBTools::open_ruledb("Proxmox_ruledb");
202 print "Updateing Proxmox Statistic Databases... ";
203 my $cinfo = PVE::INotify::read_file("cluster.conf");
204 PMG::Statistic::update_stats($dbh, $cinfo);
205 print "done\n";
206 $dbh->disconnect();
207
208 return undef;
209 }});
210
8b91b776
DM
211our $cmddef = {
212 'dump' => [ __PACKAGE__, 'dump', []],
213 delete => [ __PACKAGE__, 'delete', []],
dfcae855 214 init => [ __PACKAGE__, 'init', []],
354ae1b2 215 update => [ __PACKAGE__, 'update', []],
8b91b776
DM
216};
217
2181;