NAME

Rex::Transaction - Transaction support

DESCRIPTION

With this module you can define transactions and rollback scenarios on failure.

SYNOPSIS

use Rex::Transaction;

task 'do-something', 'server01', sub {
  transaction {
    on_rollback {
      rmdir '/tmp/mydata';
    };

    mkdir '/tmp/mydata';
    upload 'files/myapp.tar.gz', '/tmp/mydata';
    run 'tar xzf myapp.tar.gz -C /tmp/mydata';
    if ( $? != 0 ) { die('Error extracting myapp.tar.gz'); }
  };
};

EXPORTED FUNCTIONS

transaction($codeRef)

Start a transaction for $codeRef. If $codeRef dies, Rex will run the on_rollback code to roll back the transaction.

task 'deploy', group => 'frontend', sub {
  on_rollback {
    rmdir '...';
  };

  deploy 'myapp.tar.gz';
};

task 'restart_server', group => 'frontend', sub {
  service apache2 => 'restart';
};

task 'all', group => 'frontend', sub {
  transaction {
    do_task [qw/deploy restart_server/];
  };
};

on_rollback($codeRef)

This will execute $codeRef if a step in the transaction fails.