]>
git.proxmox.com Git - pmg-api.git/blob - PMG/API2/Services.pm
2e78e59ae6db706f033ff056743f5652d67808dc
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 = [
33 my $get_full_service_state = sub {
40 if ($line =~ m/^([^=\s]+)=(.*)$/) {
45 $service = 'postfix@-' if $service eq 'postfix';
46 PVE
::Tools
::run_command
(['systemctl', 'show', $service], outfunc
=> $parser);
51 my $static_service_list;
53 sub get_service_list
{
55 return $static_service_list if $static_service_list;
58 foreach my $name (@$service_name_list) {
60 eval { $ss = &$get_full_service_state($name); };
63 next if !defined($ss->{Description
});
64 $list->{$name} = { name
=> $name, desc
=> $ss->{Description
} };
67 $static_service_list = $list;
69 return $static_service_list;
73 my $service_prop_desc = {
74 description
=> "Service ID",
76 enum
=> $service_name_list,
79 my $service_state = sub {
83 eval { $ss = &$get_full_service_state($service); };
88 my $state = $ss->{SubState
} // 'unknown';
90 $state = $ss->{Result
}
91 if $state eq 'dead' && $ss->{Type
} && $ss->{Type
} eq 'oneshot' &&
97 __PACKAGE__-
>register_method ({
101 description
=> "Service list.",
105 additionalProperties
=> 0,
107 node
=> get_standard_option
('pve-node'),
116 links
=> [ { rel
=> 'child', href
=> "{service}" } ],
123 my $service_list = get_service_list
();
125 foreach my $id (keys %{$service_list}) {
128 name
=> $service_list->{$id}->{name
},
129 desc
=> $service_list->{$id}->{desc
},
130 state => $service_state->($id),
137 __PACKAGE__-
>register_method({
141 description
=> "Directory index",
143 additionalProperties
=> 0,
145 node
=> get_standard_option
('pve-node'),
146 service
=> $service_prop_desc,
154 subdir
=> { type
=> 'string' },
157 links
=> [ { rel
=> 'child', href
=> "{subdir}" } ],
163 { subdir
=> 'state' },
164 { subdir
=> 'start' },
165 { subdir
=> 'stop' },
166 { subdir
=> 'restart' },
167 { subdir
=> 'reload' },
173 __PACKAGE__-
>register_method ({
174 name
=> 'service_state',
175 path
=> '{service}/state',
177 description
=> "Read service properties",
181 additionalProperties
=> 0,
183 node
=> get_standard_option
('pve-node'),
184 service
=> $service_prop_desc,
194 my $service_list = get_service_list
();
196 my $si = $service_list->{$param->{service
}};
198 service
=> $param->{service
},
201 state => &$service_state($param->{service
}),
205 __PACKAGE__-
>register_method ({
206 name
=> 'service_start',
207 path
=> '{service}/start',
209 description
=> "Start service.",
213 additionalProperties
=> 0,
215 node
=> get_standard_option
('pve-node'),
216 service
=> $service_prop_desc,
225 my $restenv = PMG
::RESTEnvironment
::get
();
227 my $user = $restenv->get_user();
232 syslog
('info', "starting service $param->{service}: $upid\n");
234 PMG
::Utils
::service_cmd
($param->{service
}, 'start');
238 return $restenv->fork_worker('srvstart', $param->{service
}, $user, $realcmd);
241 __PACKAGE__-
>register_method ({
242 name
=> 'service_stop',
243 path
=> '{service}/stop',
245 description
=> "Stop service.",
249 additionalProperties
=> 0,
251 node
=> get_standard_option
('pve-node'),
252 service
=> $service_prop_desc,
261 my $restenv = PMG
::RESTEnvironment
::get
();
263 my $user = $restenv->get_user();
268 syslog
('info', "stoping service $param->{service}: $upid\n");
270 PMG
::Utils
::service_cmd
($param->{service
}, 'stop');
274 return $restenv->fork_worker('srvstop', $param->{service
}, $user, $realcmd);
277 __PACKAGE__-
>register_method ({
278 name
=> 'service_restart',
279 path
=> '{service}/restart',
281 description
=> "Restart service.",
285 additionalProperties
=> 0,
287 node
=> get_standard_option
('pve-node'),
288 service
=> $service_prop_desc,
297 my $restenv = PMG
::RESTEnvironment
::get
();
299 my $user = $restenv->get_user();
304 syslog
('info', "re-starting service $param->{service}: $upid\n");
306 PMG
::Utils
::service_cmd
($param->{service
}, 'restart');
310 return $restenv->fork_worker('srvrestart', $param->{service
}, $user, $realcmd);
313 __PACKAGE__-
>register_method ({
314 name
=> 'service_reload',
315 path
=> '{service}/reload',
317 description
=> "Reload service.",
321 additionalProperties
=> 0,
323 node
=> get_standard_option
('pve-node'),
324 service
=> $service_prop_desc,
333 my $restenv = PMG
::RESTEnvironment
::get
();
335 my $user = $restenv->get_user();
340 syslog
('info', "reloading service $param->{service}: $upid\n");
342 PMG
::Utils
::service_cmd
($param->{service
}, 'reload');
346 return $restenv->fork_worker('srvreload', $param->{service
}, $user, $realcmd);