[pve-devel] [PATCH v4 cluster] add qdevice status api call
Oguz Bektas
o.bektas at proxmox.com
Mon Jul 1 18:31:01 CEST 2019
Signed-off-by: Oguz Bektas <o.bektas at proxmox.com>
---
v3 -> v4:
* fix description
* create a hash directly instead of mapping keys to it
* style fix in socket variable
* don't use 'unless'
data/PVE/API2/ClusterConfig.pm | 53 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/data/PVE/API2/ClusterConfig.pm b/data/PVE/API2/ClusterConfig.pm
index e7142b5..a419994 100644
--- a/data/PVE/API2/ClusterConfig.pm
+++ b/data/PVE/API2/ClusterConfig.pm
@@ -12,6 +12,8 @@ use PVE::Cluster;
use PVE::APIClient::LWP;
use PVE::Corosync;
+use IO::Socket::UNIX;
+
use base qw(PVE::RESTHandler);
my $clusterconf = "/etc/pve/corosync.conf";
@@ -69,6 +71,7 @@ __PACKAGE__->register_method({
{ name => 'nodes' },
{ name => 'totem' },
{ name => 'join' },
+ { name => 'qdevice' },
];
return $result;
@@ -552,4 +555,54 @@ __PACKAGE__->register_method({
return $totem_cfg;
}});
+__PACKAGE__->register_method ({
+ name => 'status',
+ path => 'qdevice',
+ method => 'GET',
+ description => 'Get QDevice status',
+ permissions => {
+ check => ['perm', '/', [ 'Sys.Audit' ]],
+ },
+ parameters => {
+ additionalProperties => 0,
+ properties => {},
+ },
+ returns => {
+ type => "object",
+ },
+ code => sub {
+ my ($param) = @_;
+
+ my $result = {};
+ my $socket_path = "/var/run/corosync-qdevice/corosync-qdevice.sock";
+ return $result if !-S $socket_path;
+
+ my $qdevice_socket = IO::Socket::UNIX->new(
+ Type => SOCK_STREAM,
+ Peer => $socket_path,
+ );
+
+ print $qdevice_socket "status verbose\n";
+ my $qdevice_keys = {
+ "Algorithm" => 1,
+ "Echo reply" => 1,
+ "Last poll call" => 1,
+ "Model" => 1,
+ "QNetd host" => 1,
+ "State" => 1,
+ "Tie-breaker" => 1,
+ };
+ while (my $line = <$qdevice_socket>) {
+ chomp $line;
+ next if $line =~ /^\s/;
+ if ($line =~ /^(.*?)\s*:\s*(.*)$/) {
+ $result->{$1} = $2 if $qdevice_keys->{$1};
+ }
+ }
+
+ return $result;
+ }});
+#TODO: possibly add setup and remove methods
+
+
1;
--
2.11.0
More information about the pve-devel
mailing list