Signed-off-by: Oguz Bektas <o.bek...@proxmox.com> --- v1 -> v2:
* return empty hash if socket does not exist or is not a socket file * remove unnecessary corosync config lines since we don't use the config file data/PVE/API2/ClusterConfig.pm | 54 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/data/PVE/API2/ClusterConfig.pm b/data/PVE/API2/ClusterConfig.pm index e7142b5..fa2c879 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,55 @@ __PACKAGE__->register_method({ return $totem_cfg; }}); +__PACKAGE__->register_method ({ + name => 'status', + path => 'qdevice', + method => 'GET', + description => 'Get QDevice and configuration.', + 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 unless -e -S $socket_path; + + my $qdevice_socket = IO::Socket::UNIX->new( + Type => SOCK_STREAM, + Peer => $socket_path, + ); + + print $qdevice_socket "status verbose\n"; + my @qdevice_matches = ( + "Algorithm", + "Echo reply", + "Last poll call", + "Model", + "QNetd host", + "State", + "Tie-breaker", + ); + my $keys = { map { $_ => 1 } @qdevice_matches }; + while (my $line = <$qdevice_socket>) { + chomp $line; + next if $line =~ /^\s/; + if ($line =~ /^(.*?)\s*:\s*(.*)$/) { + $result->{$1} = $2 if $keys->{$1}; + } + } + + return $result; + }}); +#TODO: possibly add setup and remove methods + + 1; -- 2.11.0 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel