Remove all entry points to modify machines
This commit is contained in:
parent
170c7c98d0
commit
232170e301
|
@ -11,35 +11,6 @@ use Digest::SHA1 qw(sha1_hex);
|
||||||
use Config::General;
|
use Config::General;
|
||||||
|
|
||||||
|
|
||||||
sub nixMachines {
|
|
||||||
my ($c) = @_;
|
|
||||||
my $result = "# GENERATED BY HYDRA\n";
|
|
||||||
|
|
||||||
foreach my $machine ($c->model("DB::BuildMachines")->all) {
|
|
||||||
if($machine->enabled) {
|
|
||||||
$result = $result . $machine->username . '@'. $machine->hostname . ' ';
|
|
||||||
foreach my $system ($machine->buildmachinesystemtypes) {
|
|
||||||
$result = $result . $system->system .',';
|
|
||||||
}
|
|
||||||
chop $result;
|
|
||||||
$result = $result . ' '. $machine->ssh_key . ' ' . $machine->maxconcurrent . ' '. $machine->speedfactor . ' ' . $machine->options . "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub saveNixMachines {
|
|
||||||
my ($c) = @_;
|
|
||||||
|
|
||||||
die("File not writable: /etc/nix.machines") if ! -w "/etc/nix.machines" ;
|
|
||||||
|
|
||||||
open (NIXMACHINES, '>/etc/nix.machines') or die("Could not write to /etc/nix.machines");
|
|
||||||
print NIXMACHINES nixMachines($c);
|
|
||||||
close (NIXMACHINES);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub admin : Chained('/') PathPart('admin') CaptureArgs(0) {
|
sub admin : Chained('/') PathPart('admin') CaptureArgs(0) {
|
||||||
my ($self, $c) = @_;
|
my ($self, $c) = @_;
|
||||||
requireAdmin($c);
|
requireAdmin($c);
|
||||||
|
@ -61,124 +32,6 @@ sub machines : Chained('admin') PathPart('machines') Args(0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sub machine : Chained('admin') PathPart('machine') CaptureArgs(1) {
|
|
||||||
my ($self, $c, $machineName) = @_;
|
|
||||||
|
|
||||||
requireAdmin($c);
|
|
||||||
|
|
||||||
my $machine = $c->model('DB::BuildMachines')->find($machineName)
|
|
||||||
or notFound($c, "Machine $machineName doesn't exist.");
|
|
||||||
|
|
||||||
$c->stash->{machine} = $machine;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub machine_edit : Chained('machine') PathPart('edit') Args(0) {
|
|
||||||
my ($self, $c) = @_;
|
|
||||||
$c->stash->{template} = 'machine.tt';
|
|
||||||
$c->stash->{systemtypes} = [$c->model('DB::SystemTypes')->search({}, {order_by => "system"})];
|
|
||||||
$c->stash->{edit} = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub machine_edit_submit : Chained('machine') PathPart('submit') Args(0) {
|
|
||||||
my ($self, $c) = @_;
|
|
||||||
requirePost($c);
|
|
||||||
|
|
||||||
txn_do($c->model('DB')->schema, sub {
|
|
||||||
if (($c->request->params->{submit} || "") eq "delete") {
|
|
||||||
$c->stash->{machine}->delete;
|
|
||||||
} else {
|
|
||||||
updateMachine($c, $c->stash->{machine});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
saveNixMachines($c);
|
|
||||||
|
|
||||||
$c->res->redirect("/admin/machines");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub updateMachine {
|
|
||||||
my ($c, $machine) = @_;
|
|
||||||
|
|
||||||
my $hostname = trim $c->request->params->{"hostname"};
|
|
||||||
my $username = trim $c->request->params->{"username"};
|
|
||||||
my $maxconcurrent = trim $c->request->params->{"maxconcurrent"};
|
|
||||||
my $speedfactor = trim $c->request->params->{"speedfactor"};
|
|
||||||
my $ssh_key = trim $c->request->params->{"ssh_key"};
|
|
||||||
my $options = trim $c->request->params->{"options"};
|
|
||||||
my $systems = $c->request->params->{"systems"} ;
|
|
||||||
|
|
||||||
error($c, "Invalid or empty username.") if $username eq "";
|
|
||||||
error($c, "Max concurrent builds should be an integer > 0.") if $maxconcurrent eq "" || ! $maxconcurrent =~ m/[0-9]+/;
|
|
||||||
error($c, "Speed factor should be an integer > 0.") if $speedfactor eq "" || ! $speedfactor =~ m/[0-9]+/;
|
|
||||||
error($c, "Invalid or empty SSH key.") if $ssh_key eq "";
|
|
||||||
|
|
||||||
$machine->update(
|
|
||||||
{ username => $username
|
|
||||||
, maxconcurrent => $maxconcurrent
|
|
||||||
, speedfactor => $speedfactor
|
|
||||||
, ssh_key => $ssh_key
|
|
||||||
, options => $options
|
|
||||||
});
|
|
||||||
$machine->buildmachinesystemtypes->delete_all;
|
|
||||||
if(ref($systems) eq 'ARRAY') {
|
|
||||||
for my $s (@$systems) {
|
|
||||||
$machine->buildmachinesystemtypes->create({ system => $s}) ;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$machine->buildmachinesystemtypes->create({ system => $systems}) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub create_machine : Chained('admin') PathPart('create-machine') Args(0) {
|
|
||||||
my ($self, $c) = @_;
|
|
||||||
|
|
||||||
requireAdmin($c);
|
|
||||||
|
|
||||||
$c->stash->{template} = 'machine.tt';
|
|
||||||
$c->stash->{systemtypes} = [$c->model('DB::SystemTypes')->search({}, {order_by => "system"})];
|
|
||||||
$c->stash->{edit} = 1;
|
|
||||||
$c->stash->{create} = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub create_machine_submit : Chained('admin') PathPart('create-machine/submit') Args(0) {
|
|
||||||
my ($self, $c) = @_;
|
|
||||||
|
|
||||||
requireAdmin($c);
|
|
||||||
|
|
||||||
my $hostname = trim $c->request->params->{"hostname"};
|
|
||||||
error($c, "Invalid or empty hostname.") if $hostname eq "";
|
|
||||||
|
|
||||||
txn_do($c->model('DB')->schema, sub {
|
|
||||||
my $machine = $c->model('DB::BuildMachines')->create(
|
|
||||||
{ hostname => $hostname });
|
|
||||||
updateMachine($c, $machine);
|
|
||||||
});
|
|
||||||
saveNixMachines($c);
|
|
||||||
$c->res->redirect("/admin/machines");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub machine_enable : Chained('machine') PathPart('enable') Args(0) {
|
|
||||||
my ($self, $c) = @_;
|
|
||||||
$c->stash->{machine}->update({ enabled => 1});
|
|
||||||
saveNixMachines($c);
|
|
||||||
$c->res->redirect("/admin/machines");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub machine_disable : Chained('machine') PathPart('disable') Args(0) {
|
|
||||||
my ($self, $c) = @_;
|
|
||||||
$c->stash->{machine}->update({ enabled => 0});
|
|
||||||
saveNixMachines($c);
|
|
||||||
$c->res->redirect("/admin/machines");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub clear_queue_non_current : Chained('admin') Path('clear-queue-non-current') Args(0) {
|
sub clear_queue_non_current : Chained('admin') Path('clear-queue-non-current') Args(0) {
|
||||||
my ($self, $c) = @_;
|
my ($self, $c) = @_;
|
||||||
$c->model('DB::Builds')->search({finished => 0, iscurrent => 0, busy => 0})->update({ finished => 1, buildstatus => 4, timestamp => time});
|
$c->model('DB::Builds')->search({finished => 0, iscurrent => 0, busy => 0})->update({ finished => 1, buildstatus => 4, timestamp => time});
|
||||||
|
|
|
@ -1,88 +0,0 @@
|
||||||
[% WRAPPER layout.tt title=(create ? "New machine" : "Machine $machine.hostname") %]
|
|
||||||
[% PROCESS common.tt %]
|
|
||||||
|
|
||||||
<form class="form-horizontal" method="post"
|
|
||||||
action="[% IF create %][% c.uri_for('/admin/create-machine/submit') %][% ELSE %][% c.uri_for('/admin/machine' machine.hostname 'submit') %][% END %]">
|
|
||||||
|
|
||||||
<fieldset>
|
|
||||||
[% IF create %]
|
|
||||||
<div class="control-group">
|
|
||||||
<label class="control-label">Host name</label>
|
|
||||||
<div class="controls">
|
|
||||||
<input type="text" class="span3" name="hostname" value="[% machine.hostname %]"></input>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
[% END %]
|
|
||||||
|
|
||||||
<div class="control-group">
|
|
||||||
<label class="control-label">User name</label>
|
|
||||||
<div class="controls">
|
|
||||||
<input type="text" class="span3" name="username" value="[% machine.username %]"></input>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="control-group">
|
|
||||||
<label class="control-label">SSH key location</label>
|
|
||||||
<div class="controls">
|
|
||||||
<input type="text" class="span3" name="ssh_key" value="[% machine.ssh_key %]"></input>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="control-group">
|
|
||||||
<label class="control-label">Options</label>
|
|
||||||
<div class="controls">
|
|
||||||
<input type="text" class="span3" name="options" value="[% machine.options %]"></input>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="control-group">
|
|
||||||
<label class="control-label">Max concurrent builds</label>
|
|
||||||
<div class="controls">
|
|
||||||
<input type="text" class="span3" name="maxconcurrent" value="[% machine.maxconcurrent %]"></input>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="control-group">
|
|
||||||
<label class="control-label">Speed factor</label>
|
|
||||||
<div class="controls">
|
|
||||||
<input type="text" class="span3" name="speedfactor" value="[% machine.speedfactor %]"></input>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="control-group">
|
|
||||||
<label class="control-label">Systems</label>
|
|
||||||
<div class="controls">
|
|
||||||
<select class="span3" multiple="1" name="systems">
|
|
||||||
[% FOREACH s IN systemtypes;
|
|
||||||
checked = false;
|
|
||||||
FOREACH ms IN machine.buildmachinesystemtypes;
|
|
||||||
checked = ms.system == s.system;
|
|
||||||
BREAK IF checked;
|
|
||||||
END %]
|
|
||||||
<option value="[% s.system %]" [% IF checked %]selected="1"[% END %]>[% s.system %]</option>
|
|
||||||
[% END %]
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-actions">
|
|
||||||
<button type="submit" class="btn btn-primary">
|
|
||||||
<i class="icon-ok icon-white"></i>
|
|
||||||
[%IF create %]Create[% ELSE %]Apply changes[% END %]
|
|
||||||
</button>
|
|
||||||
[% IF !create %]
|
|
||||||
<button id="delete-machine" type="submit" class="btn btn-danger" name="submit" value="delete">
|
|
||||||
<i class="icon-trash icon-white"></i>
|
|
||||||
Delete this machine
|
|
||||||
</button>
|
|
||||||
<script type="text/javascript">
|
|
||||||
$("#delete-machine").click(function() {
|
|
||||||
return confirm("Are you sure you want to delete this machine?");
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
[% END %]
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</fieldset>
|
|
||||||
|
|
||||||
[% END %]
|
|
Loading…
Reference in a new issue