From d425ad55a23e90952a5ade7edc6cee106efc014d Mon Sep 17 00:00:00 2001 From: paspo Date: Tue, 27 Sep 2016 15:59:16 +0200 Subject: [PATCH] global hosts actions --- .../events/actions/doraemon-reboot-all | 20 +++++++++++ .../events/actions/doraemon-shutdown-all | 20 +++++++++++ .../e-smith/events/actions/doraemon-wake-all | 21 ++++++++++++ .../S50doraemon-reboot-all | 1 + .../S50doraemon-shutdown-all | 1 + .../doraemon-wake-all/S50doraemon-wake-all | 1 + .../en/NethServer_Module_Doraemon.php | 3 ++ .../it/NethServer_Module_Doraemon.php | 3 ++ .../NethServer/Module/Doraemon/Hosts.php | 3 ++ .../Module/Doraemon/Hosts/TogglePowerAll.php | 34 +++++++++++++++++++ .../Doraemon/Hosts/TogglePowerAll.php | 21 ++++++++++++ 11 files changed, 128 insertions(+) create mode 100755 root/etc/e-smith/events/actions/doraemon-reboot-all create mode 100755 root/etc/e-smith/events/actions/doraemon-shutdown-all create mode 100755 root/etc/e-smith/events/actions/doraemon-wake-all create mode 120000 root/etc/e-smith/events/doraemon-reboot-all/S50doraemon-reboot-all create mode 120000 root/etc/e-smith/events/doraemon-shutdown-all/S50doraemon-shutdown-all create mode 120000 root/etc/e-smith/events/doraemon-wake-all/S50doraemon-wake-all create mode 100644 root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts/TogglePowerAll.php create mode 100644 root/usr/share/nethesis/NethServer/Template/Doraemon/Hosts/TogglePowerAll.php diff --git a/root/etc/e-smith/events/actions/doraemon-reboot-all b/root/etc/e-smith/events/actions/doraemon-reboot-all new file mode 100755 index 0000000..1e8d739 --- /dev/null +++ b/root/etc/e-smith/events/actions/doraemon-reboot-all @@ -0,0 +1,20 @@ +#!/usr/bin/perl -w + +package esmith; + +use strict; +use Errno; +use esmith::DB::db; +use IO::File; +use English; + +my $db_hosts = esmith::DB::db->open('hosts') || die("Could not open e-smith db (" . esmith::DB::db->error . ")\n"); + +my @items = $db_hosts->get_all('remote'); +foreach my $item (@items) { + my $hostName = $item->key; + system("/usr/bin/sudo -u amgmt /usr/bin/ssh -o StrictHostKeyChecking=no amgmt\@$hostName /usr/bin/sudo /sbin/reboot &") == 0 + or die "Error rebooting $hostName"; +} + +exit 0; diff --git a/root/etc/e-smith/events/actions/doraemon-shutdown-all b/root/etc/e-smith/events/actions/doraemon-shutdown-all new file mode 100755 index 0000000..5df4213 --- /dev/null +++ b/root/etc/e-smith/events/actions/doraemon-shutdown-all @@ -0,0 +1,20 @@ +#!/usr/bin/perl -w + +package esmith; + +use strict; +use Errno; +use esmith::DB::db; +use IO::File; +use English; + +my $db_hosts = esmith::DB::db->open('hosts') || die("Could not open e-smith db (" . esmith::DB::db->error . ")\n"); + +my @items = $db_hosts->get_all('remote'); +foreach my $item (@items) { + my $hostName = $item->key; + system("/usr/bin/sudo -u amgmt /usr/bin/ssh -o StrictHostKeyChecking=no amgmt\@$hostName /usr/bin/sudo /sbin/poweroff &") == 0 + or die "Error shutting down $hostName"; +} + +exit 0; diff --git a/root/etc/e-smith/events/actions/doraemon-wake-all b/root/etc/e-smith/events/actions/doraemon-wake-all new file mode 100755 index 0000000..39f97e2 --- /dev/null +++ b/root/etc/e-smith/events/actions/doraemon-wake-all @@ -0,0 +1,21 @@ +#!/usr/bin/perl -w + +package esmith; + +use strict; +use Errno; +use esmith::DB::db; +use IO::File; +use English; + +my $db_hosts = esmith::DB::db->open('hosts') || die("Could not open e-smith db (" . esmith::DB::db->error . ")\n"); + +my @items = $db_hosts->get_all('remote'); +foreach my $item (@items) { + my $hostName = $item->key; + my $mac = $item->prop('MacAddress'); + system("/sbin/ether-wake -i lan0 $mac &") == 0 + or die "Error waking up $hostName"; +} + +exit 0; diff --git a/root/etc/e-smith/events/doraemon-reboot-all/S50doraemon-reboot-all b/root/etc/e-smith/events/doraemon-reboot-all/S50doraemon-reboot-all new file mode 120000 index 0000000..d03ca78 --- /dev/null +++ b/root/etc/e-smith/events/doraemon-reboot-all/S50doraemon-reboot-all @@ -0,0 +1 @@ +../actions/doraemon-reboot-all \ No newline at end of file diff --git a/root/etc/e-smith/events/doraemon-shutdown-all/S50doraemon-shutdown-all b/root/etc/e-smith/events/doraemon-shutdown-all/S50doraemon-shutdown-all new file mode 120000 index 0000000..c2cdf5f --- /dev/null +++ b/root/etc/e-smith/events/doraemon-shutdown-all/S50doraemon-shutdown-all @@ -0,0 +1 @@ +../actions/doraemon-shutdown-all \ No newline at end of file diff --git a/root/etc/e-smith/events/doraemon-wake-all/S50doraemon-wake-all b/root/etc/e-smith/events/doraemon-wake-all/S50doraemon-wake-all new file mode 120000 index 0000000..6642a73 --- /dev/null +++ b/root/etc/e-smith/events/doraemon-wake-all/S50doraemon-wake-all @@ -0,0 +1 @@ +../actions/doraemon-wake-all \ No newline at end of file diff --git a/root/usr/share/nethesis/NethServer/Language/en/NethServer_Module_Doraemon.php b/root/usr/share/nethesis/NethServer/Language/en/NethServer_Module_Doraemon.php index 9c70ab3..6f87ce3 100644 --- a/root/usr/share/nethesis/NethServer/Language/en/NethServer_Module_Doraemon.php +++ b/root/usr/share/nethesis/NethServer/Language/en/NethServer_Module_Doraemon.php @@ -8,3 +8,6 @@ $L['MacAddress_label'] = 'MAC Address'; $L['shutdown_label'] = 'Shutdown'; $L['reboot_label'] = 'Reboot'; $L['wake_label'] = 'Wake Up'; +$L['shutdown-all_label'] = 'Shutdown all'; +$L['reboot-all_label'] = 'Reboot all'; +$L['wake-all_label'] = 'Wake Up all'; diff --git a/root/usr/share/nethesis/NethServer/Language/it/NethServer_Module_Doraemon.php b/root/usr/share/nethesis/NethServer/Language/it/NethServer_Module_Doraemon.php index 812bcea..26e3dff 100644 --- a/root/usr/share/nethesis/NethServer/Language/it/NethServer_Module_Doraemon.php +++ b/root/usr/share/nethesis/NethServer/Language/it/NethServer_Module_Doraemon.php @@ -8,3 +8,6 @@ $L['MacAddress_label'] = 'MAC Address'; $L['shutdown_label'] = 'Spegni'; $L['reboot_label'] = 'Riavvia'; $L['wake_label'] = 'Accendi'; +$L['shutdown-all_label'] = 'Spegni tutti'; +$L['reboot-all_label'] = 'Riavvia tutti'; +$L['wake-all_label'] = 'Accendi tutti'; diff --git a/root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts.php b/root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts.php index 10c05ce..e898502 100644 --- a/root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts.php +++ b/root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts.php @@ -24,6 +24,9 @@ class Hosts extends \Nethgui\Controller\TableController ->addRowAction(new \NethServer\Module\Doraemon\Hosts\TogglePower('shutdown')) ->addRowAction(new \NethServer\Module\Doraemon\Hosts\Modify('delete')) ->addTableAction(new \NethServer\Module\Doraemon\Hosts\Modify('create')) + ->addTableAction(new \NethServer\Module\Doraemon\Hosts\TogglePowerAll('wake-all')) + ->addTableAction(new \NethServer\Module\Doraemon\Hosts\TogglePowerAll('reboot-all')) + ->addTableAction(new \NethServer\Module\Doraemon\Hosts\TogglePowerAll('shutdown-all')) ->addTableAction(new \Nethgui\Controller\Table\Help('Help')) ; diff --git a/root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts/TogglePowerAll.php b/root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts/TogglePowerAll.php new file mode 100644 index 0000000..b1c7a26 --- /dev/null +++ b/root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts/TogglePowerAll.php @@ -0,0 +1,34 @@ +getRequest()->isMutation()) { + return; + } + + $this->getPlatform()->signalEvent(sprintf('doraemon-%s@post', $this->getIdentifier())); + } + +} diff --git a/root/usr/share/nethesis/NethServer/Template/Doraemon/Hosts/TogglePowerAll.php b/root/usr/share/nethesis/NethServer/Template/Doraemon/Hosts/TogglePowerAll.php new file mode 100644 index 0000000..2d9968f --- /dev/null +++ b/root/usr/share/nethesis/NethServer/Template/Doraemon/Hosts/TogglePowerAll.php @@ -0,0 +1,21 @@ +requireFlag($view::INSET_DIALOG); + +if ($view->getModule()->getIdentifier() == 'shutdown-all') { + $headerText = $T('Shutdown all hosts'); + $panelText = $T('Proceed with all hosts shutdown?'); +} elseif ($view->getModule()->getIdentifier() == 'reboot-all') { + $headerText = $T('Reboot all hosts'); + $panelText = $T('Proceed with all hosts reboot?'); +} else { + $headerText = $T('Wakeup all hosts'); + $panelText = $T('Proceed with all hosts wakeup?'); +} + +echo $view->header()->setAttribute('template', $headerText); +// TODO: add a text label here +// echo $view->textLabel()->setAttribute('template', $panelText); +echo $view->buttonList() + ->insert($view->button('Yes', $view::BUTTON_SUBMIT)) + ->insert($view->button('No', $view::BUTTON_CANCEL)->setAttribute('value', $view['Cancel'])) +;