]>
git.proxmox.com Git - pmg-api.git/blob - PMG/API2/Services.pm
1 package PMG
::API2
::Services
;
9 use PVE
::Exception
qw(raise_param_exc);
11 use PMG
::RESTEnvironment
;
12 use PVE
::JSONSchema
qw(get_standard_option);
16 use base
qw(PVE::RESTHandler);
18 my $service_name_list = [
38 my $static_service_list;
40 sub get_service_list
{
42 return $static_service_list if $static_service_list;
45 foreach my $name (@$service_name_list) {
47 eval { $ss = PMG
::Utils
::get_full_service_state
($name); };
50 next if !defined($ss->{Description
});
51 $list->{$name} = { name
=> $name, desc
=> $ss->{Description
} };
54 $static_service_list = $list;
56 return $static_service_list;
60 my $service_prop_desc = {
61 description
=> "Service ID",
63 enum
=> $service_name_list,
66 my $service_state = sub {
70 eval { $ss = PMG
::Utils
::get_full_service_state
($service); };
75 my $state = $ss->{SubState
} // 'unknown';
77 $state = $ss->{Result
}
78 if $state eq 'dead' && $ss->{Type
} && $ss->{Type
} eq 'oneshot' &&
84 __PACKAGE__-
>register_method ({
88 description
=> "Service list.",
91 permissions
=> { check
=> [ 'admin', 'audit' ] },
93 additionalProperties
=> 0,
95 node
=> get_standard_option
('pve-node'),
104 links
=> [ { rel
=> 'child', href
=> "{service}" } ],
111 my $service_list = get_service_list
();
113 foreach my $id (keys %{$service_list}) {
116 name
=> $service_list->{$id}->{name
},
117 desc
=> $service_list->{$id}->{desc
},
118 state => $service_state->($id),
125 __PACKAGE__-
>register_method({
129 description
=> "Directory index",
130 permissions
=> { check
=> [ 'admin', 'audit' ] },
132 additionalProperties
=> 0,
134 node
=> get_standard_option
('pve-node'),
135 service
=> $service_prop_desc,
143 subdir
=> { type
=> 'string' },
146 links
=> [ { rel
=> 'child', href
=> "{subdir}" } ],
152 { subdir
=> 'state' },
153 { subdir
=> 'start' },
154 { subdir
=> 'stop' },
155 { subdir
=> 'restart' },
156 { subdir
=> 'reload' },
162 __PACKAGE__-
>register_method ({
163 name
=> 'service_state',
164 path
=> '{service}/state',
166 description
=> "Read service properties",
169 permissions
=> { check
=> [ 'admin', 'audit' ] },
171 additionalProperties
=> 0,
173 node
=> get_standard_option
('pve-node'),
174 service
=> $service_prop_desc,
184 my $service_list = get_service_list
();
186 my $si = $service_list->{$param->{service
}};
188 service
=> $param->{service
},
191 state => &$service_state($param->{service
}),
195 __PACKAGE__-
>register_method ({
196 name
=> 'service_start',
197 path
=> '{service}/start',
199 description
=> "Start service.",
202 permissions
=> { check
=> [ 'admin' ] },
204 additionalProperties
=> 0,
206 node
=> get_standard_option
('pve-node'),
207 service
=> $service_prop_desc,
216 my $restenv = PMG
::RESTEnvironment-
>get();
218 my $user = $restenv->get_user();
223 syslog
('info', "starting service $param->{service}: $upid\n");
225 PMG
::Utils
::service_cmd
($param->{service
}, 'start');
229 return $restenv->fork_worker('srvstart', $param->{service
}, $user, $realcmd);
232 __PACKAGE__-
>register_method ({
233 name
=> 'service_stop',
234 path
=> '{service}/stop',
236 description
=> "Stop service.",
239 permissions
=> { check
=> [ 'admin' ] },
241 additionalProperties
=> 0,
243 node
=> get_standard_option
('pve-node'),
244 service
=> $service_prop_desc,
253 my $restenv = PMG
::RESTEnvironment-
>get();
255 my $user = $restenv->get_user();
260 syslog
('info', "stoping service $param->{service}: $upid\n");
262 PMG
::Utils
::service_cmd
($param->{service
}, 'stop');
266 return $restenv->fork_worker('srvstop', $param->{service
}, $user, $realcmd);
269 __PACKAGE__-
>register_method ({
270 name
=> 'service_restart',
271 path
=> '{service}/restart',
273 description
=> "Restart service.",
276 permissions
=> { check
=> [ 'admin' ] },
278 additionalProperties
=> 0,
280 node
=> get_standard_option
('pve-node'),
281 service
=> $service_prop_desc,
290 my $restenv = PMG
::RESTEnvironment-
>get();
292 my $user = $restenv->get_user();
297 syslog
('info', "re-starting service $param->{service}: $upid\n");
299 PMG
::Utils
::service_cmd
($param->{service
}, 'restart');
303 return $restenv->fork_worker('srvrestart', $param->{service
}, $user, $realcmd);
306 __PACKAGE__-
>register_method ({
307 name
=> 'service_reload',
308 path
=> '{service}/reload',
310 description
=> "Reload service.",
313 permissions
=> { check
=> [ 'admin' ] },
315 additionalProperties
=> 0,
317 node
=> get_standard_option
('pve-node'),
318 service
=> $service_prop_desc,
327 my $restenv = PMG
::RESTEnvironment-
>get();
329 my $user = $restenv->get_user();
334 syslog
('info', "reloading service $param->{service}: $upid\n");
336 PMG
::Utils
::service_cmd
($param->{service
}, 'reload');
340 return $restenv->fork_worker('srvreload', $param->{service
}, $user, $realcmd);