#!/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();
&ui_print_header(undef, $text{'host_title'}, "", "edit_host");
@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";
print " $text{'host_header'} |
\n";
print " \n";
print " $text{'host_name'} | \n";
if ($server->{'id'}) {
$h = $server->{'realhost'} || $server->{'host'};
printf "%s | \n",
$server->{'id'}, $server->{'desc'} ? "$server->{'desc'} ($h:$server->{'port'})" : "$h:$server->{'port'}";
}
else {
print "$text{'this_server'} | \n";
}
if ($server->{'id'}) {
print "$text{'host_type'} | \n";
foreach $t (@servers::server_types) {
print $t->[1] if ($t->[0] eq $server->{'type'});
}
print " | \n";
}
print " \n";
print " $text{'host_count'} | \n";
printf "%d | \n", scalar(@packages);
print "$text{'host_os'} | \n";
print "$host->{'real_os_type'} $host->{'real_os_version'} | \n";
print " $text{'host_system'} | \n";
$system = $host->{'package_system'} || $software::config{'package_system'};
print "",uc($system)," | \n";
print " \n";
print " |
\n";
# Show delete and refresh buttons
print "\n";
print "\n";
print "\n";
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
%heiropen = map { $_, 1 } &get_heiropen($in{'id'});
$heiropen{""}++;
# traverse the heirarchy
$spacer = " "x3;
print &ui_hr();
print &ui_subheading($text{'host_installed'});
print "\n";
&traverse("", 0);
print "
\n";
if ($hasclasses) {
print "$text{'host_close'}\n";
print "$text{'host_open'}\n";
}
&ui_print_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);
}
}
}