]>
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 PVE
::RESTEnvironment
;
12 use PVE
::JSONSchema
qw(get_standard_option);
16 use base
qw(PVE::RESTHandler);
18 my $service_name_list = [
32 my $get_full_service_state = sub {
39 if ($line =~ m/^([^=\s]+)=(.*)$/) {
44 $service = 'postfix@-' if $service eq 'postfix';
45 PVE
::Tools
::run_command
(['systemctl', 'show', $service], outfunc
=> $parser);
50 my $static_service_list;
52 sub get_service_list
{
54 return $static_service_list if $static_service_list;
57 foreach my $name (@$service_name_list) {
59 eval { $ss = &$get_full_service_state($name); };
62 next if !defined($ss->{Description
});
63 $list->{$name} = { name
=> $name, desc
=> $ss->{Description
} };
66 $static_service_list = $list;
68 return $static_service_list;
72 my $service_prop_desc = {
73 description
=> "Service ID",
75 enum
=> $service_name_list,
78 my $service_state = sub {
82 eval { $ss = &$get_full_service_state($service); };
87 return $ss->{SubState
} if $ss->{SubState
};
92 __PACKAGE__-
>register_method ({
96 description
=> "Service list.",
100 additionalProperties
=> 0,
102 node
=> get_standard_option
('pve-node'),
111 links
=> [ { rel
=> 'child', href
=> "{service}" } ],
118 my $service_list = get_service_list
();
120 foreach my $id (keys %{$service_list}) {
123 name
=> $service_list->{$id}->{name
},
124 desc
=> $service_list->{$id}->{desc
},
125 state => &$service_state($id),
132 __PACKAGE__-
>register_method({
136 description
=> "Directory index",
138 additionalProperties
=> 0,
140 node
=> get_standard_option
('pve-node'),
141 service
=> $service_prop_desc,
149 subdir
=> { type
=> 'string' },
152 links
=> [ { rel
=> 'child', href
=> "{subdir}" } ],
158 { subdir
=> 'state' },
159 { subdir
=> 'start' },
160 { subdir
=> 'stop' },
161 { subdir
=> 'restart' },
162 { subdir
=> 'reload' },
168 __PACKAGE__-
>register_method ({
169 name
=> 'service_state',
170 path
=> '{service}/state',
172 description
=> "Read service properties",
176 additionalProperties
=> 0,
178 node
=> get_standard_option
('pve-node'),
179 service
=> $service_prop_desc,
189 my $service_list = get_service_list
();
191 my $si = $service_list->{$param->{service
}};
193 service
=> $param->{service
},
196 state => &$service_state($param->{service
}),
200 __PACKAGE__-
>register_method ({
201 name
=> 'service_start',
202 path
=> '{service}/start',
204 description
=> "Start service.",
208 additionalProperties
=> 0,
210 node
=> get_standard_option
('pve-node'),
211 service
=> $service_prop_desc,
220 my $restenv = PVE
::RESTEnvironment
::get
();
222 my $user = $restenv->get_user();
227 syslog
('info', "starting service $param->{service}: $upid\n");
229 PMG
::Utils
::service_cmd
($param->{service
}, 'start');
233 return $restenv->fork_worker('srvstart', $param->{service
}, $user, $realcmd);
236 __PACKAGE__-
>register_method ({
237 name
=> 'service_stop',
238 path
=> '{service}/stop',
240 description
=> "Stop service.",
244 additionalProperties
=> 0,
246 node
=> get_standard_option
('pve-node'),
247 service
=> $service_prop_desc,
256 my $restenv = PVE
::RESTEnvironment
::get
();
258 my $user = $restenv->get_user();
263 syslog
('info', "stoping service $param->{service}: $upid\n");
265 PMG
::Utils
::service_cmd
($param->{service
}, 'stop');
269 return $restenv->fork_worker('srvstop', $param->{service
}, $user, $realcmd);
272 __PACKAGE__-
>register_method ({
273 name
=> 'service_restart',
274 path
=> '{service}/restart',
276 description
=> "Restart service.",
280 additionalProperties
=> 0,
282 node
=> get_standard_option
('pve-node'),
283 service
=> $service_prop_desc,
292 my $restenv = PVE
::RESTEnvironment
::get
();
294 my $user = $restenv->get_user();
299 syslog
('info', "re-starting service $param->{service}: $upid\n");
301 PMG
::Utils
::service_cmd
($param->{service
}, 'restart');
305 return $restenv->fork_worker('srvrestart', $param->{service
}, $user, $realcmd);
308 __PACKAGE__-
>register_method ({
309 name
=> 'service_reload',
310 path
=> '{service}/reload',
312 description
=> "Reload service.",
316 additionalProperties
=> 0,
318 node
=> get_standard_option
('pve-node'),
319 service
=> $service_prop_desc,
328 my $restenv = PVE
::RESTEnvironment
::get
();
330 my $user = $restenv->get_user();
335 syslog
('info', "reloading service $param->{service}: $upid\n");
337 PMG
::Utils
::service_cmd
($param->{service
}, 'reload');
341 return $restenv->fork_worker('srvreload', $param->{service
}, $user, $realcmd);