summaryrefslogtreecommitdiff
path: root/scripts/vyatta-update-cluster.pl
blob: c90dcf83fea4b1ffe1de2342027ee9339918c980 (plain)
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
#!/usr/bin/perl

use strict;
use lib "/opt/vyatta/share/perl5/";
use VyattaClusterConfig;

my $HA_DIR = "/etc/ha.d";
my $HA_INIT = "/etc/init.d/heartbeat";
my $SERVICE_DIR = "/etc/init.d";

my $config = new VyattaClusterConfig;
$config->setup("cluster");
if ($config->isEmpty()) {
  # config is empty => deleted.
  # shutdown clustering.
  system("$HA_INIT stop");
  exit 0;
}

open(OUT, ">>/tmp/cl.log") or exit 1;

my ($authkeys, $haresources, $ha_cf, $err, @init_services);
while (1) {
  ($authkeys, $err) = $config->authkeys();
  last if (!defined($authkeys));
  ($haresources, $err, @init_services) = $config->haresources();
  last if (!defined($haresources));
  ($ha_cf, $err) = $config->ha_cf();
  last;
}
if (defined($err)) {
  print STDERR "Cluster configuration error: $err\n";
  exit 1;
}

my $ret = system("mkdir -p $HA_DIR");
if ($ret >> 8) {
  print STDERR "Error: cannot create $HA_DIR\n";
  exit 1;
}

if (!open(CONF_AUTH, ">$HA_DIR/authkeys")) {
  print STDERR "Error: cannot create $HA_DIR/authkeys\n";
  exit 1;
}
if (!open(CONF_RES, ">$HA_DIR/haresources")) {
  print STDERR "Error: cannot create $HA_DIR/haresources\n";
  exit 1;
}
if (!open(CONF_CF, ">$HA_DIR/ha.cf")) {
  print STDERR "Error: cannot create $HA_DIR/ha.cf\n";
  exit 1;
}
print CONF_AUTH $authkeys;
print CONF_RES $haresources;
print CONF_CF $ha_cf;
close CONF_AUTH;
close CONF_RES;
close CONF_CF;
if (!chmod(0600, "$HA_DIR/authkeys")) {
  print STDERR "Error: cannot change $HA_DIR/authkeys permissions\n";
  exit 1;
}

# stop each service in case it is already started
foreach (@init_services) {
  system("$SERVICE_DIR/$_ stop");
}

# restart clustering.
# using "stop" + "start" ("restart" will cause a long wait).
# (may need to change to "restart".)
system("$HA_INIT stop");
system("$HA_INIT start");

close OUT;
exit 0;