

h1. Configuration

The files in the {{etc}} directory are used to set the startup configuration.  

For dynamic configuration, Karaf provides a suite of command to administer the configuration service grouped under {{config}}. To learn about all currently supported configuration commands type:

|| Command                                || Description   ||
| [{{cancel}}|/commands/config-cancel]     | Change the changes to the configuration being edited. |
| [{{edit}}|/commands/config-edit]         | Create or edit a configuration. |
| [{{list}}|/commands/config-list]         | List existing configurations. |
| [{{propdel}}|/commands/config-propdel]   | Delete a property from the edited configuration. |
| [{{proplist}}|/commands/config-proplist] | List properties from the edited configuration. |
| [{{propset}}|/commands/config-propset]   | Set a property on the edited configuration. |
| [{{update}}|/commands/config-update]     | Save and propagate changes from the configuration being edited. |


h2. Editing

h3. Select Configuration To Edit

For example to edit configuration {{foo.bar}}:

{code}
karaf@root> config:edit foo.bar
{code}

h3. Modify Properties

Use:
 
 * [{{config:proplist}}|/commands/config-proplist] to list existing properties
 * [{{config:propdel}}|/commands/config-propdel] to delete existing properties
 * [{{config:propset}}|/commands/config-propset] to set a new value for a property

Any number of properties can be modified within a single editing session. 

h3. Commit Or Rollback Changes

Use

 * [{{config:update}}|/commands/config-update] to commit all changes made in the current session
 * [{{config:cancel}}|/commands/config-cancel] to roll back any changes made in the current session


