diff options
Diffstat (limited to 'lib/ManaTools/Shared/Hosts.pm')
-rw-r--r-- | lib/ManaTools/Shared/Hosts.pm | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/lib/ManaTools/Shared/Hosts.pm b/lib/ManaTools/Shared/Hosts.pm new file mode 100644 index 0000000..d3b7fc9 --- /dev/null +++ b/lib/ManaTools/Shared/Hosts.pm @@ -0,0 +1,216 @@ +# vim: set et ts=4 sw=4: +#***************************************************************************** +# +# Copyright (c) 2013-2015 Matteo Pasotti <matteo.pasotti@gmail.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2, as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +#***************************************************************************** +package ManaTools::Shared::Hosts; + +use Moose; +use diagnostics; +use Config::Hosts; +use Net::DBus; +use utf8; + +# costants by Config::Hosts +my $is_ip = 1; +my $is_host = -1; +my $is_none = 0; + +has 'configHosts' => ( + is => 'rw', + init_arg => undef, + builder => '_initialize' +); + +has 'dbusConnectionParams' => ( + is => 'ro', + isa => 'HashRef', + builder => '_initDBusConnectionParams', +); + +sub _initialize { + my $self = shift(); + $self->configHosts(Config::Hosts->new()); +} + +sub _initDBusConnectionParams { + my $self = shift(); + my %dbusConnParams = ( 'servicePath' => 'org.freedesktop.hostname1', 'objectPath' => '/org/freedesktop/hostname1' ); + return \%dbusConnParams; +} + +=pod + +=head2 _getHosts + +=head3 OUTPUT + + @result: array of hashes; each one of them represent a host definition from the hosts configuration file + + NOTE: the 'hosts' item into each hash is an array: it contains the hostname and -eventually- the aliases + +=head3 DESCRIPTION + +retrieve data from the hosts file (/etc/hosts) using the Config::Hosts module + +=cut + +sub _getHosts { + my $self = shift(); + # $self->configHosts(Config::Hosts->new()); + my $hosts = $self->configHosts->read_hosts(); + my @result = (); + while( my ($key, $value) = each(%{$hosts})){ + if($self->configHosts->determine_ip_or_host($key) == $is_ip){ + my $tmp = {}; + $tmp = $self->configHosts->query_host($key); + $tmp->{'ip'} = $key; + push @result,$tmp; + } + } + return @result; +} + +sub _insertHost { + my $self = shift(); + # remember that the order matters! + my $ip = shift(); + my @host_definitions = @_; + # $self->configHosts = Config::Hosts->new(); + return $self->configHosts->insert_host(ip => $ip, hosts => @host_definitions); +} + +sub _dropHost { + my $self = shift(); + my $host_ip = shift(); + return $self->configHosts->delete_host($host_ip); +} + +sub _modifyHost { + my $self = shift(); + my $host_ip = shift(); + my @host_definitions = @_; + return $self->configHosts->update_host($host_ip, hosts => @host_definitions); +} + +sub _writeHosts { + my $self = shift(); + return $self->configHosts->write_hosts(); +} + +sub _dbus_connection { + my $self = shift(); + my %params = %{$self->dbusConnectionParams()}; + my $bus = Net::DBus->system; + my $service = $bus->get_service($params{'servicePath'}); + my $object = $service->get_object($params{'objectPath'}); + return $object; +} + +sub _dbus_inquiry { + my $self = shift(); + my $required_field = shift(); + my $object = $self->_dbus_connection(); + my %params = %{$self->dbusConnectionParams()}; + my $properties = $object->GetAll($params{'servicePath'}); + return $properties->{$required_field} if(defined($properties->{$required_field})); + return 0; +} + +sub _dbus_setup { + my $self = shift(); + my $attribute = shift(); + my $value = shift(); + my $object = $self->_dbus_connection(); + if($attribute eq "Hostname") + { + $object->SetHostname($value,1); + } + elsif($attribute eq "PrettyHostname") + { + $object->SetPrettyHostname($value,1); + } + elsif($attribute eq "StaticHostname") + { + $object->SetStaticHostname($value,1); + } + elsif($attribute eq "Chassis") + { + $object->SetChassis($value,1); + } + elsif($attribute eq "IconName") + { + $object->SetIconName($value,1); + } +} + +sub _getLocalHostName { + my $self = shift(); + return $self->_dbus_inquiry('Hostname'); +} + +sub _getLocalPrettyHostName { + my $self = shift(); + return $self->_dbus_inquiry('PrettyHostname'); +} + +sub _getLocalStaticHostName { + my $self = shift(); + return $self->_dbus_inquiry('StaticHostname'); +} + +sub _getLocalChassis { + my $self = shift(); + return $self->_dbus_inquiry('Chassis'); +} + +sub _getLocalIconName { + my $self = shift(); + return $self->_dbus_inquiry('IconName'); +} + +sub _setLocalHostName { + my $self = shift(); + my $hostname = shift(); + $self->_dbus_setup('Hostname',$hostname); +} + +sub _setLocalPrettyHostName { + my $self = shift(); + my $value = shift(); + $self->_dbus_setup('PrettyHostname',$value); +} + +sub _setLocalStaticHostName { + my $self = shift(); + my $value = shift(); + $self->_dbus_setup('StaticHostname',$value); +} + +sub _setLocalIconName { + my $self = shift(); + my $value = shift(); + $self->_dbus_setup('IconName',$value); +} + +sub _setLocalChassis { + my $self = shift(); + my $value = shift(); + $self->_dbus_setup('Chassis',$value); +} + +1; |