NAME

Rex::Commands::Fs - Filesystem commands

DESCRIPTION

With this module you can do file system tasks like creating a directory, removing files, move files, and more.

SYNOPSIS

my @files = list_files "/etc";

unlink("/tmp/file");

rmdir("/tmp");
mkdir("/tmp");

my %stat = stat("/etc/passwd");

my $link = readlink("/path/to/a/link");
symlink("/source", "/dest");

rename("oldname", "newname");

chdir("/tmp");

is_file("/etc/passwd");
is_dir("/etc");
is_writeable("/tmp");
is_writable("/tmp");

chmod 755, "/tmp";
chown "user", "/tmp";
chgrp "group", "/tmp";

EXPORTED FUNCTIONS

list_files("/path");

This function list all entries (files, directories, ...) in a given directory and returns a array.

task "ls-etc", "server01", sub {
  my @tmp_files = grep { /\.tmp$/ } list_files("/etc");
};

This command will not be reported.

ls($path)

Just an alias for list_files

symlink($from, $to)

This function will create a symlink from $from to $to.

task "symlink", "server01", sub {
  symlink("/var/www/versions/1.0.0", "/var/www/html");
};
ln($from, $to)

ln is an alias for symlink

unlink($file)

This function will remove the given file.

task "unlink", "server01", sub {
  unlink("/tmp/testfile");
};
rm($file)

This is an alias for unlink.

rmdir($dir)

This function will remove the given directory.

task "rmdir", "server01", sub {
  rmdir("/tmp");
};

Since: 0.45 Please use the file() resource instead.

task "prepare", sub {
  file "/tmp",
    ensure => "absent";
};
mkdir($newdir)

This function will create a new directory.

Since: 0.45 Please use the file() resource instead.

task "prepare", sub {
  file "/tmp",
    ensure => "directory",
    owner  => "root",
    group  => "root",
    mode   => 1777;
};

task "mkdir", "server01", sub {
  mkdir "/tmp";

  mkdir "/tmp",
    owner => "root",
    group => "root",
    mode => 1777;
};
chown($owner, $file)

Change the owner of a file or a directory.

chown "www-data", "/var/www/html";

chown "www-data", "/var/www/html",
               recursive => 1;

This command will not be reported.

If you want to use reports, please use the file() resource instead.

chgrp($group, $file)

Change the group of a file or a directory.

chgrp "nogroup", "/var/www/html";

chgrp "nogroup", "/var/www/html",
             recursive => 1;

This command will not be reported.

If you want to use reports, please use the file() resource instead.

chmod($mode, $file)

Change the permissions of a file or a directory.

chmod 755, "/var/www/html";

chmod 755, "/var/www/html",
         recursive => 1;

This command will not be reported.

If you want to use reports, please use the file() resource instead.

stat($file)

This function will return a hash with the following information about a file or directory.

mode
size
uid
gid
atime
mtime
task "stat", "server01", sub {
  my %file_stat = stat("/etc/passwd");
};

This command will not be reported.

is_file($file)

This function tests if $file is a file. Returns 1 if true. 0 if false.

task "isfile", "server01", sub {
  if( is_file("/etc/passwd") ) {
    say "it is a file.";
  }
  else {
    say "hm, this is not a file.";
  }
};

This command will not be reported.

is_dir($dir)

This function tests if $dir is a directory. Returns 1 if true. 0 if false.

task "isdir", "server01", sub {
  if( is_dir("/etc") ) {
    say "it is a directory.";
  }
  else {
    say "hm, this is not a directory.";
  }
};

This command will not be reported.

is_symlink($file)

This function tests if $file is a symlink. Returns 1 if true. 0 if false.

task "issym", "server01", sub {
  if( is_symlink("/etc/foo.txt") ) {
    say "it is a symlink.";
  }
  else {
    say "hm, this is not a symlink.";
  }
};

This command will not be reported.

is_readable($file)

This function tests if $file is readable. It returns 1 if true. 0 if false.

task "readable", "server01", sub {
  if( is_readable("/etc/passwd") ) {
    say "passwd is readable";
  }
  else {
    say "not readable.";
  }
};

This command will not be reported.

is_writable($file)

This function tests if $file is writable. It returns 1 if true. 0 if false.

task "writable", "server01", sub {
  if( is_writable("/etc/passwd") ) {
    say "passwd is writable";
  }
  else {
    say "not writable.";
  }
};

This command will not be reported.

is_writeable($file)

This is only an alias for is_writable.

This command will not be reported.

readlink($link)

This function returns the link endpoint if $link is a symlink. If $link is not a symlink it will die.

task "islink", "server01", sub {
  my $link;
  eval {
    $link = readlink("/tmp/testlink");
  };

  say "this is a link" if($link);
};

This command will not be reported.

rename($old, $new)

This function will rename $old to $new. Will return 1 on success and 0 on failure.

task "rename", "server01", sub {
  rename("/tmp/old", "/tmp/new");
};
mv($old, $new)

mv is an alias for rename.

chdir($newdir)

This function will change the current workdirectory to $newdir. This function currently only works local.

task "chdir", "server01", sub {
  chdir("/tmp");
};

This command will not be reported.

cd($newdir)

This is an alias of chdir.

df([$device])

This function returns a hashRef reflecting the output of df

task "df", "server01", sub {
   my $df = df();
   my $df_on_sda1 = df("/dev/sda1");
};

This command will not be reported.

du($path)

Returns the disk usage of $path.

task "du", "server01", sub {
  say "size of /var/www: " . du("/var/www");
};

This command will not be reported.

cp($source, $destination)

cp will copy $source to $destination (it is recursive)

task "cp", "server01", sub {
   cp("/var/www", "/var/www.old");
};
mount($device, $mount_point, @options)

Mount devices.

task "mount", "server01", sub {
  mount "/dev/sda5", "/tmp";
  mount "/dev/sda6", "/mnt/sda6",
         ensure    => "present",
         fs        => "ext3",
         options   => [qw/noatime async/],
         on_change => sub { say "device mounted"; };
  #
  # mount persistent with entry in /etc/fstab

  mount "/dev/sda6", "/mnt/sda6",
         ensure     => "persistent",
         fs         => "ext3",
         options    => [qw/noatime async/],
         on_change  => sub { say "device mounted"; };

  # to umount a device
 mount "/dev/sda6", "/mnt/sda6",
         ensure => "absent";

};
umount($mount_point)

Unmount device.

task "umount", "server01", sub {
  umount "/tmp";
};
glob($glob)
task "glob", "server1", sub {
  my @files_with_p = grep { is_file($_) } glob("/etc/p*");
};

This command will not be reported.