:toc:
:toc-placement!:

= Galleon Provisioning

toc::[]

= Overview

Galleon is a provisioning tool designed to create and maintain software distributions that consist of one or more products (or components). The tool supports:

* adding products to a distribution;

** their default and customized configurations;

* removing products from a distribution;

* integration of the products in the distribution;

* resolution and validation of the resulting configuration and runtime dependencies;

* patching and version updates;

* product-specific provisioning plugins;

* detection of the changes in the provisioned distribution (its filesystem content and/or its configuration) applied by the user manually or by means of other management tools

** to be able to preserve them after a version upgrade (having made sure the changes are compatible in the new version)

** or create a provisioning configuration that could be used to reproduce the state of the distribution including the user changes;

* exporting the provisioning configuration of the current state of the distribution with the goal to reproduce it later at another location.

The tool includes a command-line interface and a public API. There is also a Maven plugin that allows provisioning a distribution according to the provided configuration.

= Download and Installation of the Command Line Tool

Releases of the command line tool are available on the link:https://github.com/wildfly/galleon/releases[releases page].

Download and unzip the release zip and add the `bin` dir to your system path. Use `galleon.sh` or `galleon.bat` to launch the tool.

= Project Modules

== Module `galleon-parent`

Defines main version and common dependencies of the project.

== Module `core`

General provisioning and feature-pack API. Which allows to provision the desired
installation specification at a specified location, install additional and/or
uninstall existing feature-packs, export the currently provisioned specification
to a file with the purpose to reproduce it at a different location.

== Module `cli`

Command line interface which allows to:

* Build feature-packs and install them into the Maven repository;
* Provision an installation by pulling the feature-packs from the
  Maven repository and installing them at the specified location.;
* View the currently provisioned installation specification;
* Export the currently provisioned installation specification to
  a file with goal to reproduce the installation later.

The Maven assembly plug-in is configured to create a single executable JAR
file which contains all the dependencies.

= CLI Commands

The CLI commands help is printed by calling the `help` command.

Full documentation of the CLI commands can be found in link:https://docs.wildfly.org/galleon/[this] documentation.

= Building and launching the tool
 
The tool can be built by executing the following Maven command:

[source,shell]
----
mvn clean install
----

The executable JAR will be built in `cli/target/galleon-cli.jar`

There is also a convenience `do.sh` script in the root directory
of the project. If executed w/o arguments, it'll build and launch the tool.

`./do.sh build` will only build the tool.
`./do.sh run` will only launch the already built tool.
