forked from LibreSchool/doraemon
host actions
This commit is contained in:
parent
3d81fd12e3
commit
34457e9692
@ -9,6 +9,7 @@ BuildRoot: %{_tmppath}/%{name}-root
|
|||||||
BuildRequires: nethserver-devtools > 1.0.1
|
BuildRequires: nethserver-devtools > 1.0.1
|
||||||
Requires: httpd, php, sudo, php-xml, php-mcrypt
|
Requires: httpd, php, sudo, php-xml, php-mcrypt
|
||||||
Requires: nethserver-base, nethserver-php
|
Requires: nethserver-base, nethserver-php
|
||||||
|
Requires: net-tools
|
||||||
Requires: upstart
|
Requires: upstart
|
||||||
Source0: doraemon-1.3.0.tar.gz
|
Source0: doraemon-1.3.0.tar.gz
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
|
34
root/etc/e-smith/events/actions/doraemon-reboot
Executable file
34
root/etc/e-smith/events/actions/doraemon-reboot
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#!/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 $event = $ARGV [0];
|
||||||
|
|
||||||
|
defined $ARGV[1] || die "No host specied";
|
||||||
|
my $host = $ARGV[1];
|
||||||
|
|
||||||
|
reboot_host($host);
|
||||||
|
|
||||||
|
exit 0;
|
||||||
|
|
||||||
|
sub reboot_host
|
||||||
|
{
|
||||||
|
my ($hostName) = @_;
|
||||||
|
#------------------------------------------------------------
|
||||||
|
# Reboot the host
|
||||||
|
#------------------------------------------------------------
|
||||||
|
|
||||||
|
my $h = $db_hosts->get($hostName) or die "No host record for user $hostName";
|
||||||
|
|
||||||
|
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";
|
||||||
|
|
||||||
|
}
|
34
root/etc/e-smith/events/actions/doraemon-shutdown
Executable file
34
root/etc/e-smith/events/actions/doraemon-shutdown
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#!/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 $event = $ARGV [0];
|
||||||
|
|
||||||
|
defined $ARGV[1] || die "No host specied";
|
||||||
|
my $host = $ARGV[1];
|
||||||
|
|
||||||
|
shutdown_host($host);
|
||||||
|
|
||||||
|
exit 0;
|
||||||
|
|
||||||
|
sub shutdown_host
|
||||||
|
{
|
||||||
|
my ($hostName) = @_;
|
||||||
|
#------------------------------------------------------------
|
||||||
|
# Shutdown the host
|
||||||
|
#------------------------------------------------------------
|
||||||
|
|
||||||
|
my $h = $db_hosts->get($hostName) or die "No host record for user $hostName";
|
||||||
|
|
||||||
|
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";
|
||||||
|
|
||||||
|
}
|
35
root/etc/e-smith/events/actions/doraemon-wake
Executable file
35
root/etc/e-smith/events/actions/doraemon-wake
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
#!/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 $event = $ARGV [0];
|
||||||
|
|
||||||
|
defined $ARGV[1] || die "No host specied";
|
||||||
|
my $host = $ARGV[1];
|
||||||
|
|
||||||
|
wake_host($host);
|
||||||
|
|
||||||
|
exit 0;
|
||||||
|
|
||||||
|
sub wake_host
|
||||||
|
{
|
||||||
|
my ($hostName) = @_;
|
||||||
|
#------------------------------------------------------------
|
||||||
|
# Wake up the host
|
||||||
|
#------------------------------------------------------------
|
||||||
|
|
||||||
|
my $h = $db_hosts->get($hostName) or die "No host record for user $hostName";
|
||||||
|
my $client = $h[0];
|
||||||
|
my $mac = $client->prop('MacAddress');
|
||||||
|
system("/sbin/ether-wake -i lan0 $mac") == 0
|
||||||
|
or die "Error waking up $hostName";
|
||||||
|
|
||||||
|
}
|
1
root/etc/e-smith/events/doraemon-reboot/S50doraemon-reboot
Symbolic link
1
root/etc/e-smith/events/doraemon-reboot/S50doraemon-reboot
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../actions/doraemon-reboot
|
1
root/etc/e-smith/events/doraemon-shutdown/S50doraemon-shutdown
Symbolic link
1
root/etc/e-smith/events/doraemon-shutdown/S50doraemon-shutdown
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../actions/doraemon-shutdown
|
1
root/etc/e-smith/events/doraemon-wake/S50doraemon-wake
Symbolic link
1
root/etc/e-smith/events/doraemon-wake/S50doraemon-wake
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../actions/doraemon-wake
|
@ -1,12 +1,15 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/* /usr/share/nethesis/NethServer/Language/en/NethServer_Module_Doraemon.php */
|
/* /usr/share/nethesis/NethServer/Language/en/NethServer_Module_Doraemon.php */
|
||||||
|
|
||||||
$L['Doraemon_Title'] = 'Doraemon';
|
$L['Doraemon_Title'] = 'Doraemon';
|
||||||
$L['Key_label'] = 'Hostname';
|
$L['Key_label'] = 'Hostname';
|
||||||
$L['hostname_label'] = 'Hostname';
|
$L['hostname_label'] = 'Hostname';
|
||||||
$L['Role_label'] = 'Role';
|
$L['Role_label'] = 'Role';
|
||||||
$L['MacAddress_label'] = 'MAC Address';
|
$L['MacAddress_label'] = 'MAC Address';
|
||||||
$L['Hosts_title'] = 'Hosts';
|
$L['Hosts_Title'] = 'Hosts';
|
||||||
$L['Create_Host_Header'] = 'Create a new host';
|
$L['Create_Host_Header'] = 'Create a new host';
|
||||||
$L['Update_Host_Header'] = 'Update host "${0}"';
|
$L['Update_Host_Header'] = 'Update host "${0}"';
|
||||||
|
$L['shutdown_label'] = 'Shutdown';
|
||||||
|
$L['reboot_label'] = 'Reboot';
|
||||||
|
$L['wake_label'] = 'Wake Up';
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/* /usr/share/nethesis/NethServer/Language/it/NethServer_Module_Doraemon.php */
|
/* /usr/share/nethesis/NethServer/Language/it/NethServer_Module_Doraemon.php */
|
||||||
|
|
||||||
$L['Doraemon_Title'] = 'Doraemon';
|
$L['Doraemon_Title'] = 'Doraemon';
|
||||||
$L['Key_label'] = 'Hostname';
|
$L['Key_label'] = 'Hostname';
|
||||||
$L['hostname_label'] = 'Hostname';
|
$L['hostname_label'] = 'Hostname';
|
||||||
$L['Role_label'] = 'Ruolo';
|
$L['Role_label'] = 'Ruolo';
|
||||||
$L['MacAddress_label'] = 'MAC Address';
|
$L['MacAddress_label'] = 'MAC Address';
|
||||||
$L['Hosts_title'] = 'Hosts';
|
$L['Hosts_Title'] = 'Hosts';
|
||||||
$L['Create_Host_Header'] = 'Crea un nuovo host';
|
$L['Create_Host_Header'] = 'Crea un nuovo host';
|
||||||
$L['Update_Host_Header'] = 'Modifica il nome host "${0}"';
|
$L['Update_Host_Header'] = 'Modifica il nome host "${0}"';
|
||||||
|
$L['shutdown_label'] = 'Spegni';
|
||||||
|
$L['reboot_label'] = 'Rivvia';
|
||||||
|
$L['wake_label'] = 'Accendi';
|
||||||
|
@ -18,11 +18,10 @@ class Hosts extends \Nethgui\Controller\TableController
|
|||||||
$this
|
$this
|
||||||
->setTableAdapter($this->getPlatform()->getTableAdapter('hosts', 'remote'))
|
->setTableAdapter($this->getPlatform()->getTableAdapter('hosts', 'remote'))
|
||||||
->setColumns($columns)
|
->setColumns($columns)
|
||||||
// TODO:
|
|
||||||
// ->addRowAction(new \NethServer\Module\Doraemon\Hosts\Modify('wake'))
|
|
||||||
// ->addRowAction(new \NethServer\Module\Doraemon\Hosts\Modify('reboot'))
|
|
||||||
// ->addRowAction(new \NethServer\Module\Doraemon\Hosts\Modify('shutdown'))
|
|
||||||
->addRowAction(new \NethServer\Module\Doraemon\Hosts\Modify('update'))
|
->addRowAction(new \NethServer\Module\Doraemon\Hosts\Modify('update'))
|
||||||
|
->addRowAction(new \NethServer\Module\Doraemon\Hosts\TogglePower('wake'))
|
||||||
|
->addRowAction(new \NethServer\Module\Doraemon\Hosts\TogglePower('reboot'))
|
||||||
|
->addRowAction(new \NethServer\Module\Doraemon\Hosts\TogglePower('shutdown'))
|
||||||
->addRowAction(new \NethServer\Module\Doraemon\Hosts\Modify('delete'))
|
->addRowAction(new \NethServer\Module\Doraemon\Hosts\Modify('delete'))
|
||||||
->addTableAction(new \NethServer\Module\Doraemon\Hosts\Modify('create'))
|
->addTableAction(new \NethServer\Module\Doraemon\Hosts\Modify('create'))
|
||||||
->addTableAction(new \Nethgui\Controller\Table\Help('Help'))
|
->addTableAction(new \Nethgui\Controller\Table\Help('Help'))
|
||||||
|
@ -12,7 +12,7 @@ class Modify extends \Nethgui\Controller\Table\Modify
|
|||||||
{
|
{
|
||||||
$parameterSchema = array(
|
$parameterSchema = array(
|
||||||
// was: Validate::HOSTNAME_FQDN, but we need hostname
|
// was: Validate::HOSTNAME_FQDN, but we need hostname
|
||||||
array('hostname', Validate::ANYTHING, \Nethgui\Controller\Table\Modify::KEY),
|
array('hostname', Validate::HOSTNAME_SIMPLE, \Nethgui\Controller\Table\Modify::KEY),
|
||||||
array('MacAddress', Validate::MACADDRESS, \Nethgui\Controller\Table\Modify::FIELD),
|
array('MacAddress', Validate::MACADDRESS, \Nethgui\Controller\Table\Modify::FIELD),
|
||||||
array('Role', Validate::ANYTHING, \Nethgui\Controller\Table\Modify::FIELD),
|
array('Role', Validate::ANYTHING, \Nethgui\Controller\Table\Modify::FIELD),
|
||||||
// array('Role', Validate::ROLES_COLLECTION ??? TODO!!!, \Nethgui\Controller\Table\Modify::FIELD),
|
// array('Role', Validate::ROLES_COLLECTION ??? TODO!!!, \Nethgui\Controller\Table\Modify::FIELD),
|
||||||
@ -52,4 +52,4 @@ class Modify extends \Nethgui\Controller\Table\Modify
|
|||||||
$view->setTemplate($templates[$this->getIdentifier()]);
|
$view->setTemplate($templates[$this->getIdentifier()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
namespace NethServer\Module\Doraemon\Hosts;
|
||||||
|
|
||||||
|
use Nethgui\System\PlatformInterface as Validate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle host power status
|
||||||
|
*
|
||||||
|
* Fires events
|
||||||
|
* - doraemon-wake
|
||||||
|
* - doraemon-reboot
|
||||||
|
* - doraemon-shutdown
|
||||||
|
*/
|
||||||
|
class TogglePower extends \Nethgui\Controller\Table\AbstractAction
|
||||||
|
{
|
||||||
|
|
||||||
|
public function __construct($identifier = NULL)
|
||||||
|
{
|
||||||
|
if ($identifier !== 'wake' && $identifier !== 'reboot' && $identifier !== 'shutdown') {
|
||||||
|
throw new \InvalidArgumentException(sprintf('%s: module identifier must be one of "wake" or "reboot" or "shutdown".', get_class($this)), 1325579395);
|
||||||
|
}
|
||||||
|
parent::__construct($identifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function bind(\Nethgui\Controller\RequestInterface $request)
|
||||||
|
{
|
||||||
|
$this->declareParameter('hostname', Validate::HOSTNAME_SIMPLE);
|
||||||
|
|
||||||
|
parent::bind($request);
|
||||||
|
$hostname = \Nethgui\array_end($request->getPath());
|
||||||
|
|
||||||
|
if ( ! $hostname) {
|
||||||
|
throw new \Nethgui\Exception\HttpException('Not found', 404, 1322148400);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->parameters['hostname'] = $hostname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function process()
|
||||||
|
{
|
||||||
|
if ( ! $this->getRequest()->isMutation()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->getPlatform()->signalEvent(sprintf('doraemon-%s@post', $this->getIdentifier()), array($this->parameters['hostname']));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
$view->requireFlag($view::INSET_DIALOG);
|
||||||
|
|
||||||
|
if ($view->getModule()->getIdentifier() == 'shutdown') {
|
||||||
|
$headerText = $T('Shutdown host `${0}`');
|
||||||
|
$panelText = $T('Proceed with host `${0}` shutdown?');
|
||||||
|
} elseif ($view->getModule()->getIdentifier() == 'reboot') {
|
||||||
|
$headerText = $T('Reboot host `${0}`');
|
||||||
|
$panelText = $T('Proceed with host `${0}` reboot?');
|
||||||
|
} else {
|
||||||
|
$headerText = $T('Wakeup host `${0}`');
|
||||||
|
$panelText = $T('Proceed with host `${0}` wakeup?');
|
||||||
|
}
|
||||||
|
|
||||||
|
echo $view->panel()
|
||||||
|
->insert($view->header('hostname')->setAttribute('template', $headerText))
|
||||||
|
->insert($view->textLabel('hostname')->setAttribute('template', $panelText))
|
||||||
|
;
|
||||||
|
|
||||||
|
echo $view->buttonList()
|
||||||
|
->insert($view->button('Yes', $view::BUTTON_SUBMIT))
|
||||||
|
->insert($view->button('No', $view::BUTTON_CANCEL)->setAttribute('value', $view['Cancel']))
|
||||||
|
;
|
Loading…
x
Reference in New Issue
Block a user