Local modifications to ClusterLabs/Anvil by Alteeve
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

78 lines
2.0 KiB

#!/usr/bin/perl
#
# This parses the current IP addresses on the local system and writes them to /etc/issue so that they're seen
# by a user at the login prompt. This is meant to be useful during the initialization and setup stages, so
# it's expected to run before the Anvil::Tools module is installed. As such, it doesn't use those modules.
#
use strict;
use warnings;
use IO::Handle;
# Turn off buffering so that the pinwheel will display while waiting for the SSH call(s) to complete.
$| = 1;
my $THIS_FILE = ($0 =~ /^.*\/(.*)$/)[0];
my $running_directory = ($0 =~ /^(.*?)\/$THIS_FILE$/)[0];
if (($running_directory =~ /^\./) && ($ENV{PWD}))
{
$running_directory =~ s/^\./$ENV{PWD}/;
}
my $shell_call = "/usr/sbin/ip addr list";
my $new_issue = '\S
Kernel \r on an \m
';
my $ips = {};
my $interface = "";
open (my $file_handle, $shell_call." 2>&1 |") or die "Failed to call: [".$shell_call."], error was: [".$!."]\n";
while(<$file_handle>)
{
chomp;
my $line = $_;
$line =~ s/\n$//;
$line =~ s/\r$//;
if ($line =~ /^\d+: (.*?): </)
{
$interface = $1;
}
next if not $interface;
next if $interface eq "lo";
if ($line =~ / inet (\d+\.\d+\.\d+\.\d+\/\d+) /)
{
my $ip = $1;
$ips->{$interface} = $ip;
}
}
close $file_handle;
if (keys %{$ips})
{
$new_issue .= "\nActive IPs:\n";
foreach my $interface (sort {$a cmp $b} keys %{$ips})
{
$new_issue .= "- ".$interface.": ".$ips->{$interface}."\n";
}
$new_issue .= "\n";
}
# Read in the current issue file and see if there is any difference.
my $old_issue = "";
my $issue_file = "/etc/issue";
open ($file_handle, "<", $issue_file) or die "Failed to read: [".$issue_file."], error was: [".$!."]\n";
while(<$file_handle>)
{
### NOTE: Don't chop this, we want to record exactly what we read
$old_issue .= $_;
}
close $file_handle;
my $update = $new_issue eq $old_issue ? 0 : 1;
if ($update)
{
open (my $file_handle, ">", $issue_file) or die "Failed to write: [".$issue_file."], the error was: [".$!."]\n";
print $file_handle $new_issue;
close $file_handle;
}
exit(0);