rerun

NAME

rerun - Take your shell scripts and turn them into powerful full featured management utilities
with no extra programming.

SYNOPSYS

rerun [-h][-v][-V][--version] [-M <dir>] [module:[command [options]]]

DESCRIPTION

You are never going to get rid of bash scripts entirely. Rerun creates a nice interface
for users and a framework for the scripters that makes you look good and a better team player.

Rerun is a simple command runner that turns loose shell scripts
into modular automation. Rerun will help you
organize your implementation into well defined command interfaces.
Collections of management modules can be archived and delivered as
a single executable to facilitate team hand offs.
Using the "stubbs" module, rerun will even facilitate
developing modules using a test-driven development practice.

What does rerun give you?

A framework to script writing that does things like generate option parsers

For the module developer, rerun is a trivial framework following
simple conventions that easily fit in a shell environment.
Rerun includes a module development tool called "stubbs" that
helps create and evolve rerun modules. Stubbs contains
commands to automate option processing code, metadata definition
and unit testing.

Internally, rerun implements a simple dispatching mechanism to look up named
commands and execute them. Commands are logically named and
have a corresponding script.

Commands reside in a module and can have named
parameters called options. Each option is named,
described and can also be defined to use a default value
or say whether it is required or not.

Rerun modules can also declare metadata describing name, description
and other aspects of each command. Rerun makes use of this metadata
to support a listing mode, a feature where modules and command usage
are summarized for end users.

Listing

$ rerun waitfor
http: "wait for url to become available"
--url <>: "the url to check"
--interval <30>: "the time interval"
ping: "wait for ping response from host"
--host <"">: "host to check"
--interval <30>: "the time interval"

The listing consists of info about command options
including default values if they were described with option metadata.

Options that declare a default value are shown
with a string between the "<>" characters.

For example, notice how "--interval" option shows <30>.
The "30" is the default value assigned to the "--interval" option.

See the "Environment" section below to learn about the
RERUN_MODULES environment variable. This variable
specifies the directory where rerun modules exist.

Bash completion

If you are a Bash shell user, be sure to source the bash_completion.sh file.
It provides listing via the tab key.

Type rerun and then the tab key. The shell will generate
a list of existing modules.

$ rerun[TAB][TAB]
waitfor

Rerun shows there is a module named "waitfor" installed.

Typing the tab key again will show the commands inside the "waitfor" module:

$ rerun waitfor: [TAB]
http ping

In this case, two commands are found and listed. Press tab again
and choose a command.
After accepting a command, typing the tab key will show arguments.

$ rerun waitfor:ping -[TAB]
--host --interval

The waitfor:ping command accepts options (--host <> --interval <>).

Command execution

Commands are executed by stating the module,
command and possibly options. The basic usage form is
"rerunmodule:command [options]".

To run the "ping" command in the waitfor module, type:

$ rerun waitfor:ping --host localhost
OK: localhost is pingable.

The outputed string "OK: localhost is pingable." is the printed result.
In this example, "30" is the interval option's default value
as defined in the module metadata.

Command options are passed after the "module:command" string.
Tell waitfor to wait for the url, "http://google.com" by specifying
the --url <> option:

$ rerun waitfor:http --url http://google.com
OK

If the 'waitfor' module is stored in /var/rerun, then the command usage
would be:

$ rerun -M /var/rerun waitfor:ping
OK: localhost is pingable.

Archives

An archive contains all the rerun modules you need
(you might have a library of them) and gives you
the same exact interface as rerun,... all in one file!

Specifically, an archive is a set of modules
and rerun itself packaged into a self extracting
script (by default in a file named "rerun.sh").
Archives can be useful if you want
to share a single self contained executable that contains all the needed modules.

Run an archive script like you would run rerun.

You can execute an archive via bash like so:

$ bash rerun.sh <module>:<command> --your options

If the execute bit is set, invoke the archive directly.

Here the archive is executed without arguments which causes the archive
to list the modules contained within it.

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the License for the specific
language governing permissions and limitations under the License.