#!/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 "\n"; print "
$text{'host_header'}
\n"; print "\n"; if ($server->{'id'}) { $h = $server->{'realhost'} || $server->{'host'}; printf "\n", $server->{'id'}, $server->{'desc'} ? "$server->{'desc'} ($h:$server->{'port'})" : "$h:$server->{'port'}"; } else { print "\n"; } if ($server->{'id'}) { print "\n"; } print "\n"; print "\n"; printf "\n", scalar(@packages); print "\n"; print "\n"; print "\n"; $system = $host->{'package_system'} || $software::config{'package_system'}; print "\n"; print "\n"; print "
$text{'host_name'}%s$text{'this_server'}$text{'host_type'} \n"; foreach $t (@servers::server_types) { print $t->[1] if ($t->[0] eq $server->{'type'}); } print "
$text{'host_count'}%d$text{'host_os'}$host->{'real_os_type'} $host->{'real_os_version'}
$text{'host_system'}",uc($system),"
\n"; # Show delete and refresh buttons print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; 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); } } }