5
0
mirror of git://git.proxmox.com/git/pve-ha-manager.git synced 2025-02-25 21:57:21 +03:00

add fake binary for pve-ha-crm

This commit is contained in:
Dietmar Maurer 2014-12-05 17:25:57 +01:00
parent 80e7574f13
commit 659a7501dc

179
pve-ha-crm Executable file
View File

@ -0,0 +1,179 @@
#!/usr/bin/perl
use strict;
use warnings;
use PVE::SafeSyslog;
use POSIX ":sys_wait_h";
use Fcntl ':flock';
use Getopt::Long;
use Time::HiRes qw (gettimeofday);
use PVE::Tools qw(dir_glob_foreach file_read_firstline);
use PVE::INotify;
use PVE::Cluster qw(cfs_read_file);
use PVE::RPCEnvironment;
use PVE::CLIHandler;
use Data::Dumper;
use base qw(PVE::CLIHandler);
my $pve_ha_crm_pidfile = "/var/run/pve-ha-crm.pid";
$SIG{'__WARN__'} = sub {
my $err = $@;
my $t = $_[0];
chomp $t;
print "$t\n";
syslog('warning', "WARNING: %s", $t);
$@ = $err;
};
initlog('pve-ha-crm');
$ENV{'PATH'} = '/sbin:/bin:/usr/sbin:/usr/bin';
die "please run as root\n" if $> != 0;
PVE::INotify::inotify_init();
my $rpcenv = PVE::RPCEnvironment->init('cli');
$rpcenv->init_request();
$rpcenv->set_language($ENV{LANG});
$rpcenv->set_user('root@pam');
my $nodename = PVE::INotify::nodename();
my $commandline = [$0, @ARGV];
$0 = "pve-ha-crm";
sub lockpidfile {
my $pidfile = shift;
my $lkfn = "$pidfile.lock";
if (!open (FLCK, ">>$lkfn")) {
my $msg = "can't aquire lock on file '$lkfn' - $!";
syslog ('err', $msg);
die "ERROR: $msg\n";
}
if (!flock (FLCK, LOCK_EX|LOCK_NB)) {
close (FLCK);
my $msg = "can't aquire lock '$lkfn' - $!";
syslog ('err', $msg);
die "ERROR: $msg\n";
}
}
sub writepidfile {
my $pidfile = shift;
if (!open (PIDFH, ">$pidfile")) {
my $msg = "can't open pid file '$pidfile' - $!";
syslog ('err', $msg);
die "ERROR: $msg\n";
}
print PIDFH "$$\n";
close (PIDFH);
}
sub cleanup {
unlink "$pve_ha_crm_pidfile.lock";
unlink $pve_ha_crm_pidfile;
}
sub run_server {
my ($param) = @_;
# try to get the lock
lockpidfile($pve_ha_crm_pidfile);
# run in background
my $spid;
PVE::Cluster::cfs_update();
if (!$param->{debug}) {
open STDIN, '</dev/null' || die "can't read /dev/null";
open STDOUT, '>/dev/null' || die "can't write /dev/null";
}
if (!$param->{debug}) {
$spid = fork();
if (!defined ($spid)) {
my $msg = "can't put server into background - fork failed";
syslog('err', $msg);
die "ERROR: $msg\n";
} elsif ($spid) { # parent
exit (0);
}
}
writepidfile($pve_ha_crm_pidfile);
open STDERR, '>&STDOUT' || die "can't close STDERR\n";
$SIG{INT} = $SIG{TERM} = $SIG{QUIT} = sub {
syslog('info' , "server closing");
# fixme: implement this ?
};
print "DO WORK\n";
exit(0);
}
__PACKAGE__->register_method ({
name => 'start',
path => 'start',
method => 'POST',
description => "Start the Proxmox HA CRM service.",
parameters => {
additionalProperties => 0,
properties => {
debug => {
description => "Debug mode - stay in foreground",
type => "boolean",
optional => 1,
default => 0,
},
},
},
returns => { type => 'null' },
code => sub {
my ($param) = @_;
run_server($param);
return undef;
}});
my $cmddef = {
start => [ __PACKAGE__, 'start', []],
};
my $cmd = shift;
PVE::CLIHandler::handle_cmd($cmddef, $0, $cmd, \@ARGV, undef, $0);
exit (0);
__END__
=head1 NAME
pve-ha-crm - PVE Cluster Ressource Manager Daemon
=head1 SYNOPSIS
=include synopsis
=head1 DESCRIPTION
This is the Cluster Ressource Manager.
=include pve_copyright