1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
package drakcluster::server_conf;
use strict;
use common;
sub read() {
my %main = getVarsFromSh("$::prefix/etc/clusterserver.conf");
\%main;
}
sub done {
my ($conf, $network_interfaces) = @_;
set_automatic_fields($conf, $network_interfaces);
setVarsInSh("$::prefix/etc/clusterserver.conf", $conf);
}
my %automatic_when_single_network = (
COMPUTE_INTERFACE => 'ADMIN_INTERFACE',
COMPUTENODENAME => 'NODENAME',
DOMAINCOMP => 'DOMAINNAME',
);
sub set_automatic_fields {
my ($conf, $network_interfaces) = @_;
if (@$network_interfaces <= 2) {
$conf->{$_} = $conf->{$automatic_when_single_network{$_}} foreach keys %automatic_when_single_network;
}
}
sub fields {
my ($conf, $network_interfaces, $default_conf) = @_;
my $current_conf = { %$conf };
put_in_hash($conf, $default_conf);
my @l = (
[ NODENAME => 'Node name (Administration network)' , check => \&check_non_empty ],
[ COMPUTENODENAME => 'Node Name (Computing network)', check => \&check_non_empty ],
[ STARTNODE => 'IP of the first node', check => \&check_number ],
[ FINISHNODE => 'IP of the last node', check => sub { &check_number || $conf->{STARTNODE} >= $conf->{FINISHNODE} && N("\"The First node\" must have an IP lower than \"the last node\"") } ],
[ ADMIN_INTERFACE => 'Administration Network Interface', list => $network_interfaces ],
[ EXTERNAL_INTERFACE => 'External Network Interface', list => $network_interfaces ],
[ COMPUTE_INTERFACE => 'Computing Network Interface', list => $network_interfaces ],
[ NTPSERVER => N("NTP Server IP Address"), check => sub { &check_ip || check_default(@_, $default_conf->{NTPSERVER}, $current_conf->{NTPSERVER}) } ],
[ DOMAINNAME => N("Administration node domain name"), check => sub { check_default(@_, $default_conf->{DOMAINNAME}, $current_conf->{DOMAINNAME}) } ],
[ NISDOMAINNAME => N("NIS domain name"), check => \&check_non_empty ],
[ DOMAINCOMP => N("Computing domain name"), check => \&check_non_empty ],
[ IPOFFORWARDER => 'IP address of your external DNS', check => sub { $_[0] && check_ip(@_) } ],
[ DNSKEY => 'DNS server dnskey', check => \&check_non_empty ],
[ ADDSEARCH => 'ADDSEARCH ' . N("Domain name of your external network") ],
[ USERADMIN => 'PBS administrator user name', check => \&check_non_empty ],
[ ORIGIN => 'ORIGIN ' . N("Domain that locally posted mails appears to come from"), check => \&check_non_empty ],
);
if (@$network_interfaces <= 2) {
@l = grep { !$automatic_when_single_network{$_->[0]} } @l;
}
map {
my ($field, $label, %opts) = @$_;
$opts{val} = \$conf->{$field};
$opts{label} = $label;
\%opts;
} @l;
}
sub check_field {
my ($in, $field) = @_;
warn "checking $field->{label}\n";
$field->{check} or return 1;
my $err = $field->{check}->(${$field->{val}}, $field->{label}, warn => $in);
$in->ask_warn('', $err) if $err && $err ne 'already_displayed';
!$err;
}
# CHECKERS #####################################################################
sub is_ip {
$::isInstall ? &network::network::is_ip : &cluster_fonction_common::is_ip;
}
sub check_non_empty {
my ($val, $txt) = @_;
!$val && N("Field \"%s\" must not be empty", $txt);
}
sub check_number {
my ($val, $txt) = @_;
$val !~ /^\d+$/ && N("Field \"%s\" must be a number", $txt);
}
sub check_ip {
my ($val, $txt) = @_;
!is_ip($val) && N("Field \"%s\" must be a valid IP address", $txt);
}
sub check_default {
my ($val, $txt, $warn, $in, $default_val, $pre_val) = @_;
if ($default_val && $val ne $default_val && $val ne $pre_val) {
if ($warn eq 'warn') {
return '' if $in->ask_okcancel('', N("You changed the default value of field \"%s\". Are you sure to do this?", $txt));
}
'already_displayed';
} else {
'';
}
}
|