# Executor

Currently you have 2 types of drivers for the executors:

* localDriver
* openStackDriver

### LocalDriver

The local driver executes your builds on the server where Free Commit is installed. It requires no configuration.\
An executor will be created by default when Free Commit starts, with the driver set to localDriver.

{% hint style="info" %}
You can use this one if your builds don't require too much CPU time or if you prefer to scale vertically
{% endhint %}

### OpenStackDriver

The OpenStack driver is useful if you want to run an unlimited number of simultaneous builds or if you're concerned about your costs.\
It will allow you to start servers on demand, in just a few minutes while your provider uses OpenStack.

{% hint style="info" %}
This driver requires more configuration than the localDriver, you will need to fill in the variables to make it work
{% endhint %}

#### Variables to configure

| Variable                   | Description                                               | Required           |
| -------------------------- | --------------------------------------------------------- | ------------------ |
| OS\_REGION\_NAME           | Datacenter where to start the servers                     | Yes                |
| OS\_PASSWORD               | User password                                             | Yes                |
| OS\_IDENTITY\_API\_VERSION | Provided in RC file                                       | Yes                |
| IMAGE\_NAME                | OS of your server (provided by your provider)             | Yes                |
| OS\_USERNAME               | User name                                                 | Yes                |
| NETWORK\_NAME              | Network to attach on your server                          | Depend on provider |
| DOCKER\_HUB\_PASSWORD      | Used to pull your docker image ("from" in your spec file) | Yes                |
| DOCKER\_HUB\_USERNAME      | Used to pull your docker image ("from" in your spec file) | Yes                |
| OS\_PROJECT\_NAME          | Provided in RC file                                       | Yes                |
| OS\_AUTH\_URL              | Provided in RC file                                       | Yes                |
| FLAVOR\_NAME               | The hardware configuration of your server                 | Yes                |
| OS\_PROJECT\_ID            | Provided in RC file                                       | Yes                |
| OS\_INTERFACE              | Provided in RC file                                       | Yes                |
| OS\_PROJECT\_DOMAIN\_NAME  | Provided in RC file                                       | Yes                |
| VOLUME\_ID                 | If empty, your server will start with a new volume        | No                 |
| SECURITY\_GROUP\_NAME      |                                                           | Yes                |
| OS\_USER\_DOMAIN\_NAME     | Provided in RC file                                       | Yes                |

#### How it work ?

<img src="https://910696449-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F63PEX7D6niJNueQIYQit%2Fuploads%2FFa4XWjwU355AgsjPdNni%2Ffile.excalidraw.svg?alt=media&#x26;token=be6cea99-33eb-4b05-b299-5d54cb3cad8c" alt="" class="gitbook-drawing">

#### IP consideration

When starting temporary servers, the IPs are random, so if your builds need to SSH into other servers, you'll want to restrict your firewalls to only allow known IPs to SSH into. You'll need to use a VPN.

See [openvpn](https://romain.gitbook.io/free-commit/installation/openvpn "mention")

:warning:This step is optional

### Create executor

Go to Menu -> Executor -> New

The fields to create an executor are :

| Field  | Description      | Required |
| ------ | ---------------- | -------- |
| Name   | Name of executor | Yes      |
| Driver | Driver to use    | Yes      |
