NAME

Rex::Commands::Pkg - Install/Remove Software packages

DESCRIPTION

With this module you can install packages and files.

SYNOPSIS

install file => "/etc/passwd", {
                    source => "/export/files/etc/passwd"
                };

install package => "perl";

EXPORTED FUNCTIONS

install($type, $data, $options)

The install function can install packages (for CentOS, OpenSuSE and Debian) and files.

installing a package (This is only supported on CentOS, OpenSuSE and Debian systems.)
task "prepare", "server01", sub {
   install package => "perl";
   
   # or if you have to install more packages.
   install package => [ 
                          "perl",
                          "ntp",
                          "dbus",
                          "hal",
                          "sudo",
                          "vim",
                      ];
};
installing a file

This is deprecated since 0.9. Please use File file instead.

task "prepare", "server01", sub {
   install file => "/etc/passwd", {
                       source => "/export/files/etc/passwd",
                       owner  => "root",
                       group  => "root",
                       mode   => 644,
                   };
};
installing a file and do somthing if the file was changed.
task "prepare", "server01", sub {
   install file => "/etc/httpd/apache2.conf", {
                       source    => "/export/files/etc/httpd/apache2.conf",
                       owner     => "root",
                       group     => "root",
                       mode      => 644,
                       on_change => sub { say "File was modified!"; }
                   };
};
installing a file from a template.
task "prepare", "server01", sub {
   install file => "/etc/httpd/apache2.tpl", {
                       source    => "/export/files/etc/httpd/apache2.conf",
                       owner     => "root",
                       group     => "root",
                       mode      => 644,
                       on_change => sub { say "File was modified!"; },
                       template  => {
                                       greeting => "hello",
                                       name     => "Ben",
                                    },
                   };
};
remove($type, $package, $options)

This function will remove the given package from a system.

task "cleanup", "server01", sub {
   remove package => "vim";
};
update_system

This function do a complete system update.

For example apt-get upgrade or yum update.

task "update-system", "server1", sub {
   update_system;
};
installed_packages

This function returns all installed packages and their version.

task "get-installed", "server1", sub {
   
    for my $pkg (installed_packages()) {
       say "name     : " . $pkg->{"name"};
       say "  version: " . $pkg->{"version"};
    }
    
};
is_installed

This function tests if $package is installed. Returns 1 if true. 0 if false.

task "isinstalled", "server01", sub {
   if( is_installed("rex") ) {
      say "Rex is installed";
   }
   else {
      say "Rex is not installed";
   }
};
update_package_db

This function updates the local package database. For example, on CentOS it will execute yum makecache.

task "update-pkg-db", "server1", "server2", sub {
   update_package_db;
   install package => "apache2";
};
repository($action, %data)

Add or remove a repository from the package manager.

For Debian: If you have no source repository, or if you don't want to add it, just remove the source parameter.

task "add-repo", "server1", "server2", sub {
   repository "add" => "repository-name",
        url        => "http://rex.linux-files.org/debian/squeeze",
        distro     => "squeeze",
        repository => "rex",
        source     => 1;
};

For ALT Linux: If repository is unsigned, just remove the sign_key parameter.

task "add-repo", "server1", "server2", sub {
   repository "add" => "altlinux-sisyphus",
        url        => "ftp://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus",
        sign_key   => "alt",
        arch       => "noarch, x86_64",
        repository => "classic";
};

For CentOS, Mageia and SuSE only the name and the url are needed.

task "add-repo", "server1", "server2", sub {
   repository add => "repository-name",
        url => 'http://rex.linux-files.org/CentOS/$releasever/rex/$basearch/';
    
};

To remove a repository just delete it with its name.

task "rm-repo", "server1", sub {
   repository remove => "repository-name";
};

You can also use one call to repository to add repositories on multiple platforms:

task "add-repo", "server1", "server2", sub {
  repository add => myrepo => {
     Ubuntu => {
        url => "http://foo.bar/repo",
        distro => "precise",
        repository => "foo",
     },
     Debian => {
        url => "http://foo.bar/repo",
        distro => "squeeze",
        repository => "foo",
     },
     CentOS => {
        url => "http://foo.bar/repo",
     },
  };
};
package_provider_for $os => $type;

To set an other package provider as the default, use this function.

user "root";
    
group "db" => "db[01..10]";
package_provider_for SunOS => "blastwave";
   
task "prepare", group => "db", sub {
    install package => "vim";
};

This example will install vim on every db server. If the server is a Solaris (SunOS) it will use the blastwave Repositories.