# osbuild-composer

An HTTP service for building bootable OS images. It provides the same API as [lorax-composer](https://github.com/weldr/lorax) but in the background it uses [osbuild](https://github.com/osbuild/osbuild) to create the images.

You can control it in [Cockpit](https://github.com/weldr/cockpit-composer) or using the [composer-cli](https://weldr.io/lorax/composer-cli.html). To get started on Fedora, run:

```
# dnf install cockpit-composer golang-github-osbuild-composer composer-cli
# systemctl enable --now cockpit.socket
# systemctl enable --now osbuild-composer.socket
```

Now you can access the service using `composer-cli`, for example:

```
composer-cli status show
```

or using a browser: `http://localhost:9090`

## API documentation

Please refer to the [lorax-composer](https://github.com/weldr/lorax)'s documenation as osbuild-composer is a drop-in replacement.

## High-level overview

![overview](docs/osbuild-composer.svg)

### Frontends

`osbuild-composer` is meant to be used with 2 different front-ends. The primary one, which is meant for general use, is cockpit-composer. It is part of the Cockpit project and unless you have a strong reason not to use it, you should use it. `composer-cli` is a command line tool that can be used with `osbuild-composer`.

### Compose
* Compose is what the user submits over one of the frontends
* It contains of one or more **image builds**
* It contains zero or more **upload actions**

### Image build
* The resulting *image* has a *type*: https://github.com/osbuild/osbuild-composer/blob/master/internal/distro/fedora30/distro.go#L19
* Running build in osbuild-composer is referred to as a "job" (internal terminology, not related to end-user experience)

### Job
* What composer submits to a worker
* Is a unit of work performed by `osbuild` (internally it is a single execution of `osbuild`)
* Consists of **one** image build and **zero or more** Upload actions

### Image type
* In the cockpit-composer, for examples these are image types:
  * Openstack
  * Azure
  * AWS
* As of now, we name them internally by their file format: vhd, ami, etc.
* You can see a list of types by executing: `composer-cli compose types`

### Upload action
* Each image can be, but does not have to be, uploaded to a remote location
* One image can be uploaded to multiple locations


## Testing

See [test/README.md](test/README.md)
