* [pve-devel] [PATCH ha-manager 0/9] allow setting crs and service static resources
@ 2025-10-14 9:47 Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 1/9] sim: add command to set static service stats Maximiliano Sandoval
` (8 more replies)
0 siblings, 9 replies; 11+ messages in thread
From: Maximiliano Sandoval @ 2025-10-14 9:47 UTC (permalink / raw)
To: pve-devel
This series allows to:
- Set the cluster resource scheduler
- Set a node's static resources on creation and edit them after the fact
- Persist the current state of the simulator for future runs
- We sneak at the end a commit to add the build dir to .gitignore, please feel
free to not apply it if this is unwanted.
The next step would be to allow adding/removing nodes and setting/editing their
resource stats, but that can go in a follow-up.
Suggested-by: Daniel Kral <d.kral@proxmox.com>
Maximiliano Sandoval (9):
sim: add command to set static service stats
sim: add UI to set resource stats for new guests
sim: allow editing static resources of resource
sim: add helper to store datacenter configuration
sim: allow configuring datacenter configuration
sim: add method to persist current state
sim: add button to persist state to header bar
sim: set default cpu count and memory on new nodes
gitignore: ignore build directory
.gitignore | 1 +
src/PVE/HA/Sim/Hardware.pm | 102 ++++++++++++++++-
src/PVE/HA/Sim/RTHardware.pm | 207 +++++++++++++++++++++++++++++++++--
3 files changed, 300 insertions(+), 10 deletions(-)
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH ha-manager 1/9] sim: add command to set static service stats
2025-10-14 9:47 [pve-devel] [PATCH ha-manager 0/9] allow setting crs and service static resources Maximiliano Sandoval
@ 2025-10-14 9:47 ` Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 2/9] sim: add UI to set resource stats for new guests Maximiliano Sandoval
` (7 subsequent siblings)
8 siblings, 0 replies; 11+ messages in thread
From: Maximiliano Sandoval @ 2025-10-14 9:47 UTC (permalink / raw)
To: pve-devel
This will allow testing different cluster resource schedulers.
Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
src/PVE/HA/Sim/Hardware.pm | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/src/PVE/HA/Sim/Hardware.pm b/src/PVE/HA/Sim/Hardware.pm
index 9e8c799..4d84eeb 100644
--- a/src/PVE/HA/Sim/Hardware.pm
+++ b/src/PVE/HA/Sim/Hardware.pm
@@ -178,6 +178,25 @@ sub set_service_state {
return $conf;
}
+sub set_static_service_stats {
+ my ($self, $sid, $new_stats) = @_;
+
+ my $stats = $self->read_static_service_stats();
+ die "no such service '$sid'" if !$stats->{$sid};
+
+ if (my $memory = $new_stats->{maxmemory}) {
+ print "setting $sid memory to $memory\n" if $memory != $stats->{$sid}->{maxmemory};
+ $stats->{$sid}->{maxmemory} = $memory;
+ }
+
+ if (my $cpu = $new_stats->{maxcpu}) {
+ print "setting $sid memory to $cpu\n" if $cpu != $stats->{$sid}->{maxcpu};
+ $stats->{$sid}->{maxcpu} = $cpu;
+ }
+
+ $self->write_static_service_stats($stats);
+}
+
sub add_service {
my ($self, $sid, $opts, $running) = @_;
@@ -397,6 +416,14 @@ sub read_static_service_stats {
return $stats;
}
+sub write_static_service_stats {
+ my ($self, $stats) = @_;
+
+ my $filename = "$self->{statusdir}/static_service_stats";
+ eval { PVE::HA::Tools::write_json_to_file($filename, $stats) };
+ $self->log('error', "writing static service stats failed - $@") if $@;
+}
+
sub new {
my ($this, $testdir) = @_;
@@ -611,6 +638,7 @@ sub get_cfs_state {
# service <sid> stop <timeout>
# service <sid> lock/unlock [lockname]
# service <sid> add <node> [<request-state=started>] [<running=0>]
+# service <sid> set-static-stats <maxcpu> <maxmemory>
# service <sid> delete
sub sim_hardware_cmd {
my ($self, $cmdstr, $logid) = @_;
@@ -760,6 +788,15 @@ sub sim_hardware_cmd {
$params[2] || 0,
);
+ } elsif ($action eq 'set-static-stats') {
+ die "sim_hardware_cmd: missing maxcpu for '$action' command" if !$params[0];
+ die "sim_hardware_cmd: missing maxmemory for '$action' command" if !$params[1];
+
+ $self->set_static_service_stats(
+ $sid,
+ { maxcpu => $params[0], maxmemory => $params[1] },
+ );
+
} elsif ($action eq 'delete') {
$self->delete_service($sid);
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH ha-manager 2/9] sim: add UI to set resource stats for new guests
2025-10-14 9:47 [pve-devel] [PATCH ha-manager 0/9] allow setting crs and service static resources Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 1/9] sim: add command to set static service stats Maximiliano Sandoval
@ 2025-10-14 9:47 ` Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 3/9] sim: allow editing static resources of resource Maximiliano Sandoval
` (6 subsequent siblings)
8 siblings, 0 replies; 11+ messages in thread
From: Maximiliano Sandoval @ 2025-10-14 9:47 UTC (permalink / raw)
To: pve-devel
Adds a dialog which allow setting the maxmemory and maxcpu of an
existing HA service.
Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
src/PVE/HA/Sim/RTHardware.pm | 43 +++++++++++++++++++++++++++++++++++-
1 file changed, 42 insertions(+), 1 deletion(-)
diff --git a/src/PVE/HA/Sim/RTHardware.pm b/src/PVE/HA/Sim/RTHardware.pm
index 0dfe0b2..28c756e 100644
--- a/src/PVE/HA/Sim/RTHardware.pm
+++ b/src/PVE/HA/Sim/RTHardware.pm
@@ -24,6 +24,9 @@ use PVE::HA::LRM;
use PVE::HA::Sim::RTEnv;
use base qw(PVE::HA::Sim::Hardware);
+my $DEFAULT_MAXMEM = 4096;
+my $DEFAULT_MAXCPU = 4;
+
sub new {
my ($this, $testdir) = @_;
@@ -434,8 +437,41 @@ sub show_service_add_dialog {
$node_cb->set_active(0);
$grid->attach($node_cb, 2, 1, 1, 1);
+ my $cpu_label = Gtk3::Label->new('CPU Count');
+ $cpu_label->set_hexpand(1);
+ $cpu_label->set_xalign(0);
+
+ my $cpu_count_spin = Gtk3::SpinButton->new_with_range(1.0, 1024, 1.0);
+ $cpu_count_spin->set_value($DEFAULT_MAXCPU);
+
+ my $cpu_box = Gtk3::Box->new('horizontal', 6);
+ $cpu_box->add($cpu_label);
+ $cpu_box->add($cpu_count_spin);
+
+ my $memory_label = Gtk3::Label->new('Memory (MiB)');
+ $memory_label->set_hexpand(1);
+ $memory_label->set_xalign(0);
+
+ # There is an arbitrary limit of 10 TiB
+ my $memory_spin = Gtk3::SpinButton->new_with_range(1.0, 10485760.0, 1.0);
+ $memory_spin->set_value($DEFAULT_MAXMEM);
+
+ my $memory_box = Gtk3::Box->new('horizontal', 6);
+ $memory_box->add($memory_label);
+ $memory_box->add($memory_spin);
+
+ my $vbox = Gtk3::Box->new('vertical', 6);
+ $vbox->set_margin_start(6);
+ $vbox->set_margin_end(6);
+ $vbox->set_margin_top(6);
+ $vbox->set_margin_bottom(6);
+ $vbox->add($grid);
+ $vbox->add($cpu_box);
+ $vbox->add($memory_box);
+ $vbox->show_all();
+
my $contarea = $dialog->get_content_area();
- $contarea->add($grid);
+ $contarea->add($vbox);
$dialog->show_all();
my $res = $dialog->run();
@@ -443,6 +479,11 @@ sub show_service_add_dialog {
if (defined($res) && $res eq 'ok') {
my $sid = "$service_type:$service_id";
$self->sim_hardware_cmd("service $sid add $service_node", 'command');
+
+ my $maxcpu = $cpu_count_spin->get_value();
+ my $maxmemory = $memory_spin->get_value();
+ $self->sim_hardware_cmd("service $sid set-static-stats $maxcpu $maxmemory", 'command');
+
$self->add_service_to_gui($sid);
}
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH ha-manager 3/9] sim: allow editing static resources of resource
2025-10-14 9:47 [pve-devel] [PATCH ha-manager 0/9] allow setting crs and service static resources Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 1/9] sim: add command to set static service stats Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 2/9] sim: add UI to set resource stats for new guests Maximiliano Sandoval
@ 2025-10-14 9:47 ` Maximiliano Sandoval
2025-10-14 10:00 ` Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 4/9] sim: add helper to store datacenter configuration Maximiliano Sandoval
` (5 subsequent siblings)
8 siblings, 1 reply; 11+ messages in thread
From: Maximiliano Sandoval @ 2025-10-14 9:47 UTC (permalink / raw)
To: pve-devel
Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
src/PVE/HA/Sim/RTHardware.pm | 82 +++++++++++++++++++++++++++++++++++-
1 file changed, 80 insertions(+), 2 deletions(-)
diff --git a/src/PVE/HA/Sim/RTHardware.pm b/src/PVE/HA/Sim/RTHardware.pm
index 28c756e..e46cb91 100644
--- a/src/PVE/HA/Sim/RTHardware.pm
+++ b/src/PVE/HA/Sim/RTHardware.pm
@@ -490,6 +490,75 @@ sub show_service_add_dialog {
$dialog->destroy();
}
+sub show_service_edit_dialog {
+ my ($self, $sid) = @_;
+
+ my $stats = $self->read_static_service_stats();
+ my $resource_stats = $stats->{$sid}
+ // { maxcpu => $DEFAULT_MAXCPU, maxmemory => $DEFAULT_MAXMEM };
+
+ my $cpu_label = Gtk3::Label->new('CPU Count');
+ $cpu_label->set_hexpand(1);
+ $cpu_label->set_xalign(0);
+
+ my $cpu_count_spin = Gtk3::SpinButton->new_with_range(1.0, 1024, 1.0);
+ $cpu_count_spin->set_value($resource_stats->{maxcpu});
+
+ my $cpu_box = Gtk3::Box->new('horizontal', 6);
+ $cpu_box->add($cpu_label);
+ $cpu_box->add($cpu_count_spin);
+
+ my $memory_label = Gtk3::Label->new('Memory (MiB)');
+ $memory_label->set_hexpand(1);
+ $memory_label->set_xalign(0);
+
+ # There is an arbitrary limit of 10 TiB
+ my $memory_spin = Gtk3::SpinButton->new_with_range(1.0, 10485760.0, 1.0);
+ $memory_spin->set_value($resource_stats->{maxmemory});
+
+ my $memory_box = Gtk3::Box->new('horizontal', 6);
+ $memory_box->add($memory_label);
+ $memory_box->add($memory_spin);
+
+ my $vbox = Gtk3::Box->new('vertical', 6);
+ $vbox->add($cpu_box);
+ $vbox->add($memory_box);
+
+ my $dialog = Gtk3::Dialog->new();
+
+ $dialog->set_title("Migrate $sid");
+ $dialog->set_modal(1);
+ $dialog->set_transient_for($self->{main_window});
+
+ $dialog->add_button("_OK", 'ok');
+
+ my $content_area = $dialog->get_content_area();
+ $content_area->add($vbox);
+ $vbox->set_margin_start(12);
+ $vbox->set_margin_end(12);
+ $vbox->set_margin_top(12);
+ $vbox->set_margin_bottom(12);
+
+ $dialog->show_all();
+
+ $dialog->signal_connect(
+ 'response' => sub {
+ my ($dialog, $response) = @_;
+
+ if ($response eq 'ok') {
+ $self->set_static_service_stats(
+ $sid,
+ {
+ maxcpu => $cpu_count_spin->get_value(),
+ maxmemory => $memory_spin->get_value(),
+ },
+ );
+ }
+ $dialog->close();
+ },
+ );
+}
+
sub show_service_delete_dialog {
my ($self, $sid) = @_;
@@ -659,8 +728,17 @@ sub new_service_gui_entry {
$sgrid->attach($w, 4, $row, 1, 1);
$self->{service_gui}->{$sid}->{status_label} = $w;
+ my $edit_button = Gtk3::Button->new_from_icon_name('document-edit', 1);
+ $edit_button->set_tooltip_text('Edit static resources');
+ $sgrid->attach($edit_button, 5, $row, 1, 1);
+ $edit_button->signal_connect(
+ clicked => sub {
+ $self->show_service_edit_dialog($sid);
+ },
+ );
+
$w = Gtk3::Button->new_from_icon_name('edit-delete', 1);
- $sgrid->attach($w, 5, $row, 1, 1);
+ $sgrid->attach($w, 6, $row, 1, 1);
$w->signal_connect(
clicked => sub {
$self->show_service_delete_dialog($sid);
@@ -699,7 +777,7 @@ sub create_service_control {
}
$w = Gtk3::Button->new_from_icon_name('list-add', 1);
- $sgrid->attach($w, 5, $row, 1, 1);
+ $sgrid->attach($w, 6, $row, 1, 1);
$w->signal_connect(
clicked => sub {
$self->show_service_add_dialog();
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH ha-manager 4/9] sim: add helper to store datacenter configuration
2025-10-14 9:47 [pve-devel] [PATCH ha-manager 0/9] allow setting crs and service static resources Maximiliano Sandoval
` (2 preceding siblings ...)
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 3/9] sim: allow editing static resources of resource Maximiliano Sandoval
@ 2025-10-14 9:47 ` Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 5/9] sim: allow configuring " Maximiliano Sandoval
` (4 subsequent siblings)
8 siblings, 0 replies; 11+ messages in thread
From: Maximiliano Sandoval @ 2025-10-14 9:47 UTC (permalink / raw)
To: pve-devel
Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
src/PVE/HA/Sim/Hardware.pm | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/PVE/HA/Sim/Hardware.pm b/src/PVE/HA/Sim/Hardware.pm
index 4d84eeb..a0ce563 100644
--- a/src/PVE/HA/Sim/Hardware.pm
+++ b/src/PVE/HA/Sim/Hardware.pm
@@ -538,6 +538,13 @@ sub read_datacenter_conf {
return PVE::HA::Tools::read_json_from_file($filename, {});
}
+sub write_datacenter_conf {
+ my ($self, $conf) = @_;
+
+ my $filename = "$self->{statusdir}/datacenter.cfg";
+ PVE::HA::Tools::write_json_to_file($filename, $conf);
+}
+
sub global_lock {
my ($self, $code, @param) = @_;
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH ha-manager 5/9] sim: allow configuring datacenter configuration
2025-10-14 9:47 [pve-devel] [PATCH ha-manager 0/9] allow setting crs and service static resources Maximiliano Sandoval
` (3 preceding siblings ...)
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 4/9] sim: add helper to store datacenter configuration Maximiliano Sandoval
@ 2025-10-14 9:47 ` Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 6/9] sim: add method to persist current state Maximiliano Sandoval
` (3 subsequent siblings)
8 siblings, 0 replies; 11+ messages in thread
From: Maximiliano Sandoval @ 2025-10-14 9:47 UTC (permalink / raw)
To: pve-devel
Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
src/PVE/HA/Sim/RTHardware.pm | 60 +++++++++++++++++++++++++++++++++++-
1 file changed, 59 insertions(+), 1 deletion(-)
diff --git a/src/PVE/HA/Sim/RTHardware.pm b/src/PVE/HA/Sim/RTHardware.pm
index e46cb91..5b7c765 100644
--- a/src/PVE/HA/Sim/RTHardware.pm
+++ b/src/PVE/HA/Sim/RTHardware.pm
@@ -290,6 +290,56 @@ sub set_network_state {
$self->sim_hardware_cmd("network $node $action");
}
+sub create_datacenter_control {
+ my ($self) = @_;
+
+ my $active = 0;
+ my $initial_conf = $self->read_datacenter_conf();
+ if (my $crs = $initial_conf->{crs}) {
+ if (my $ha = $crs->{ha}) {
+ $active = 1 if $ha eq 'static';
+ }
+ }
+
+ my $crs_types = ['basic', 'static'];
+
+ my $label = Gtk3::Label->new('Cluster Resource Scheduler');
+ $label->set_hexpand(1);
+ $label->set_xalign(0.0);
+
+ my $crs_combo = Gtk3::ComboBoxText->new();
+ $crs_combo->set_valign('center');
+ foreach my $type (@$crs_types) {
+ $crs_combo->append_text($type);
+ }
+ $crs_combo->set_active($active);
+ $crs_combo->signal_connect(
+ 'notify::active' => sub {
+ my $combo = shift;
+
+ my $active = $combo->get_active();
+ return if $active < 0;
+
+ my $ha_type = $crs_types->[$active];
+
+ my $conf = $self->read_datacenter_conf();
+ $conf->{crs}->{ha} = $ha_type;
+ $self->write_datacenter_conf($conf);
+ },
+ );
+
+ my $hbox = Gtk3::Box->new('horizontal', 0);
+ $hbox->set_margin_start(6);
+ $hbox->set_margin_end(6);
+ $hbox->set_margin_top(6);
+ $hbox->set_margin_bottom(6);
+ $hbox->add($label);
+ $hbox->add($crs_combo);
+ $hbox->show_all();
+
+ return $hbox;
+}
+
sub create_node_control {
my ($self) = @_;
@@ -854,10 +904,18 @@ sub create_main_window {
my $vbox = Gtk3::VBox->new(0, 0);
$grid->attach($vbox, 1, 0, 1, 1);
+ my $datacenter_control = $self->create_datacenter_control();
+ $vbox->pack_start($datacenter_control, 0, 0, 0);
+
+ my $sep = Gtk3::Separator->new('horizontal');
+ $sep->set('margin-top', 10);
+ $sep->set_vexpand(0);
+ $vbox->pack_start($sep, 0, 0, 0);
+
my $ngrid = $self->create_node_control();
$vbox->pack_start($ngrid, 0, 0, 0);
- my $sep = Gtk3::HSeparator->new;
+ $sep = Gtk3::Separator->new('horizontal');
$sep->set('margin-top', 10);
$vbox->pack_start($sep, 0, 0, 0);
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH ha-manager 6/9] sim: add method to persist current state
2025-10-14 9:47 [pve-devel] [PATCH ha-manager 0/9] allow setting crs and service static resources Maximiliano Sandoval
` (4 preceding siblings ...)
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 5/9] sim: allow configuring " Maximiliano Sandoval
@ 2025-10-14 9:47 ` Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 7/9] sim: add button to persist state to header bar Maximiliano Sandoval
` (2 subsequent siblings)
8 siblings, 0 replies; 11+ messages in thread
From: Maximiliano Sandoval @ 2025-10-14 9:47 UTC (permalink / raw)
To: pve-devel
This method is essentially `new()` but in reverse.
This allows us to save the current state in the simulator and start from
it instead of using the default state.
Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
src/PVE/HA/Sim/Hardware.pm | 52 ++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/src/PVE/HA/Sim/Hardware.pm b/src/PVE/HA/Sim/Hardware.pm
index a0ce563..0747dde 100644
--- a/src/PVE/HA/Sim/Hardware.pm
+++ b/src/PVE/HA/Sim/Hardware.pm
@@ -507,6 +507,58 @@ sub new {
return $self;
}
+sub save_state {
+ my ($self, $testdir) = @_;
+
+ die "missing testdir" if !$testdir;
+
+ die "testdir '$testdir' does not exist or is not a directory!\n"
+ if !-d $testdir;
+
+ my $statusdir = $self->{statusdir};
+ my $cstatus = $self->read_hardware_status_nolock();
+
+ foreach my $node (sort keys %$cstatus) {
+ if (-f "$statusdir/service_status_$node") {
+ copy("$statusdir/service_status_$node", "$testdir/service_status_$node");
+ }
+ }
+
+ if (-f "$statusdir/static_service_stats") {
+ copy("$statusdir/static_service_stats", "$testdir/static_service_stats");
+ }
+
+ if (-f "$statusdir/datacenter.cfg") {
+ copy("$statusdir/datacenter.cfg", "$testdir/datacenter.cfg");
+ }
+
+ if (-f "$statusdir/fence.cfg") {
+ copy("$statusdir/fence.cfg", "$testdir/fence.cfg");
+ }
+
+ if (-f "$statusdir/hardware_status") {
+ copy("$statusdir/hardware_status", "$testdir/hardware_status");
+ }
+
+ if (-f "$statusdir/service_config") {
+ copy("$statusdir/service_config", "$testdir/service_config");
+ }
+
+ if (-f "$statusdir/groups") {
+ copy("$statusdir/groups", "$testdir/groups");
+ }
+
+ if (-f "$statusdir/rules_config") {
+ copy("$statusdir/rules_config", "$testdir/rules_config");
+ }
+
+ if (-f "$statusdir/manager_status") {
+ copy("$statusdir/manager_status", "$testdir/manager_status");
+ }
+
+ print "current state saved\n";
+}
+
sub get_time {
my ($self) = @_;
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH ha-manager 7/9] sim: add button to persist state to header bar
2025-10-14 9:47 [pve-devel] [PATCH ha-manager 0/9] allow setting crs and service static resources Maximiliano Sandoval
` (5 preceding siblings ...)
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 6/9] sim: add method to persist current state Maximiliano Sandoval
@ 2025-10-14 9:47 ` Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 8/9] sim: set default cpu count and memory on new nodes Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 9/9] gitignore: ignore build directory Maximiliano Sandoval
8 siblings, 0 replies; 11+ messages in thread
From: Maximiliano Sandoval @ 2025-10-14 9:47 UTC (permalink / raw)
To: pve-devel
Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
src/PVE/HA/Sim/RTHardware.pm | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/src/PVE/HA/Sim/RTHardware.pm b/src/PVE/HA/Sim/RTHardware.pm
index 5b7c765..a9bba4b 100644
--- a/src/PVE/HA/Sim/RTHardware.pm
+++ b/src/PVE/HA/Sim/RTHardware.pm
@@ -48,7 +48,7 @@ sub new {
$d->{lrm_env} = PVE::HA::Env->new('PVE::HA::Sim::RTEnv', $node, $self, 'lrm');
}
- $self->create_main_window();
+ $self->create_main_window($testdir);
return $self;
}
@@ -886,10 +886,26 @@ sub create_log_view {
}
sub create_main_window {
- my ($self) = @_;
+ my ($self, $testdir) = @_;
+
+ my $title = 'Proxmox HA Simulator';
my $window = Gtk3::Window->new();
- $window->set_title("Proxmox HA Simulator");
+ $window->set_title($title);
+
+ my $save_button = Gtk3::Button->new('Save');
+ $save_button->signal_connect(
+ clicked => sub {
+ $self->save_state($testdir);
+ },
+ );
+
+ my $header_bar = Gtk3::HeaderBar->new();
+ $header_bar->pack_end($save_button);
+ $header_bar->set_title($title);
+ $header_bar->set_show_close_button(1);
+
+ $window->set_titlebar($header_bar);
$window->signal_connect(destroy => sub { Gtk3::main_quit(); });
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH ha-manager 8/9] sim: set default cpu count and memory on new nodes
2025-10-14 9:47 [pve-devel] [PATCH ha-manager 0/9] allow setting crs and service static resources Maximiliano Sandoval
` (6 preceding siblings ...)
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 7/9] sim: add button to persist state to header bar Maximiliano Sandoval
@ 2025-10-14 9:47 ` Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 9/9] gitignore: ignore build directory Maximiliano Sandoval
8 siblings, 0 replies; 11+ messages in thread
From: Maximiliano Sandoval @ 2025-10-14 9:47 UTC (permalink / raw)
To: pve-devel
Otherwise when switching to the static crs a warning would be thrown.
Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
src/PVE/HA/Sim/Hardware.pm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/PVE/HA/Sim/Hardware.pm b/src/PVE/HA/Sim/Hardware.pm
index 0747dde..2b63f5a 100644
--- a/src/PVE/HA/Sim/Hardware.pm
+++ b/src/PVE/HA/Sim/Hardware.pm
@@ -471,9 +471,9 @@ sub new {
|| die "Copy failed: $!\n";
} else {
my $cstatus = {
- node1 => { power => 'off', network => 'off' },
- node2 => { power => 'off', network => 'off' },
- node3 => { power => 'off', network => 'off' },
+ node1 => { power => 'off', network => 'off', cpus => 24, memory => 131072 },
+ node2 => { power => 'off', network => 'off', cpus => 24, memory => 131072 },
+ node3 => { power => 'off', network => 'off', cpus => 24, memory => 131072 },
};
$self->write_hardware_status_nolock($cstatus);
}
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH ha-manager 9/9] gitignore: ignore build directory
2025-10-14 9:47 [pve-devel] [PATCH ha-manager 0/9] allow setting crs and service static resources Maximiliano Sandoval
` (7 preceding siblings ...)
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 8/9] sim: set default cpu count and memory on new nodes Maximiliano Sandoval
@ 2025-10-14 9:47 ` Maximiliano Sandoval
8 siblings, 0 replies; 11+ messages in thread
From: Maximiliano Sandoval @ 2025-10-14 9:47 UTC (permalink / raw)
To: pve-devel
Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index 35de63f..0a6dc7e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@
/src/test/fence_cfgs/*.cfg.commands
/src/test/fence_cfgs/*.cfg.write
/src/test/rules_cfgs/*.cfg.output
+/pve-ha-manager-[0-9]*/
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [pve-devel] [PATCH ha-manager 3/9] sim: allow editing static resources of resource
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 3/9] sim: allow editing static resources of resource Maximiliano Sandoval
@ 2025-10-14 10:00 ` Maximiliano Sandoval
0 siblings, 0 replies; 11+ messages in thread
From: Maximiliano Sandoval @ 2025-10-14 10:00 UTC (permalink / raw)
To: pve-devel
Maximiliano Sandoval <m.sandoval@proxmox.com> writes:
> Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
> ---
> src/PVE/HA/Sim/RTHardware.pm | 82 +++++++++++++++++++++++++++++++++++-
> 1 file changed, 80 insertions(+), 2 deletions(-)
>
> diff --git a/src/PVE/HA/Sim/RTHardware.pm b/src/PVE/HA/Sim/RTHardware.pm
> index 28c756e..e46cb91 100644
> --- a/src/PVE/HA/Sim/RTHardware.pm
> +++ b/src/PVE/HA/Sim/RTHardware.pm
> @@ -490,6 +490,75 @@ sub show_service_add_dialog {
> $dialog->destroy();
> }
>
> +sub show_service_edit_dialog {
> + my ($self, $sid) = @_;
> +
> + my $stats = $self->read_static_service_stats();
> + my $resource_stats = $stats->{$sid}
> + // { maxcpu => $DEFAULT_MAXCPU, maxmemory => $DEFAULT_MAXMEM };
> +
> + my $cpu_label = Gtk3::Label->new('CPU Count');
> + $cpu_label->set_hexpand(1);
> + $cpu_label->set_xalign(0);
> +
> + my $cpu_count_spin = Gtk3::SpinButton->new_with_range(1.0, 1024, 1.0);
> + $cpu_count_spin->set_value($resource_stats->{maxcpu});
> +
> + my $cpu_box = Gtk3::Box->new('horizontal', 6);
> + $cpu_box->add($cpu_label);
> + $cpu_box->add($cpu_count_spin);
> +
> + my $memory_label = Gtk3::Label->new('Memory (MiB)');
> + $memory_label->set_hexpand(1);
> + $memory_label->set_xalign(0);
> +
> + # There is an arbitrary limit of 10 TiB
> + my $memory_spin = Gtk3::SpinButton->new_with_range(1.0, 10485760.0, 1.0);
> + $memory_spin->set_value($resource_stats->{maxmemory});
> +
> + my $memory_box = Gtk3::Box->new('horizontal', 6);
> + $memory_box->add($memory_label);
> + $memory_box->add($memory_spin);
> +
> + my $vbox = Gtk3::Box->new('vertical', 6);
> + $vbox->add($cpu_box);
> + $vbox->add($memory_box);
> +
> + my $dialog = Gtk3::Dialog->new();
> +
> + $dialog->set_title("Migrate $sid");
This should be Edit instead.
> + $dialog->set_modal(1);
> + $dialog->set_transient_for($self->{main_window});
> +
> + $dialog->add_button("_OK", 'ok');
> +
> + my $content_area = $dialog->get_content_area();
> + $content_area->add($vbox);
> + $vbox->set_margin_start(12);
> + $vbox->set_margin_end(12);
> + $vbox->set_margin_top(12);
> + $vbox->set_margin_bottom(12);
> +
> + $dialog->show_all();
> +
> + $dialog->signal_connect(
> + 'response' => sub {
> + my ($dialog, $response) = @_;
> +
> + if ($response eq 'ok') {
> + $self->set_static_service_stats(
> + $sid,
> + {
> + maxcpu => $cpu_count_spin->get_value(),
> + maxmemory => $memory_spin->get_value(),
> + },
> + );
> + }
> + $dialog->close();
> + },
> + );
> +}
> +
> sub show_service_delete_dialog {
> my ($self, $sid) = @_;
>
> @@ -659,8 +728,17 @@ sub new_service_gui_entry {
> $sgrid->attach($w, 4, $row, 1, 1);
> $self->{service_gui}->{$sid}->{status_label} = $w;
>
> + my $edit_button = Gtk3::Button->new_from_icon_name('document-edit', 1);
> + $edit_button->set_tooltip_text('Edit static resources');
> + $sgrid->attach($edit_button, 5, $row, 1, 1);
> + $edit_button->signal_connect(
> + clicked => sub {
> + $self->show_service_edit_dialog($sid);
> + },
> + );
> +
> $w = Gtk3::Button->new_from_icon_name('edit-delete', 1);
> - $sgrid->attach($w, 5, $row, 1, 1);
> + $sgrid->attach($w, 6, $row, 1, 1);
> $w->signal_connect(
> clicked => sub {
> $self->show_service_delete_dialog($sid);
> @@ -699,7 +777,7 @@ sub create_service_control {
> }
>
> $w = Gtk3::Button->new_from_icon_name('list-add', 1);
> - $sgrid->attach($w, 5, $row, 1, 1);
> + $sgrid->attach($w, 6, $row, 1, 1);
> $w->signal_connect(
> clicked => sub {
> $self->show_service_add_dialog();
--
Maximiliano
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2025-10-14 10:00 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-10-14 9:47 [pve-devel] [PATCH ha-manager 0/9] allow setting crs and service static resources Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 1/9] sim: add command to set static service stats Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 2/9] sim: add UI to set resource stats for new guests Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 3/9] sim: allow editing static resources of resource Maximiliano Sandoval
2025-10-14 10:00 ` Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 4/9] sim: add helper to store datacenter configuration Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 5/9] sim: allow configuring " Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 6/9] sim: add method to persist current state Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 7/9] sim: add button to persist state to header bar Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 8/9] sim: set default cpu count and memory on new nodes Maximiliano Sandoval
2025-10-14 9:47 ` [pve-devel] [PATCH ha-manager 9/9] gitignore: ignore build directory Maximiliano Sandoval
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox