241 lines
4.3 KiB
Markdown
241 lines
4.3 KiB
Markdown
Genesis Index
|
|
=============
|
|
|
|
`genesis-index` is a small CF-ready application that tracks
|
|
stemcells and releases from [bosh.io](https://bosh.io) and other
|
|
places. The [genesis][genesis] utility uses the index to look up
|
|
versions, URLs and SHA1 checksums of said releases and stemcells.
|
|
|
|
|
|
Using the CLI
|
|
=============
|
|
|
|
`indexer` is a small Bash script that provides a basic
|
|
command-line interface for dealing with the Genesis Index.
|
|
|
|
It obeys the following environment variables:
|
|
|
|
- `GENESIS_INDEX` - The base URL of the Genesis Index. If not
|
|
set, defaults to `https://genesis.starkandwayne.com`
|
|
- `GENESIS_CREDS` - The username and password for accessing the
|
|
protected parts of the Index API, separated by a colon.
|
|
- `INDEXER_DEBUG` - Set to a non-empty value to enable debugging
|
|
|
|
Here are the commands:
|
|
|
|
```
|
|
indexer version (release|stemcell) NAME [VERSION]
|
|
indexer show (release|stemcell) NAME
|
|
indexer check (release|stemcell) NAME VERSION
|
|
indexer create (release|stemcell) NAME URL
|
|
indexer remove (release|stemcell) NAME [VERSION]
|
|
indexer releases
|
|
indexer stemcells
|
|
indexer help
|
|
```
|
|
|
|
So, for example, to get the latest version of the SHIELD BOSH
|
|
release:
|
|
|
|
```
|
|
$ indexer version release shield
|
|
```
|
|
|
|
Or, to get the SHA1 sum of v19 of the Consul BOSH release:
|
|
|
|
```
|
|
$ indexer version release consul 19
|
|
```
|
|
|
|
|
|
API Overview
|
|
============
|
|
|
|
The Genesis Index API strives to be simple and clean
|
|
|
|
## Get a List of Tracked Releases
|
|
|
|
```
|
|
GET /v1/release
|
|
```
|
|
|
|
## Get Latest Versions of All Tracked Releases
|
|
|
|
```
|
|
GET /v1/release/latest
|
|
```
|
|
|
|
## Get All Release Versions
|
|
|
|
```
|
|
GET /v1/release/:name
|
|
```
|
|
|
|
## Get Release Metadata
|
|
|
|
```
|
|
GET /v1/release/:name/metadata
|
|
```
|
|
|
|
## Get The Latest Release Version
|
|
|
|
```
|
|
GET /v1/release/:name/latest
|
|
```
|
|
|
|
## Get a Specific Release Version
|
|
|
|
```
|
|
GET /v1/release/:name/v/:version
|
|
```
|
|
|
|
## Start Tracking a New Release
|
|
|
|
(this endpoint requires authentication)
|
|
|
|
```
|
|
POST /v1/release
|
|
{
|
|
"name": "release name",
|
|
"url": "https://wherever/to/get/it?v={{version}}"
|
|
}
|
|
```
|
|
|
|
## Check a Specific Release Version
|
|
|
|
(this endpoint requires authentication)
|
|
|
|
```
|
|
PUT /v1/release/:name/v/:version
|
|
```
|
|
|
|
## Stop Tracking a Release
|
|
|
|
(this endpoint requires authentication)
|
|
|
|
```
|
|
DELETE /v1/release/:name
|
|
```
|
|
|
|
## Drop a Release Version
|
|
|
|
(this endpoint requires authentication)
|
|
|
|
```
|
|
DELETE /v1/release/:name/v/:version
|
|
```
|
|
|
|
## Get a List of Tracked Stemcells
|
|
|
|
```
|
|
GET /v1/stemcell
|
|
```
|
|
|
|
## Get Latest Versions of All Tracked Stemcells
|
|
|
|
```
|
|
GET /v1/stemcell/latest
|
|
```
|
|
|
|
## Get All Stemcell Versions
|
|
|
|
```
|
|
GET /v1/stemcell/:name
|
|
```
|
|
|
|
## Get Stemcell Metadata
|
|
|
|
```
|
|
GET /v1/stemcell/:name/metadata
|
|
```
|
|
|
|
## Get The Latest Stemcell Version
|
|
|
|
```
|
|
GET /v1/stemcell/:name/latest
|
|
```
|
|
|
|
## Get a Specific Stemcell Version
|
|
|
|
```
|
|
GET /v1/stemcell/:name/v/:version
|
|
```
|
|
|
|
## Start Tracking a New Stemcell
|
|
|
|
(this endpoint requires authentication)
|
|
|
|
```
|
|
POST /v1/stemcell
|
|
{
|
|
"name": "stemcell name",
|
|
"url": "https://wherever/to/get/it?v={{version}}"
|
|
}
|
|
```
|
|
|
|
## Check a Specific Stemcell Version
|
|
|
|
(this endpoint requires authentication)
|
|
|
|
```
|
|
PUT /v1/stemcell/:name/v/:version
|
|
```
|
|
|
|
## Stop Tracking a Stemcell
|
|
|
|
(this endpoint requires authentication)
|
|
|
|
```
|
|
DELETE /v1/stemcell/:name
|
|
```
|
|
|
|
## Drop a Stemcell Version
|
|
|
|
(this endpoint requires authentication)
|
|
|
|
```
|
|
DELETE /v1/stemcell/:name/v/:version
|
|
```
|
|
|
|
|
|
Installation And Operation
|
|
==========================
|
|
|
|
To deploy to Pivotal Web Services:
|
|
|
|
```
|
|
cf push
|
|
```
|
|
|
|
You need to bind a PostgreSQL database to your running app. The
|
|
application will automatically detect the service if it is tagged
|
|
`postgres`.
|
|
|
|
The following environment variables should also be set:
|
|
|
|
- `AUTH_USERNAME` - The username for authenticated endpoints
|
|
- `AUTH_PASSWORD` - The password for authenticated endpoints
|
|
|
|
|
|
Pipelining The Updates
|
|
======================
|
|
|
|
Tracking all those versions and letting Genesis Index know when
|
|
they need updated is tedious work. Let's make the robots do it!
|
|
|
|
The `pipeline/` directory contains the scripts for building a
|
|
concourse pipeline based off of the current configured set of
|
|
tracked releases and stemcells. To use it:
|
|
|
|
```
|
|
./pipeline/repipe
|
|
```
|
|
|
|
At the moment, it's tied directly to the Stark & Wayne concourse
|
|
installation, under the alias `sw`. That may change in the future
|
|
|
|
(Note: the `ci/` directory name is reserved for a future in which
|
|
we want / need to do CI/CD for the Genesis Index code / deployment
|
|
itself.)
|
|
if anyone is interested in more flexibility.
|