]>
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 = [
34 my $static_service_list;
36 sub get_service_list
{
38 return $static_service_list if $static_service_list;
41 foreach my $name (@$service_name_list) {
43 eval { $ss = PMG
::Utils
::get_full_service_state
($name); };
46 next if !defined($ss->{Description
});
47 $list->{$name} = { name
=> $name, desc
=> $ss->{Description
} };
50 $static_service_list = $list;
52 return $static_service_list;
56 my $service_prop_desc = {
57 description
=> "Service ID",
59 enum
=> $service_name_list,
62 my $service_state = sub {
66 eval { $ss = PMG
::Utils
::get_full_service_state
($service); };
71 my $state = $ss->{SubState
} // 'unknown';
73 $state = $ss->{Result
}
74 if $state eq 'dead' && $ss->{Type
} && $ss->{Type
} eq 'oneshot' &&
80 __PACKAGE__-
>register_method ({
84 description
=> "Service list.",
88 additionalProperties
=> 0,
90 node
=> get_standard_option
('pve-node'),
99 links
=> [ { rel
=> 'child', href
=> "{service}" } ],
106 my $service_list = get_service_list
();
108 foreach my $id (keys %{$service_list}) {
111 name
=> $service_list->{$id}->{name
},
112 desc
=> $service_list->{$id}->{desc
},
113 state => $service_state->($id),
120 __PACKAGE__-
>register_method({
124 description
=> "Directory index",
126 additionalProperties
=> 0,
128 node
=> get_standard_option
('pve-node'),
129 service
=> $service_prop_desc,
137 subdir
=> { type
=> 'string' },
140 links
=> [ { rel
=> 'child', href
=> "{subdir}" } ],
146 { subdir
=> 'state' },
147 { subdir
=> 'start' },
148 { subdir
=> 'stop' },
149 { subdir
=> 'restart' },
150 { subdir
=> 'reload' },
156 __PACKAGE__-
>register_method ({
157 name
=> 'service_state',
158 path
=> '{service}/state',
160 description
=> "Read service properties",
164 additionalProperties
=> 0,
166 node
=> get_standard_option
('pve-node'),
167 service
=> $service_prop_desc,
177 my $service_list = get_service_list
();
179 my $si = $service_list->{$param->{service
}};
181 service
=> $param->{service
},
184 state => &$service_state($param->{service
}),
188 __PACKAGE__-
>register_method ({
189 name
=> 'service_start',
190 path
=> '{service}/start',
192 description
=> "Start service.",
196 additionalProperties
=> 0,
198 node
=> get_standard_option
('pve-node'),
199 service
=> $service_prop_desc,
208 my $restenv = PMG
::RESTEnvironment-
>get();
210 my $user = $restenv->get_user();
215 syslog
('info', "starting service $param->{service}: $upid\n");
217 PMG
::Utils
::service_cmd
($param->{service
}, 'start');
221 return $restenv->fork_worker('srvstart', $param->{service
}, $user, $realcmd);
224 __PACKAGE__-
>register_method ({
225 name
=> 'service_stop',
226 path
=> '{service}/stop',
228 description
=> "Stop service.",
232 additionalProperties
=> 0,
234 node
=> get_standard_option
('pve-node'),
235 service
=> $service_prop_desc,
244 my $restenv = PMG
::RESTEnvironment-
>get();
246 my $user = $restenv->get_user();
251 syslog
('info', "stoping service $param->{service}: $upid\n");
253 PMG
::Utils
::service_cmd
($param->{service
}, 'stop');
257 return $restenv->fork_worker('srvstop', $param->{service
}, $user, $realcmd);
260 __PACKAGE__-
>register_method ({
261 name
=> 'service_restart',
262 path
=> '{service}/restart',
264 description
=> "Restart service.",
268 additionalProperties
=> 0,
270 node
=> get_standard_option
('pve-node'),
271 service
=> $service_prop_desc,
280 my $restenv = PMG
::RESTEnvironment-
>get();
282 my $user = $restenv->get_user();
287 syslog
('info', "re-starting service $param->{service}: $upid\n");
289 PMG
::Utils
::service_cmd
($param->{service
}, 'restart');
293 return $restenv->fork_worker('srvrestart', $param->{service
}, $user, $realcmd);
296 __PACKAGE__-
>register_method ({
297 name
=> 'service_reload',
298 path
=> '{service}/reload',
300 description
=> "Reload service.",
304 additionalProperties
=> 0,
306 node
=> get_standard_option
('pve-node'),
307 service
=> $service_prop_desc,
316 my $restenv = PMG
::RESTEnvironment-
>get();
318 my $user = $restenv->get_user();
323 syslog
('info', "reloading service $param->{service}: $upid\n");
325 PMG
::Utils
::service_cmd
($param->{service
}, 'reload');
329 return $restenv->fork_worker('srvreload', $param->{service
}, $user, $realcmd);