An index for Genesis to look up Stemcell / Release metadata.
Go to file
Norman Abramovitz 07122cc409
adding cflinuxfs3
2019-05-01 13:19:33 -07:00
Godeps Productionify for real deployment 2016-06-22 14:24:25 -04:00
pipeline Added nfs-volume release 2017-06-15 09:34:10 -07:00
.gitignore Use new /v1/:type/:name/metadata in repipe script 2016-06-22 23:37:24 -04:00
CODE_OF_CONDUCT.md Updating CODE_OF_CONDUCT.md 2019-01-15 15:32:09 -05:00
LICENSE Initial Commit 2016-06-22 11:18:06 -04:00
README.md Better semver handling 2016-06-23 00:47:20 -04:00
api_release.go Check Release/Stemcell versions in-line with HTTP requests 2016-10-29 10:57:30 -04:00
api_stemcell.go Check Release/Stemcell versions in-line with HTTP requests 2016-10-29 10:57:30 -04:00
indexer Better semver handling 2016-06-23 00:47:20 -04:00
main.go Addressed PR feedback 2016-11-16 17:20:24 -05:00
manifest-test.yml Upgrade stack from cflinuxfs2 to cflinuxfs3 2019-03-06 04:08:09 -08:00
manifest.yml adding cflinuxfs3 2019-05-01 13:19:33 -07:00
release.go Support disabled releases 2016-11-16 12:48:11 -05:00
schema.go Support disabled releases 2016-11-16 12:48:11 -05:00
seed Added nfs-volume release 2017-06-15 09:34:10 -07:00
stemcell.go Check Release/Stemcell versions in-line with HTTP requests 2016-10-29 10:57:30 -04:00
update-url Updated garden releases with new URL, added update-url script for URL migrations 2017-01-14 12:16:04 -05:00
util.go Handle rc versions 2016-10-31 14:58:09 -04:00
vcap.go Support multiple service tags for identifying the db 2016-11-16 17:16:27 -05:00

README.md

Genesis Index

genesis-index is a small CF-ready application that tracks stemcells and releases from 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.