1#!/usr/local/bin/perl
2# add.cgi
3# Add or update a server or group from the webmin servers module
4
5require './cluster-usermin-lib.pl';
6&ReadParse();
7@servers = &list_servers();
8
9if ($in{'add'}) {
10	# Add a single host
11	@add = grep { $_->{'id'} eq $in{'server'} } @servers;
12	&error_setup($text{'add_err'});
13	$msg = &text('add_msg', &server_name($add[0]));
14	}
15else {
16	# Add all from a group
17	($group) = grep { $_->{'name'} eq $in{'group'} }
18			&servers::list_all_groups(\@servers);
19	foreach $m (@{$group->{'members'}}) {
20		push(@add, grep { $_->{'host'} eq $m } @servers);
21		}
22	&error_setup($text{'add_gerr'});
23	$msg = &text('add_gmsg', $in{'group'});
24	}
25&ui_print_header(undef, $text{'add_title'}, "");
26print "<b>$msg</b><p>\n";
27
28# Setup error handler for down hosts
29sub add_error
30{
31$add_error_msg = join("", @_);
32}
33&remote_error_setup(\&add_error);
34
35# Get the modules and themes for each host
36foreach $s (@add) {
37	$add_error_msg = undef;
38	local $host = { 'id' => $s->{'id'} };
39	local $usermin = &remote_foreign_check($s->{'host'}, "usermin");
40	if ($add_error_msg) {
41		print "$add_error_msg<p>\n";
42		next;
43		}
44	if (!$usermin) {
45		print &text('add_echeck', $s->{'host'}),"<p>\n";
46		next;
47		}
48	&remote_foreign_require($s->{'host'}, "usermin", "usermin-lib.pl");
49	$host->{'version'} = &remote_foreign_call($s->{'host'}, "usermin",
50						  "get_usermin_version");
51	if (!$host->{'version'}) {
52		print &text('add_echeck', $s->{'host'}),"<p>\n";
53		next;
54		}
55	local $gconfig = &remote_foreign_config($s->{'host'}, undef);
56	foreach $g ('os_type', 'os_version',
57		    'real_os_type', 'real_os_version') {
58		$host->{$g} = $gconfig->{$g};
59		}
60
61	local @mods = &remote_foreign_call($s->{'host'}, "usermin",
62					   "list_modules");
63	@mods = grep { !$_->{'clone'} } @mods;
64	$host->{'modules'} = \@mods;
65
66	local @themes = &remote_foreign_call($s->{'host'}, "usermin",
67					     "list_themes");
68	$host->{'themes'} = \@themes;
69
70	&save_usermin_host($host);
71	print &text('add_ok', &server_name($s), scalar(@mods),
72			      scalar(@themes)),"<p>\n";
73	}
74&remote_finished();
75
76&ui_print_footer("", $text{'index_return'});
77
78
79