[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