summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErwan Velu <erwan@mandriva.org>2003-06-11 17:55:53 +0000
committerErwan Velu <erwan@mandriva.org>2003-06-11 17:55:53 +0000
commitf5dabc106fb21263b60dd26eb81853f577fe4fd1 (patch)
tree3e0418ee2df69e0ad40b6b67e8ea2ea61d16a9de
parent644dc2d248a72a3c8dcf4a5a327a4fc952c6c608 (diff)
downloaddrakx-f5dabc106fb21263b60dd26eb81853f577fe4fd1.tar
drakx-f5dabc106fb21263b60dd26eb81853f577fe4fd1.tar.gz
drakx-f5dabc106fb21263b60dd26eb81853f577fe4fd1.tar.bz2
drakx-f5dabc106fb21263b60dd26eb81853f577fe4fd1.tar.xz
drakx-f5dabc106fb21263b60dd26eb81853f577fe4fd1.zip
Initial release of drakcluster during install
-rw-r--r--perl-install/drakcluster/server_conf.pm109
-rw-r--r--perl-install/drakcluster/server_conf_drakx.pm46
2 files changed, 155 insertions, 0 deletions
diff --git a/perl-install/drakcluster/server_conf.pm b/perl-install/drakcluster/server_conf.pm
new file mode 100644
index 000000000..435b013a5
--- /dev/null
+++ b/perl-install/drakcluster/server_conf.pm
@@ -0,0 +1,109 @@
+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 = (
+ ADMIN_INTERFACE => 'COMPUTE_INTERFACE',
+ NODENAME => 'COMPUTENODENAME',
+ DOMAINNAME => 'DOMAINCOMP',
+);
+
+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 };
+ add2hash($conf, $default_conf);
+ my @l = (
+ [ NODENAME => 'node use for administration', check => \&check_non_empty ],
+ [ COMPUTENODENAME => 'name use for compute interface', check => \&check_non_empty ],
+
+ [ STARTNODE => 'IP start node', check => \&check_number ],
+ [ FINISHNODE => 'IP end node', check => sub { &check_number || $conf->{STARTNODE} >= $conf->{FINISHNODE} && N("\"start node\" must be lower than \"end node\"") } ],
+
+ [ ADMIN_INTERFACE => 'admin interface', list => $network_interfaces ],
+ [ EXTERNAL_INTERFACE => 'external interface', list => $network_interfaces ],
+ [ COMPUTE_INTERFACE => 'compute interface', list => $network_interfaces ],
+ [ NTPSERVER => N("NTP Server IP"), check => sub { &check_ip || check_default(@_, $default_conf->{NTPSERVER}, $current_conf->{NTPSERVER}) } ],
+
+ [ DOMAINNAME => N("domain name use for administration of node"), check => sub { check_default(@_, $default_conf->{DOMAINNAME}, $current_conf->{DOMAINNAME}) } ],
+ [ NISDOMAINNAME => N("nis domain name use for NIS"), check => \&check_non_empty ],
+ [ DOMAINCOMP => N("domain name use for compute"), check => \&check_non_empty ],
+ [ IPOFFORWARDER => 'IP fo Forwarder resolv ip out of zone ', check => \&check_ip ],
+ [ DNSKEY => 'dnskey for the dns server', check => \&check_non_empty ],
+ [ ADDSEARCH => 'ADDSEARCH ' . N("is needed if you want your cluster resolv out of zone ip") ],
+
+ [ USERADMIN => 'useradmin define wich user admin PBS queue', check => \&check_non_empty ],
+ [ NODEADMIN => 'Nodeadmin define wich node can admin PBS queue', check => \&check_non_empty ],
+
+ [ ORIGIN => 'ORIGIN ' . N("domain that locally-posted mail 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 an IP", $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 you want to do this?", $txt));
+ }
+ 'already_displayed';
+ } else {
+ '';
+ }
+}
diff --git a/perl-install/drakcluster/server_conf_drakx.pm b/perl-install/drakcluster/server_conf_drakx.pm
new file mode 100644
index 000000000..e4713905b
--- /dev/null
+++ b/perl-install/drakcluster/server_conf_drakx.pm
@@ -0,0 +1,46 @@
+package drakcluster::server_conf_drakx;
+
+use strict;
+
+use run_program;
+use detect_devices;
+use network;
+use common;
+use drakcluster::server_conf;
+
+# for compatibility
+sub drakcluster::server_conf::N { &_ }
+sub N { &_ }
+
+sub generate_rndc() {
+ run_program::rooted('rndc-confgen', '-a');
+ first(cat_("$::prefix/etc/rndc.key") =~ /secret "(\S*)";/);
+}
+
+sub default_conf {
+ my ($o) = @_;
+ {
+ DOMAINNAME => $o->{netc}{DOMAINNAME},
+ NTPSERVER => $o->{intf}{eth0}{IPADDR},
+ };
+}
+
+sub main {
+ my ($o) = @_;
+ my @network_interfaces = detect_devices::getNet();
+
+ my $conf = drakcluster::server_conf::read();
+ $conf->{DNSKEY} ||= generate_rndc();
+
+ my @fields = drakcluster::server_conf::fields($conf, \@network_interfaces, default_conf($o));
+
+ $o->ask_from('', N("Server Configuration"),
+ [ @fields ], complete => sub {
+ my $i = eval { find_index { !drakcluster::server_conf::check_field($o, $_) } @fields };
+ $@ ? 0 : (1, $i);
+ }) or return;
+
+ drakcluster::server_conf::done($conf, \@network_interfaces);
+}
+
+1;