
Rex::Commands::File - Transparent File Manipulation

With this module you can manipulate files.

task "read-passwd", "server01", sub {
my $fh = file_read "/etc/passwd";
for my $line = ($fh->read_all) {
print $line;
}
$fh->close;
};
task "read-passwd2", "server01", sub {
say cat "/etc/passwd";
};
task "write-passwd", "server01", sub {
my $fh = file_write "/etc/passwd";
$fh->write("root:*:0:0:root user:/root:/bin/sh\n");
$fh->close;
};
delete_lines_matching "/var/log/auth.log", matching => "root";
delete_lines_matching "/var/log/auth.log", matching => qr{Failed};
delete_lines_matching "/var/log/auth.log",
matching => "root", qr{Failed}, "nobody";
file "/path/on/the/remote/machine",
source => "/path/on/local/machine";
file "/path/on/the/remote/machine",
content => "foo bar";
file "/path/on/the/remote/machine",
source => "/path/on/local/machine",
owner => "root",
group => "root",
mode => 400,
on_change => sub { say "File was changed."; };

Parse a template and return the content.
my $content = template("/files/templates/vhosts.tpl",
name => "test.lan",
webmaster => 'webmaster@test.lan');
This function is the successor of install file. Please use this function to upload files to you server.
task "prepare", "server1", "server2", sub {
file "/file/on/remote/machine",
source => "/file/on/local/machine";
file "/etc/hosts",
content => template("templates/etc/hosts.tpl"),
owner => "user",
group => "group",
mode => 700,
on_change => sub { say "Something was changed." };
file "/etc/motd",
content => `fortune`;
file "/etc/httpd/conf/httpd.conf",
source => "/files/etc/httpd/conf/httpd.conf",
on_change => sub { service httpd => "restart"; };
};
If source is relative it will search from the location of your Rexfile.
This function opens a file for writing (it will truncate the file if it already exists). It returns a Rex::FS::File object on success.
On failure it will die.
my $fh;
eval {
$fh = file_write("/etc/groups");
};
# catch an error
if($@) {
print "An error occured. $@.\n";
exit;
}
# work with the filehandle
$fh->write("...");
$fh->close;
This function opens a file for reading. It returns a Rex::FS::File object on success.
On failure it will die.
my $fh;
eval {
$fh = read("/etc/groups");
};
# catch an error
if($@) {
print "An error occured. $@.\n";
exit;
}
# work with the filehandle
my $content = $fh->read_all;
$fh->close;
This function returns the complete content of $file_name as a string.
print cat "/etc/passwd";
Delete lines that match $regexp in $file.
task "clean-logs", sub {
delete_lines_matching "/var/log/auth.log" => "root";
};
Append $new_line to $file if none in @regexp is found.
task "add-group", sub {
append_if_no_such_line "/etc/groups", "mygroup:*:100:myuser1,myuser2", on_change => sub { service sshd => "restart"; };
};
This function extracts a file. Supported formats are .tar.gz, .tgz, .tar.Z, .tar.bz2, .tbz2, .zip, .gz, .bz2, .war, .jar.
task prepare => sub {
extract "/tmp/myfile.tar.gz",
owner => "root",
group => "root",
to => "/etc";
extract "/tmp/foo.tgz",
type => "tgz",
mode => "g+rwX";
};
Can use the type=> option if the file suffix has been changed. (types are tgz, tbz, zip, gz, bz2)
Search some string in a file and replace it.
task sar => sub {
sed qr{search}, "replace", "/var/log/auth.log";
};