Dave Cross: Still Munging Data With Perl: Online event - Mar 27 Learn more

#
# (c) Jan Gehring <jan.gehring@gmail.com>
#
=head1 NAME
Rex::Commands::Gather - Hardware and Information gathering
=head1 DESCRIPTION
With this module you can gather hardware and software information.
All these functions will not be reported. These functions don't modify anything.
=head1 SYNOPSIS
operating_system_is("SuSE");
=head1 EXPORTED FUNCTIONS
=cut
use v5.12.5;
our $VERSION = '1.16.0'; # VERSION
require Rex::Exporter;
use vars qw(@EXPORT);
@EXPORT = qw(operating_system_is network_interfaces memory
get_operating_system operating_system operating_system_version operating_system_release
is_freebsd is_netbsd is_openbsd is_redhat is_linux is_bsd is_solaris is_suse is_debian is_mageia is_windows is_alt is_openwrt is_gentoo is_fedora is_arch is_void
get_system_information dump_system_information kernelname);
=head2 get_operating_system
Will return the current operating system name.
task "get-os", "server01", sub {
say get_operating_system();
};
Aliased by operating_system().
=cut
sub get_operating_system {
my $operatingsystem = Rex::Hardware::Host->get_operating_system();
return $operatingsystem || "unknown";
}
=head2 operating_system
Alias for get_operating_system()
=cut
sub operating_system {
return get_operating_system();
}
=head2 get_system_information
Will return a hash of all system information. These Information will be also used by the template function.
=cut
sub get_system_information {
return Rex::Helper::System::info();
}
=head2 kernelname
Will return the kernel name of the operating system. For example on a linux system it will return I<Linux>.
=cut
sub kernelname {
my $host = Rex::Hardware::Host->get();
return $host->{kernelname};
}
=head2 dump_system_information
This function dumps all known system information on stdout.
=cut
sub dump_system_information {
my ($info) = @_;
my %sys_info = get_system_information();
inspect( \%sys_info,
{ prepend_key => '$', key_value_sep => " = ", no_root => 1 } );
}
=head2 operating_system_is($string)
Will return 1 if the operating system is $string.
task "is_it_suse", "server01", sub {
if( operating_system_is("SuSE") ) {
say "This is a SuSE system.";
}
};
=cut
sub operating_system_is {
my (@oses) = @_;
my $operatingsystem = Rex::Hardware::Host->get_operating_system();
for my $os (@oses) {
if ( $operatingsystem eq $os ) {
return 1;
}
}
return 0;
}
=head2 operating_system_version()
Will return the os release number as an integer. For example, it will convert 5.10 to 510, 10.04 to 1004 or 6.0.3 to 603.
task "prepare", "server01", sub {
if( operating_system_version() >= 510 ) {
say "OS Release is higher or equal to 510";
}
};
=cut
sub operating_system_version {
my ($os) = @_;
my $operatingsystemrelease = operating_system_release();
$operatingsystemrelease =~ s/[\.,]//g;
return $operatingsystemrelease;
}
=head2 operating_system_release()
Will return the os release number as is.
=cut
sub operating_system_release {
my ($os) = @_;
return Rex::Hardware::Host->get_operating_system_version();
}
=head2 network_interfaces
Return an HashRef of all the networkinterfaces and their configuration.
task "get_network_information", "server01", sub {
my $net_info = network_interfaces();
};
You can iterate over the devices as follow
my $net_info = network_interfaces();
for my $dev ( keys %{ $net_info } ) {
say "$dev has the ip: " . $net_info->{$dev}->{"ip"} . " and the netmask: " . $net_info->{$dev}->{"netmask"};
}
=cut
sub network_interfaces {
my $net = Rex::Hardware::Network->get();
return $net->{"networkconfiguration"};
}
=head2 memory
Return an HashRef of all memory information.
task "get_memory_information", "server01", sub {
my $memory = memory();
say "Total: " . $memory->{"total"};
say "Free: " . $memory->{"free"};
say "Used: " . $memory->{"used"};
say "Cached: " . $memory->{"cached"};
say "Buffers: " . $memory->{"buffers"};
};
=cut
sub memory {
my $mem = Rex::Hardware::Memory->get();
return $mem;
}
=head2 is_freebsd
Returns true if the target system is a FreeBSD.
task "foo", "server1", "server2", sub {
if(is_freebsd) {
say "This is a freebsd system...";
}
else {
say "This is not a freebsd system...";
}
};
=cut
sub is_freebsd {
my $os = @_ ? shift : get_operating_system();
if ( $os =~ m/FreeBSD/i ) {
return 1;
}
}
=head2 is_redhat
task "foo", "server1", sub {
if(is_redhat) {
# do something on a redhat system (like RHEL, Fedora, CentOS, Scientific Linux
}
};
=cut
sub is_redhat {
my $os = @_ ? shift : get_operating_system();
my @redhat_clones = (
"Fedora", "Redhat",
"CentOS", "Scientific",
"RedHatEnterpriseServer", "RedHatEnterpriseES",
"RedHatEnterpriseWorkstation", "RedHatEnterpriseWS",
"Amazon", "ROSAEnterpriseServer",
"CloudLinuxServer", "XenServer",
"OracleServer", "Virtuozzo",
);
if ( grep { /$os/i } @redhat_clones ) {
return 1;
}
}
=head2 is_fedora
task "foo", "server1", sub {
if(is_fedora) {
# do something on a fedora system
}
};
=cut
sub is_fedora {
my $os = @_ ? shift : get_operating_system();
my @fedora_clones = ("Fedora");
if ( grep { /$os/i } @fedora_clones ) {
return 1;
}
}
=head2 is_suse
task "foo", "server1", sub {
if(is_suse) {
# do something on a suse system
}
};
=cut
sub is_suse {
my $os = @_ ? shift : get_operating_system();
my @suse_clones = ( "OpenSuSE", "SuSE", "openSUSE project" );
if ( grep { /$os/i } @suse_clones ) {
return 1;
}
}
=head2 is_mageia
task "foo", "server1", sub {
if(is_mageia) {
# do something on a mageia system (or other Mandriva followers)
}
};
=cut
sub is_mageia {
my $os = @_ ? shift : get_operating_system();
my @mdv_clones = ( "Mageia", "ROSADesktopFresh" );
if ( grep { /$os/i } @mdv_clones ) {
return 1;
}
}
=head2 is_debian
task "foo", "server1", sub {
if(is_debian) {
# do something on a debian system
}
};
=cut
sub is_debian {
my $os = @_ ? shift : get_operating_system();
my @debian_clones = ( "Debian", "Ubuntu", "LinuxMint", "Raspbian", "Devuan" );
if ( grep { /$os/i } @debian_clones ) {
return 1;
}
}
=head2 is_alt
task "foo", "server1", sub {
if(is_alt) {
# do something on a ALT Linux system
}
};
=cut
sub is_alt {
my $os = @_ ? shift : get_operating_system();
my @alt_clones = ("ALT");
if ( grep { /$os/i } @alt_clones ) {
return 1;
}
}
=head2 is_netbsd
Returns true if the target system is a NetBSD.
task "foo", "server1", "server2", sub {
if(is_netbsd) {
say "This is a netbsd system...";
}
else {
say "This is not a netbsd system...";
}
};
=cut
sub is_netbsd {
my $os = @_ ? shift : get_operating_system();
if ( $os =~ m/NetBSD/i ) {
return 1;
}
}
=head2 is_openbsd
Returns true if the target system is an OpenBSD.
task "foo", "server1", "server2", sub {
if(is_openbsd) {
say "This is an openbsd system...";
}
else {
say "This is not an openbsd system...";
}
};
=cut
sub is_openbsd {
my $os = @_ ? shift : get_operating_system();
if ( $os =~ m/OpenBSD/i ) {
return 1;
}
}
=head2 is_linux
Returns true if the target system is a Linux System.
task "prepare", "server1", "server2", sub {
if(is_linux) {
say "This is a linux system...";
}
else {
say "This is not a linux system...";
}
};
=cut
sub is_linux {
my $host = Rex::Hardware::Host->get();
if ( exists $host->{kernelname}
&& $host->{kernelname}
&& $host->{kernelname} =~ m/Linux/ )
{
return 1;
}
}
=head2 is_bsd
Returns true if the target system is a BSD System.
task "prepare", "server1", "server2", sub {
if(is_bsd) {
say "This is a BSD system...";
}
else {
say "This is not a BSD system...";
}
};
=cut
sub is_bsd {
my $host = Rex::Hardware::Host->get();
if ( $host->{"kernelname"} =~ m/BSD/ ) {
return 1;
}
}
=head2 is_solaris
Returns true if the target system is a Solaris System.
task "prepare", "server1", "server2", sub {
if(is_solaris) {
say "This is a Solaris system...";
}
else {
say "This is not a Solaris system...";
}
};
=cut
sub is_solaris {
my $host = Rex::Hardware::Host->get();
if ( exists $host->{kernelname}
&& $host->{kernelname}
&& $host->{"kernelname"} =~ m/SunOS/ )
{
return 1;
}
}
=head2 is_windows
Returns true if the target system is a Windows System.
=cut
sub is_windows {
my $host = Rex::Hardware::Host->get();
if ( $host->{"operatingsystem"} =~ m/^MSWin/
|| $host->{operatingsystem} eq "Windows" )
{
return 1;
}
}
=head2 is_openwrt
Returns true if the target system is an OpenWrt System.
=cut
sub is_openwrt {
my $os = get_operating_system();
if ( $os =~ m/OpenWrt/i ) {
return 1;
}
}
=head2 is_gentoo
Returns true if the target system is a Gentoo System.
=cut
sub is_gentoo {
my $os = get_operating_system();
if ( $os =~ m/Gentoo/i ) {
return 1;
}
}
=head2 is_arch
task "foo", "server1", sub {
if(is_arch) {
# do something on a arch system
}
};
=cut
sub is_arch {
my $os = @_ ? shift : get_operating_system();
my @arch_clones = ( "Arch", "Manjaro", "Antergos" );
if ( grep { /$os/i } @arch_clones ) {
return 1;
}
}
=head2 is_void
Returns true if the target system is a Void Linux system.
=cut
sub is_void {
my $os = get_operating_system();
if ( $os =~ m/VoidLinux/i ) {
return 1;
}
}
1;