This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description
```
8888888b. 888 .d8888b.
888 Y88b 888 d88P Y88b
888 888 888 888 888
888 d88P 8888b. 88888b. .d8888b 88888b. .d88b. 888d888 888 .d88b. 88888b.
8888888P" "88b 888 "88b d88P" 888 "88b d8P Y8b 888P" 888 88888 d8P Y8b 888 "88b
888 T88b .d888888 888 888 888 888 888 88888888 888 888888 888 888 88888888 888 888
888 T88b 888 888 888 888 Y88b. 888 888 Y8b. 888 Y88b d88P Y8b. 888 888
888 T88b "Y888888 888 888 "Y8888P 888 888 "Y8888 888 "Y8888P88 "Y8888 888 888
```

File generator that renders templates using Rancher API. Inspired by
[docker-gen](https://github.com/jwilder/docker-gen)

This program listens for changes on Rancher services and renders a
[Jinja2](http://jinja.pocoo.org/docs/dev/) template. It also has the ability
no run a notification command after the template has been rendered. This could
be useful for generating configuration files for services like Nginx.

## Installation

pip install rancher-gen


## How to use rancher-gen

```
usage: rancher-gen [--host HOST] [--port PORT] [--access-key ACCESS_KEY]
[--secret-key SECRET_KEY] [--project-id PROJECT_ID] [-h]
[--log-level {DEBUG,INFO,WARNING,CRITICAL,ERROR}]
[--stack STACK] [--service SERVICE] [--ssl]
[--notify NOTIFY]
template dest

Generate files from rancher meta-data

positional arguments:
template Path to template to generate
dest Output path for generated file

named arguments:
--host HOST Rancher host (defaults to localhost)
--port PORT Rancher port (defaults to 80 or 443 if ssl is
specified)
--access-key ACCESS_KEY
The Rancher access key
--secret-key SECRET_KEY
The Rancher secret key
--project-id PROJECT_ID
Rancher's project id

optional arguments:
-h, --help show this help message and exit
--log-level {DEBUG,INFO,WARNING,CRITICAL,ERROR}
Set the log level.
--stack STACK The name of the rancher stack
--service SERVICE The name of the rancher service
--ssl User secure connections (https and wss)
--notify NOTIFY Command to run after template is generated (e.g
restart some-service)

```

In order to run rancher-gen, you must specify at least the following parameters:
* host: The ip/dns name of the rancher server.
* port: The port of the rancher server. It defaults to 80 or 443 for SSL.
* access-key: The access key to access the Rancher server.
* secret-key: The secret key to access the Rancher server.
* proejct-id: The project id (environment) from Rancher.

## What's passed to the templates
A list of container instances is passed to the template when is rendered. So,
you can do something like:

{% for container in containers %}
{{container['primaryIpAddress']}}
{% endfor %}

### Example of container data that is being passed to the template

```
{
"id": "1i258",
"type": "container",
"links": {
"self": "…/v1/projects/1a5/containers/1i258",
"account": "…/v1/projects/1a5/containers/1i258/account",
"credentials": "…/v1/projects/1a5/containers/1i258/credentials",
"healthcheckInstanceHostMaps": "…/v1/projects/1a5/containers/1i258/healthcheckinstancehostmaps",
"hosts": "…/v1/projects/1a5/containers/1i258/hosts",
"instanceLabels": "…/v1/projects/1a5/containers/1i258/instancelabels",
"instanceLinks": "…/v1/projects/1a5/containers/1i258/instancelinks",
"instances": "…/v1/projects/1a5/containers/1i258/instances",
"mounts": "…/v1/projects/1a5/containers/1i258/mounts",
"ports": "…/v1/projects/1a5/containers/1i258/ports",
"serviceEvents": "…/v1/projects/1a5/containers/1i258/serviceevents",
"serviceExposeMaps": "…/v1/projects/1a5/containers/1i258/serviceexposemaps",
"services": "…/v1/projects/1a5/containers/1i258/services",
"targetInstanceLinks": "…/v1/projects/1a5/containers/1i258/targetinstancelinks",
"volumes": "…/v1/projects/1a5/containers/1i258/volumes",
"stats": "…/v1/projects/1a5/containers/1i258/stats",
"containerStats": "…/v1/projects/1a5/containers/1i258/containerstats",
},
"actions": {
"update": "…/v1/projects/1a5/containers/1i258/?action=update",
"stop": "…/v1/projects/1a5/containers/1i258/?action=stop",
"restart": "…/v1/projects/1a5/containers/1i258/?action=restart",
"migrate": "…/v1/projects/1a5/containers/1i258/?action=migrate",
"logs": "…/v1/projects/1a5/containers/1i258/?action=logs",
"setlabels": "…/v1/projects/1a5/containers/1i258/?action=setlabels",
"execute": "…/v1/projects/1a5/containers/1i258/?action=execute",
"proxy": "…/v1/projects/1a5/containers/1i258/?action=proxy",
},
"name": "foo_nginx2_1",
"state": "running",
"accountId": "1a5",
"blkioDeviceOptions": null,
"build": null,
"capAdd": null,
"capDrop": null,
"command": null,
"cpuSet": null,
"cpuShares": null,
"createIndex": 1,
"created": "2016-09-07T01:37:19Z",
"createdTS": 1473212239000,
"dataVolumeMounts": {},
"dataVolumes": [
"/tmp/nginxconf:/nginxconf",
],
"dataVolumesFrom": null,
"deploymentUnitUuid": "e4af719b-39ad-4576-8402-8a29a6ec97d6",
"description": null,
"devices": null,
"dns": [
"169.254.169.250",
],
"dnsSearch": [
3items"foo.rancher.internal",
"nginx2.foo.rancher.internal",
"rancher.internal",
],
"domainName": null,
"entryPoint": null,
"environment": {
"NGINX_RUN_TYPE": "rancher-gen",
"RANCHER_GEN_ACCESS_KEY": "37AF1F5CD18843DF00CC",
"RANCHER_GEN_HOST": "192.168.0.15",
"RANCHER_GEN_OPTIONS": "--port 8080 --stack foo --service hello",
"RANCHER_GEN_PROJECT_ID": "1a5",
"RANCHER_GEN_SECRET_KEY": "7D7Bio7bcK1vGbj5jNGVCnAEZFrnmZXPjaEZ8Fs2",
},
"expose": null,
"externalId": "f61757f4ede26d6bbbb2ddc31aa8b17dd4227a3bbca12225ddab66e77d76971d",
"extraHosts": null,
"firstRunning": "2016-09-07T01:37:20Z",
"firstRunningTS": 1473212240000,
"healthCheck": null,
"healthState": null,
"hostId": "1h2",
"hostname": null,
"imageUuid": "docker:pitrho/nginx:dev",
"kind": "container",
"labels": {
"io.rancher.project.name": "foo",
"io.rancher.service.deployment.unit": "e4af719b-39ad-4576-8402-8a29a6ec97d6",
"io.rancher.service.launch.config": "io.rancher.service.primary.launch.config",
"io.rancher.project_service.name": "foo/nginx2",
"io.rancher.stack.name": "foo",
"io.rancher.stack_service.name": "foo/nginx2",
"io.rancher.service.hash": "ddf05372f057253876d50b81c26eb1a350438d49",
"io.rancher.container.uuid": "90028a61-6fd5-460a-a8b7-f90bcaf664f2",
"io.rancher.container.name": "foo_nginx2_1",
"io.rancher.container.ip": "10.42.172.71/16",
},
"logConfig": {},
"lxcConf": null,
"memory": null,
"memorySwap": null,
"nativeContainer": false,
"networkContainerId": null,
"networkMode": "managed",
"pidMode": null,
"ports": [
"80:80/tcp",
],
"primaryIpAddress": "10.42.172.71",
"privileged": false,
"publishAllPorts": false,
"readOnly": false,
"registryCredentialId": null,
"removed": null,
"requestedHostId": null,
"restartPolicy": null,
"securityOpt": null,
"startCount": 1,
"startOnCreate": true,
"stdinOpen": false,
"systemContainer": null,
"transitioning": "no",
"transitioningMessage": null,
"transitioningProgress": null,
"tty": false,
"user": null,
"uuid": "90028a61-6fd5-460a-a8b7-f90bcaf664f2",
"version": "0",
"volumeDriver": null,
"workingDir": null,
}
```


## Examples

### Listening for changes at the project level

rancher-gen --host rancher.mycompany.com --port 8080 --access-key 1234567890 --secret-key 123ABC456DEF789GHI --project-id 1a5 /tmp/template.j2 /tmp/output.txt

### Listening for changes at the stack level

rancher-gen --host rancher.mycompany.com --port 8080 --access-key 1234567890 --secret-key 123ABC456DEF789GHI --project-id 1a5 --stack mystack /tmp/template.j2 /tmp/output.txt

### Listening for changes at the service level

rancher-gen --host rancher.mycompany.com --port 8080 --access-key 1234567890 --secret-key 123ABC456DEF789GHI --project-id 1a5 --stack mystack --service myservice /tmp/template.j2 /tmp/output.txt

### Using secure connections

rancher-gen --host rancher.mycompany.com --access-key 1234567890 --secret-key 123ABC456DEF789GHI --project-id 1a5 --stack mystack --service myservice --ssl /tmp/template.j2 /tmp/output.txt

### Creating nginx config and reloading (notify)

rancher-gen --host rancher.mycompany.com --port 8080 --access-key 1234567890 --secret-key 123ABC456DEF789GHI --project-id 1a5 --stack mystack --service myservice --ssl --notify "service nginx reload" /tmp/default.tmpl /etc/nginx/sites-enabled/default

## License
MIT
Release History

Release History

0.2.1

This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.2.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.1.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
rancher-gen-0.2.1.tar.gz (13.5 kB) Copy SHA256 Checksum SHA256 Source Oct 7, 2016

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS HPE HPE Development Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting