Skip to content

Commit d784b88

Browse files
committed
wip: update machine options
issue #2108
1 parent 350e6ff commit d784b88

File tree

2 files changed

+105
-9
lines changed

2 files changed

+105
-9
lines changed

script/rvd_front

Lines changed: 104 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1654,8 +1654,13 @@ post '/machine/set' => sub($c) {
16541654
my $value_text = (delete $arg->{value_text} or $value);
16551655

16561656
machine_set_value($c, $id, $field, $value, $value_text);
1657+
1658+
return $c->render(json => { $field => $value_text });
16571659
} else {
1658-
# TODO parse options and set them when necessary
1660+
machine_change_hardware($c, $id, $options);
1661+
machine_set_options($c, $id, $options);
1662+
1663+
return $c->render(json => $options );
16591664
}
16601665
};
16611666

@@ -4661,13 +4666,107 @@ sub resume_machine {
46614666
return $c->render(json => { req => $req->id });
46624667
}
46634668

4664-
sub machine_set_value($c, $id, $field, $value, $value_text=$value) {
4669+
sub machine_change_hardware($c, $id, $options) {
4670+
4671+
my $domain = Ravada::Front::Domain->open($id) or die "Unkown domain $id";
4672+
4673+
4674+
my $max_mem = delete $options->{max_mem};
4675+
my $memory = delete $options->{memory};
4676+
4677+
my $info = $domain->get_info();
4678+
my %change_mem;
4679+
if (int($info->{max_mem}/1024) != $max_mem && $USER->is_admin) {
4680+
$change_mem{max_mem} = $max_mem*1024;
4681+
}
4682+
4683+
if (int($info->{memory}/1024) != $memory) {
4684+
$change_mem{memory} = $memory*1024;
4685+
}
4686+
Ravada::Request->change_hardware(
4687+
uid => $USER->id
4688+
,id_domain => $id
4689+
,hardware=> 'memory'
4690+
,data => \%change_mem
4691+
) if keys %change_mem;
4692+
4693+
my $max_virt_cpu = delete $options->{max_virt_cpu};
4694+
my $n_virt_cpu = delete $options->{n_virt_cpu};
4695+
4696+
my %change_cpu;
4697+
4698+
if ($info->{max_virt_cpu} != $max_virt_cpu && $USER->is_admin) {
4699+
$change_cpu{max_virt_cpu} = $max_virt_cpu;
4700+
}
4701+
4702+
if ($info->{n_virt_cpu} != $n_virt_cpu) {
4703+
$change_cpu{n_virt_cpu} = $n_virt_cpu;
4704+
}
4705+
Ravada::Request->change_hardware(
4706+
uid => $USER->id
4707+
,id_domain => $id
4708+
,hardware=> 'vcpus'
4709+
,data => \%change_cpu
4710+
) if keys %change_cpu;
4711+
4712+
4713+
}
46654714

4715+
sub machine_set_options($c, $id, $options) {
4716+
return access_denied($c) if !$USER->can_manage_machine($id);
4717+
4718+
my $domain = Ravada::Front::Domain->open($id) or die "Unkown domain $id";
4719+
4720+
my $owner = delete $options->{owner};
4721+
$options->{id_owner} = $owner->{id} if $owner;
4722+
4723+
my %field_minutes = map { $_ => 1 } ('run_timeout','shutdown_timeout');
4724+
4725+
my $change;
4726+
for my $key (keys %$options) {
4727+
next if _privileged_machine_field($key) && !$USER->is_admin;
4728+
4729+
next if !defined $options->{$key} && !defined $domain->_data($key);
4730+
next if !$options->{$key} && !$domain->_data($key);
4731+
4732+
next unless defined $options->{$key} && !defined $domain->_data($key)
4733+
|| !defined $options->{$key} && defined $domain->_data($key)
4734+
|| $options->{$key} ne $domain->_data($key);
4735+
4736+
$change->{$key} = $options->{$key};
4737+
my $value_text = $options->{$key};
4738+
4739+
if ( exists $options->{$key} && defined $options->{$key}
4740+
&& $field_minutes{$key}) {
4741+
$options->{$key} = $options->{$key}*60;
4742+
4743+
if ($value_text =~ /^\d+$/) {
4744+
if ( $value_text >1 ) {
4745+
$value_text .= " minutes";
4746+
} elsif ($value_text == 1 ) {
4747+
$value_text .=" minute";
4748+
} else {
4749+
$value_text = "none";
4750+
}
4751+
}
4752+
}
4753+
4754+
machine_set_value($c, $id, $key => $options->{$key}, $value_text);
4755+
}
4756+
4757+
return $c->render(json => $change);
4758+
}
4759+
4760+
sub _privileged_machine_field($field) {
46664761

46674762
my %privileged = map { $_ => 1 } qw(timeout id_owner shutdown_disconnected shutdown_timeout autostart balance_policy);
4763+
return $privileged{$field};
4764+
}
4765+
4766+
sub machine_set_value($c, $id, $field, $value, $value_text=$value) {
46684767

46694768
return access_denied($c) if !$USER->can_manage_machine($id);
4670-
return access_denied($c) if $privileged{$field} && !$USER->is_admin;
4769+
return access_denied($c) if _privileged_machine_field($field) && !$USER->is_admin;
46714770

46724771
my $domain = Ravada::Front::Domain->open($id) or die "Unkown domain $id";
46734772
my $field_text = $field;
@@ -4678,7 +4777,6 @@ sub machine_set_value($c, $id, $field, $value, $value_text=$value) {
46784777
&& $value eq $domain->_data($field);
46794778

46804779
$value_text = 0 if !defined $value_text;
4681-
$value_text = int($value_text/60) if $field =~ /shutdown_disconnected|shutdown_timeout|run_timeout/;
46824780

46834781
if ($field eq 'id_owner') {
46844782
$field_text = 'owner';
@@ -4697,7 +4795,8 @@ sub machine_set_value($c, $id, $field, $value, $value_text=$value) {
46974795
$USER->send_message("Setting $field_text to $value_text in "
46984796
.$domain->name)
46994797
if !defined $domain->_data($field) || $domain->_data($field) ne $value;
4700-
return $c->render(json => { $field => $domain->_data($field, $value)});
4798+
4799+
$domain->_data($field, $value);
47014800

47024801
}
47034802

templates/main/vm_options.html.ep

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -265,18 +265,15 @@
265265
<button ng-enabled="node.id && list_users" class="btn btn-outline-secondary"
266266
ng-click="reset_options()"><%=l 'Cancel' %></button>
267267
<button class="btn btn-primary"
268-
ng-click="update_options(node); form_options.$pristine=true"
268+
ng-click="update_options(node)"
269269
ng-disabled="!form_options.$valid || form_options.$pristine
270270
|| new_option.memory > new_option.max_mem
271271
|| !node.id
272272
|| !list_users || !list_users.length
273273
"><%=l 'Save' %></button>
274-
valid={{form_options.$valid}}<br/>
275-
pristine={{form_options.$pristine}}<br/>
276274
</div>
277275
</div>
278276

279-
280277
</form>
281278

282279
</div><!-- of card-body options -->

0 commit comments

Comments
 (0)