From e24a821006eaccf30682566b0a6bf8c53dd496c6 Mon Sep 17 00:00:00 2001 From: Francesc Guasch Date: Tue, 5 Mar 2024 09:15:48 +0100 Subject: [PATCH 1/4] doc: changes for v2.2.0 --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd2cc4ed3..1ce31a2be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ **Implemented enhancements:** +- Users can share virtual machines [\#2021] +- Virtual networks management [\#1984] +- GPU Mediated devices [\#1955] +- Allow remove users via GUI [\#2023] + **Bugfixes** **Refactors** From 6c44b4a68ea2b3cba6a2701486fedf1baa3425c3 Mon Sep 17 00:00:00 2001 From: Francesc Guasch Date: Fri, 8 Mar 2024 15:13:30 +0100 Subject: [PATCH 2/4] fix: read options directly from DB issue #2032 --- lib/Ravada/WebSocket.pm | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/Ravada/WebSocket.pm b/lib/Ravada/WebSocket.pm index b1398df17..2e7ee911d 100644 --- a/lib/Ravada/WebSocket.pm +++ b/lib/Ravada/WebSocket.pm @@ -345,11 +345,10 @@ sub _get_node_info($rvd, $args) { return {} if!$user->is_admin; - my $node = Ravada::VM->open(id => $id_node, readonly => 1); - $node->_data('hostname'); - $node->{_data}->{is_local} = $node->is_local; - $node->{_data}->{has_bases} = scalar($node->list_bases); - return $node->{_data}; + my $sth = $rvd->_dbh->prepare("SELECT * FROM vms WHERE id=?"); + $sth->execute($id_node); + my $data = $sth->fetchrow_hashref; + return $data; } From 43f5b7849a73422e7ca8a1ffa30c34d9e9eee829 Mon Sep 17 00:00:00 2001 From: Francesc Guasch Date: Fri, 8 Mar 2024 15:47:28 +0100 Subject: [PATCH 3/4] wip(frontend): fetch bases and local info for node --- lib/Ravada/WebSocket.pm | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/lib/Ravada/WebSocket.pm b/lib/Ravada/WebSocket.pm index 2e7ee911d..7c578f068 100644 --- a/lib/Ravada/WebSocket.pm +++ b/lib/Ravada/WebSocket.pm @@ -348,8 +348,31 @@ sub _get_node_info($rvd, $args) { my $sth = $rvd->_dbh->prepare("SELECT * FROM vms WHERE id=?"); $sth->execute($id_node); my $data = $sth->fetchrow_hashref; + $data->{is_local}=0; + $data->{is_local}=1 if $data->{hostname} eq 'localhost' + || $data->{hostname} eq '127.0.0,1' + || !$data->{hostname}; + + $data->{bases}=_list_bases_node($rvd, $data->{id}); + return $data; +} +sub _list_bases_node($rvd, $id_node) { + my $sth = $rvd->_dbh->prepare( + "SELECT d.id FROM domains d,bases_vm bv" + ." WHERE d.is_base=1" + ." AND d.id = bv.id_domain " + ." AND bv.id_vm=?" + ." AND bv.enabled=1" + ); + my @bases; + $sth->execute($id_node); + while ( my ($id_domain) = $sth->fetchrow ) { + push @bases,($id_domain); + } + $sth->finish; + return \@bases; } sub _list_recent_requests($rvd, $seconds) { From adbe958d33ba667750e8c1d8888e2aaad4740d7c Mon Sep 17 00:00:00 2001 From: Francesc Guasch Date: Fri, 8 Mar 2024 16:24:53 +0100 Subject: [PATCH 4/4] test(frontend): fetch node info issue #2032 --- t/mojo/20_ws.t | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/t/mojo/20_ws.t b/t/mojo/20_ws.t index 3332b0def..12b374534 100644 --- a/t/mojo/20_ws.t +++ b/t/mojo/20_ws.t @@ -346,6 +346,36 @@ sub test_remove_booking_entry_non_admin($t, $id) { } +sub test_node_info($vm_name) { + my $sth = connector->dbh->prepare("SELECT * FROM vms WHERE vm_type=?"); + $sth->execute($vm_name); + + my $user = create_user(new_domain_name(), $$); + + while ( my $node = $sth->fetchrow_hashref) { + my $ws_args = { + channel => '/'.$node->{id} + ,login => user_admin->name + }; + + my $node_info = Ravada::WebSocket::_get_node_info + (rvd_front(), $ws_args); + if ($node->{hostname} =~ /localhost|127.0.0.1/) { + is($node_info->{is_local},1); + } else { + is($node_info->{is_local},0); + } + + $ws_args->{login} = $user->name; + + $node_info = Ravada::WebSocket::_get_node_info + (rvd_front(), $ws_args); + + is_deeply($node_info,{}); + } + +} + ######################################################################################## init('/etc/ravada.conf',0); @@ -379,6 +409,8 @@ for my $vm_name ( @{rvd_front->list_vm_types} ) { diag("Testing Web Services in $vm_name"); + test_node_info($vm_name); + mojo_login($t, $USERNAME, $PASSWORD); test_bookings($t); my @bases = _create_bases($t, $vm_name);