Skip to content

Commit a42bdde

Browse files
committed
wip: allow change forward mode
issue #2144
1 parent 69b6fc7 commit a42bdde

File tree

4 files changed

+71
-9
lines changed

4 files changed

+71
-9
lines changed

lib/Ravada/Front.pm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1141,6 +1141,7 @@ sub list_requests($self, $id_domain_req=undef, $seconds=60) {
11411141
|| $command eq 'manage_pools'
11421142
|| $command eq 'list_storage_pools'
11431143
|| $command eq 'list_cpu_models'
1144+
|| $command eq 'list_networks'
11441145
;
11451146
next if ( $command eq 'force_shutdown'
11461147
|| $command eq 'force_reboot'

lib/Ravada/VM/KVM.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3247,7 +3247,7 @@ sub change_network($self, $data) {
32473247
}
32483248
$xml_forward->setAttribute('mode' => $forward_mode);
32493249
my ($xml_nat) = $xml_forward->findnodes("nat");
3250-
$xml_forward->removeChild($xml_nat) if $forward_mode ne 'nat';
3250+
$xml_forward->removeChild($xml_nat) if $forward_mode ne 'nat' && $xml_nat;
32513251
$network= $self->vm->define_network($doc->toString);
32523252
$network->create() if $is_active;
32533253
}

t/vm/networking.t

Lines changed: 61 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,9 @@ sub _check_domain_network($domain, $net_name) {
500500
}
501501

502502
sub test_change_network_internal($vm, $net) {
503+
504+
my ($net2) = grep { $_->{name} eq $net->{name} } $vm->list_virtual_networks;
505+
is($net2->{id}, $net->{id}) or exit;
503506
if ($vm->type eq 'KVM') {
504507
test_change_network_internal_kvm($vm, $net);
505508
} elsif ($vm->type eq 'Void') {
@@ -803,13 +806,59 @@ sub test_new_network($vm) {
803806

804807
}
805808

806-
sub test_change_forward($vm, $net) {
809+
sub _add_nat($vm, $net2) {
810+
my $net = $vm->vm->get_network_by_name($net2->{name});
811+
812+
my $doc = XML::LibXML->load_xml(string => $net->get_xml_description);
813+
my ($forward) = $doc->findnodes("/network/forward");
814+
my ($nat) = $forward->findnodes("nat");
815+
816+
my $is_active = $net->is_active;
817+
$net->destroy() if $is_active;
818+
my ($xml_network) = $doc->findnodes("/network");
819+
$nat = $xml_network->addNewChild(undef,"nat");
820+
821+
my $port = $nat->addNewChild(undef,"port");
822+
$port->setAttribute("start" => 1024);
823+
$port->setAttribute("end" => 65535);
824+
825+
$net= $vm->vm->define_network($doc->toString);
826+
$net->create() if $is_active;
827+
}
828+
829+
sub _del_nat($vm, $net2) {
830+
my $net = $vm->vm->get_network_by_name($net2->{name});
831+
832+
my $doc = XML::LibXML->load_xml(string => $net->get_xml_description);
833+
834+
my ($port) = $doc->findnodes("/network/nat/port");
835+
return if !$port;
836+
837+
diag("removing port ".$doc->toString);
838+
839+
my $is_active = $net->is_active;
840+
$net->destroy() if $is_active;
841+
my ($nat) = $doc->findnodes("/network/nat");
842+
($port) = $nat->findnodes("port");
843+
$nat->removeChild($port);
844+
845+
$net= $vm->vm->define_network($doc->toString);
846+
$net->create() if $is_active;
847+
848+
}
849+
850+
sub test_change_forward($vm, $add_nat=1) {
851+
852+
return if $vm->type ne 'KVM';
853+
854+
my $net = test_add_network($vm);
855+
807856
my $net2 = dclone($net);
808857
my $user2 = create_user();
809858

810-
is($net2->{forward_mode},'nat') or exit;
859+
_add_nat($vm, $net2) if $vm->type eq 'KVM' && $add_nat;
860+
_del_nat($vm, $net2) if $vm->type eq 'KVM' && !$add_nat;
811861

812-
warn Dumper($net2);
813862
for my $mode ('none' , 'nat') {
814863
$net2->{forward_mode} = $mode;
815864
my $req_change2 = Ravada::Request->change_network(
@@ -823,7 +872,12 @@ sub test_change_forward($vm, $net) {
823872
test_change_network_internal($vm, $net2);
824873

825874
}
826-
exit;
875+
my $req = Ravada::Request->remove_network(
876+
uid => user_admin->id
877+
,id => $net->{id}
878+
);
879+
wait_request(check_error => 0);
880+
827881
}
828882

829883
########################################################################
@@ -857,9 +911,11 @@ for my $vm_name ( vm_names() ) {
857911

858912
test_list_networks($vm);
859913

914+
test_change_forward($vm, 0);
915+
test_change_forward($vm, 1);
916+
860917
my $net = test_add_network($vm);
861918

862-
test_change_forward($vm, $net);
863919
test_assign_network($vm, $net);
864920
test_assign_network_clone($vm, $net, 0);
865921
test_assign_network_clone($vm, $net, 1); # volatile clone

templates/main/network_options.html.ep

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
<input type="text" ng-model="network.name" required
1515
name="name"
1616
ng-disabled="network.id"/>
17+
18+
<span class="badge badge-danger" ng-show="network.forward_mode=='none'"><%=l 'isolated' %></span>
19+
<span class="badge badge-secondary" ng-show="network.forward_mode=='nat'"><%=l 'connected' %></span>
1720
</div>
1821
</div>
1922

@@ -81,11 +84,13 @@
8184
</div>
8285
</div>
8386

84-
<div class="form-group row" ng-show="network.forward_mode">
87+
<div class="form-group row">
8588
<div class="col-md-3" align="right"><%=l 'Forward' %></div>
8689
<div class="col-md-3">
87-
<input type="text" ng-model="network.forward_mode"
88-
/>
90+
<select name="forward_mode" ng-model="network.forward_mode"
91+
ng-options="item for item in ['nat','none']"
92+
>
93+
</select>
8994
</div>
9095
</div>
9196

0 commit comments

Comments
 (0)