]>
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 = [
39 my $static_service_list;
41 sub get_service_list
{
43 return $static_service_list if $static_service_list;
46 foreach my $name (@$service_name_list) {
48 eval { $ss = PMG
::Utils
::get_full_service_state
($name); };
51 next if !defined($ss->{Description
});
52 $list->{$name} = { name
=> $name, desc
=> $ss->{Description
} };
55 $static_service_list = $list;
57 return $static_service_list;
61 my $service_prop_desc = {
62 description
=> "Service ID",
64 enum
=> $service_name_list,
67 my $service_state = sub {
71 eval { $ss = PMG
::Utils
::get_full_service_state
($service); };
76 my $state = $ss->{SubState
} // 'unknown';
78 $state = $ss->{Result
}
79 if $state eq 'dead' && $ss->{Type
} && $ss->{Type
} eq 'oneshot' &&
85 __PACKAGE__-
>register_method ({
89 description
=> "Service list.",
92 permissions
=> { check
=> [ 'admin', 'audit' ] },
94 additionalProperties
=> 0,
96 node
=> get_standard_option
('pve-node'),
105 links
=> [ { rel
=> 'child', href
=> "{service}" } ],
112 my $service_list = get_service_list
();
114 foreach my $id (keys %{$service_list}) {
117 name
=> $service_list->{$id}->{name
},
118 desc
=> $service_list->{$id}->{desc
},
119 state => $service_state->($id),
126 __PACKAGE__-
>register_method({
130 description
=> "Directory index",
131 permissions
=> { check
=> [ 'admin', 'audit' ] },
133 additionalProperties
=> 0,
135 node
=> get_standard_option
('pve-node'),
136 service
=> $service_prop_desc,
144 subdir
=> { type
=> 'string' },
147 links
=> [ { rel
=> 'child', href
=> "{subdir}" } ],
153 { subdir
=> 'state' },
154 { subdir
=> 'start' },
155 { subdir
=> 'stop' },
156 { subdir
=> 'restart' },
157 { subdir
=> 'reload' },
163 __PACKAGE__-
>register_method ({
164 name
=> 'service_state',
165 path
=> '{service}/state',
167 description
=> "Read service properties",
170 permissions
=> { check
=> [ 'admin', 'audit' ] },
172 additionalProperties
=> 0,
174 node
=> get_standard_option
('pve-node'),
175 service
=> $service_prop_desc,
185 my $service_list = get_service_list
();
187 my $si = $service_list->{$param->{service
}};
189 service
=> $param->{service
},
192 state => &$service_state($param->{service
}),
196 __PACKAGE__-
>register_method ({
197 name
=> 'service_start',
198 path
=> '{service}/start',
200 description
=> "Start service.",
203 permissions
=> { check
=> [ 'admin' ] },
205 additionalProperties
=> 0,
207 node
=> get_standard_option
('pve-node'),
208 service
=> $service_prop_desc,
217 my $restenv = PMG
::RESTEnvironment-
>get();
219 my $user = $restenv->get_user();
224 syslog
('info', "starting service $param->{service}: $upid\n");
226 PMG
::Utils
::service_cmd
($param->{service
}, 'start');
230 return $restenv->fork_worker('srvstart', $param->{service
}, $user, $realcmd);
233 __PACKAGE__-
>register_method ({
234 name
=> 'service_stop',
235 path
=> '{service}/stop',
237 description
=> "Stop service.",
240 permissions
=> { check
=> [ 'admin' ] },
242 additionalProperties
=> 0,
244 node
=> get_standard_option
('pve-node'),
245 service
=> $service_prop_desc,
254 my $restenv = PMG
::RESTEnvironment-
>get();
256 my $user = $restenv->get_user();
261 syslog
('info', "stoping service $param->{service}: $upid\n");
263 PMG
::Utils
::service_cmd
($param->{service
}, 'stop');
267 return $restenv->fork_worker('srvstop', $param->{service
}, $user, $realcmd);
270 __PACKAGE__-
>register_method ({
271 name
=> 'service_restart',
272 path
=> '{service}/restart',
274 description
=> "Restart service.",
277 permissions
=> { check
=> [ 'admin' ] },
279 additionalProperties
=> 0,
281 node
=> get_standard_option
('pve-node'),
282 service
=> $service_prop_desc,
291 my $restenv = PMG
::RESTEnvironment-
>get();
293 my $user = $restenv->get_user();
298 syslog
('info', "re-starting service $param->{service}: $upid\n");
300 PMG
::Utils
::service_cmd
($param->{service
}, 'restart');
304 return $restenv->fork_worker('srvrestart', $param->{service
}, $user, $realcmd);
307 __PACKAGE__-
>register_method ({
308 name
=> 'service_reload',
309 path
=> '{service}/reload',
311 description
=> "Reload service.",
314 permissions
=> { check
=> [ 'admin' ] },
316 additionalProperties
=> 0,
318 node
=> get_standard_option
('pve-node'),
319 service
=> $service_prop_desc,
328 my $restenv = PMG
::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);