#!/usr/local/bin/perl
# edit_host.cgi
# Show details of a managed host, and all the packages on it
require './cluster-software-lib.pl';
&foreign_require("servers", "servers-lib.pl");
&ReadParse();
&header($text{'host_title'}, "");
print "
\n";
@hosts = &list_software_hosts();
($host) = grep { $_->{'id'} eq $in{'id'} } @hosts;
$server = &foreign_call("servers", "get_server", $in{'id'});
@packages = @{$host->{'packages'}};
# Show host details
print "\n";
# Show tree of packages
$heir{""} = "";
foreach $c (sort { $a cmp $b } &unique(map { $_->{'class'} } @packages)) {
if (!$c) { next; }
@w = split(/\//, $c);
$p = join('/', @w[0..$#w-1]);
if (!defined($heir{$p})) {
$pp = join('/', @w[0..$#w-2]);
$heir{$pp} .= "$p\0";
}
$heir{$p} .= "$c\0";
$hasclasses++;
}
# get the current open list
open(HEIROPEN, "$module_config_directory/heiropen.$in{'id'}");
while() {
chop;
$heiropen{$_}++;
}
close(HEIROPEN);
$heiropen{""}++;
# traverse the heirarchy
$spacer = " "x3;
print "
\n";
print "$text{'host_installed'}
\n";
print "\n";
&traverse("", 0);
print "
\n";
if ($hasclasses) {
print "$text{'host_close'} $spacer\n";
print "$text{'host_open'}\n";
}
print "
\n";
&footer("", $text{'index_return'});
sub traverse
{
local($s, $act, $i);
print " ", $spacer x $_[1];
if ($_[0]) {
print "\n";
$act = $heiropen{$_[0]} ? "close" : "open";
print "";
$_[0] =~ /([^\/]+)$/;
print " $1 | \n",
}
else { print "
$text{'host_all'}\n"; }
print "
|
\n";
if ($heiropen{$_[0]}) {
# print sub-folders followed by packages
foreach $i (@packages) {
if ($i->{'class'} eq $_[0]) {
print " ", $spacer x ($_[1]+1);
print " \n";
print "{'name'}),"\">$i->{'name'} | \n";
print "$i->{'desc'} | \n";
print "
\n";
}
}
foreach $s (&unique(split(/\0+/, $heir{$_[0]}))) {
&traverse($s, $_[1]+1);
}
}
}