Docs and scripts on how to Rancher

To use the bin/console script, set these env vars:

RANCHER_URL
RANCHER_ACCESS_KEY
RANCHER_SECRET_KEY

To create a new environment (known as a project to the API):

(Hint: brew install jq for pretty output)

Get a real username and password: user: apiuser pass: rancher

Ask for a JSON Web Token

curl 'http://localhost:8080/v1/token'  \
-H 'Origin: http://localhost:8080' \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Accept-Language: en-US,en;q=0.8'  \
-H 'Content-Type: application/json' \
-H 'x-api-no-challenge: true' \
-H 'Accept: application/json' \
-H 'Referer: http://localhost:8080/login' \
-H 'X-Requested-With: XMLHttpRequest' \
-H 'Connection: keep-alive' \
--data-binary '{"code":"apiuser:rancher"}' \
--compressed \
| jq '.'

Response:

{
  "id": null,
  "type": "token",
  "links": {},
  "actions": {},
  "accountId": "1a7",
  "authProvider": "localAuthConfig",
  "clientId": null,
  "code": null,
  "enabled": true,
  "hostname": null,
  "jwt": "LGV5U6TuyEsJQC9J2CRHSLeVyMX5WYTAx8jGyicr",
  "scheme": null,
  "security": true,
  "user": "apiuser",
  "userIdentity": {
    "externalId": "1a7",
    "profilePicture": null,
    "name": "Api User",
    "externalIdType": "rancher_id",
    "profileUrl": null,
    "login": "apiuser",
    "role": null,
    "projectId": null,
    "all": null,
    "id": "rancher_id:1a7"
  },
  "userType": "user"
}

Use the jwt key to populate our cookie and request to create a project:

curl 'http://localhost:8080/v1/project'  \
-H 'Origin: http://localhost:8080' \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Accept-Language: en-US,en;q=0.8' \
-H 'Content-Type: application/json' \
-H 'x-api-no-challenge: true' \
-H 'Accept: application/json' \
-H 'Referer: http://localhost:8080/settings/env/add' \
-H 'X-Requested-With: XMLHttpRequest' \
-H 'Cookie: PL=rancher; token=LGV5U6TuyEsJQC9J2CRHSLeVyMX5WYTAx8jGyicr' \
-H 'Connection: keep-alive' \
--data-binary '{"swarm":false,"kubernetes":false,"mesos":false,"virtualMachine":false,"publicDns":false,"type":"project","name":"test4","description":null,"projectMembers":[{"externalId":"1a7","profilePicture":null,"name":"Api User","externalIdType":"rancher_id","profileUrl":null,"login":"apiuser","role":"owner","projectId":null,"all":null,"id":"rancher_id:1a7","type":"identity"}],"created":null,"kind":null,"removed":null,"uuid":null,"members":[{"externalId":"1a7","profilePicture":null,"name":"Api User","externalIdType":"rancher_id","profileUrl":null,"login":"apiuser","role":"owner","projectId":null,"all":null,"id":"rancher_id:1a7","type":"identity"}]}' \
--compressed \
| jq '.'

Response:

{
  "id": "1a12",
  "type": "project",
  "links": {
    "self": "http://localhost:8080/v1/projects/1a12",
    "auditLogs": "http://localhost:8080/v1/projects/1a12/auditlogs",
    "backupTargets": "http://localhost:8080/v1/projects/1a12/backuptargets",
    "backups": "http://localhost:8080/v1/projects/1a12/backups",
    "certificates": "http://localhost:8080/v1/projects/1a12/certificates",
    "containerEvents": "http://localhost:8080/v1/projects/1a12/containerevents",
    "credentials": "http://localhost:8080/v1/projects/1a12/credentials",
    "environments": "http://localhost:8080/v1/projects/1a12/environments",
    "externalEvents": "http://localhost:8080/v1/projects/1a12/externalevents",
    "healthcheckInstanceHostMaps": "http://localhost:8080/v1/projects/1a12/healthcheckinstancehostmaps",
    "hosts": "http://localhost:8080/v1/projects/1a12/hosts",
    "images": "http://localhost:8080/v1/projects/1a12/images",
    "instanceLinks": "http://localhost:8080/v1/projects/1a12/instancelinks",
    "instances": "http://localhost:8080/v1/projects/1a12/instances",
    "ipAddresses": "http://localhost:8080/v1/projects/1a12/ipaddresses",
    "labels": "http://localhost:8080/v1/projects/1a12/labels",
    "mounts": "http://localhost:8080/v1/projects/1a12/mounts",
    "networks": "http://localhost:8080/v1/projects/1a12/networks",
    "physicalHosts": "http://localhost:8080/v1/projects/1a12/physicalhosts",
    "ports": "http://localhost:8080/v1/projects/1a12/ports",
    "projectMembers": "http://localhost:8080/v1/projects/1a12/projectmembers",
    "serviceConsumeMaps": "http://localhost:8080/v1/projects/1a12/serviceconsumemaps",
    "serviceEvents": "http://localhost:8080/v1/projects/1a12/serviceevents",
    "serviceExposeMaps": "http://localhost:8080/v1/projects/1a12/serviceexposemaps",
    "services": "http://localhost:8080/v1/projects/1a12/services",
    "snapshots": "http://localhost:8080/v1/projects/1a12/snapshots",
    "storagePools": "http://localhost:8080/v1/projects/1a12/storagepools",
    "userPreferences": "http://localhost:8080/v1/projects/1a12/userpreferences",
    "volumes": "http://localhost:8080/v1/projects/1a12/volumes",
    "accounts": "http://localhost:8080/v1/projects/1a12/accounts",
    "addOutputsInputs": "http://localhost:8080/v1/projects/1a12/addoutputsinputs",
    "amazonec2Configs": "http://localhost:8080/v1/projects/1a12/amazonec2configs",
    "apiKeys": "http://localhost:8080/v1/projects/1a12/apikeys",
    "azureConfigs": "http://localhost:8080/v1/projects/1a12/azureconfigs",
    "composeProjects": "http://localhost:8080/v1/projects/1a12/composeprojects",
    "composeServices": "http://localhost:8080/v1/projects/1a12/composeservices",
    "containerExecs": "http://localhost:8080/v1/projects/1a12/containerexecs",
    "containers": "http://localhost:8080/v1/projects/1a12/containers",
    "digitaloceanConfigs": "http://localhost:8080/v1/projects/1a12/digitaloceanconfigs",
    "dnsServices": "http://localhost:8080/v1/projects/1a12/dnsservices",
    "dockerBuilds": "http://localhost:8080/v1/projects/1a12/dockerbuilds",
    "environmentUpgrades": "http://localhost:8080/v1/projects/1a12/environmentupgrades",
    "externalDnsEvents": "http://localhost:8080/v1/projects/1a12/externaldnsevents",
    "externalHostEvents": "http://localhost:8080/v1/projects/1a12/externalhostevents",
    "externalServiceEvents": "http://localhost:8080/v1/projects/1a12/externalserviceevents",
    "externalServices": "http://localhost:8080/v1/projects/1a12/externalservices",
    "externalStoragePoolEvents": "http://localhost:8080/v1/projects/1a12/externalstoragepoolevents",
    "externalVolumeEvents": "http://localhost:8080/v1/projects/1a12/externalvolumeevents",
    "hostAccesses": "http://localhost:8080/v1/projects/1a12/hostaccesses",
    "identities": "http://localhost:8080/v1/projects/1a12/identities",
    "kubernetesServices": "http://localhost:8080/v1/projects/1a12/kubernetesservices",
    "loadBalancerConfigs": "http://localhost:8080/v1/projects/1a12/loadbalancerconfigs",
    "loadBalancerServices": "http://localhost:8080/v1/projects/1a12/loadbalancerservices",
    "machineDrivers": "http://localhost:8080/v1/projects/1a12/machinedrivers",
    "machines": "http://localhost:8080/v1/projects/1a12/machines",
    "packetConfigs": "http://localhost:8080/v1/projects/1a12/packetconfigs",
    "passwords": "http://localhost:8080/v1/projects/1a12/passwords",
    "projects": "http://localhost:8080/v1/projects/1a12/projects",
    "pullTasks": "http://localhost:8080/v1/projects/1a12/pulltasks",
    "register": "http://localhost:8080/v1/projects/1a12/register",
    "registrationTokens": "http://localhost:8080/v1/projects/1a12/registrationtokens",
    "registries": "http://localhost:8080/v1/projects/1a12/registries",
    "registryCredentials": "http://localhost:8080/v1/projects/1a12/registrycredentials",
    "scalePolicys": "http://localhost:8080/v1/projects/1a12/scalepolicys",
    "schemas": "http://localhost:8080/v1/projects/1a12/schemas",
    "serviceProxies": "http://localhost:8080/v1/projects/1a12/serviceproxies",
    "settings": "http://localhost:8080/v1/projects/1a12/settings",
    "snapshotBackupInputs": "http://localhost:8080/v1/projects/1a12/snapshotbackupinputs",
    "statsAccesses": "http://localhost:8080/v1/projects/1a12/statsaccesses",
    "typeDocumentations": "http://localhost:8080/v1/projects/1a12/typedocumentations",
    "virtualMachines": "http://localhost:8080/v1/projects/1a12/virtualmachines",
    "hostStats": "http://localhost:8080/v1/projects/1a12/projects/1a12/hoststats"
  },
  "actions": {},
  "name": "test4",
  "state": "registering",
  "created": "2016-07-29T18:08:23Z",
  "createdTS": 1469815703000,
  "description": null,
  "kind": "project",
  "kubernetes": false,
  "members": [
    {
      "externalId": "1a7",
      "externalIdType": "rancher_id",
      "role": "owner"
    }
  ],
  "mesos": false,
  "publicDns": false,
  "removed": null,
  "servicesPortRange": null,
  "swarm": false,
  "transitioning": "yes",
  "transitioningMessage": "In Progress",
  "transitioningProgress": null,
  "uuid": "db31b902-6d96-4669-bab3-749d4c5871cb",
  "virtualMachine": false
}```

## To create an api key

Use the JWT and the returned project id:

curl 'http://localhost:8080/v1/projects/1a8/apikey' \ -H 'Cookie: PL=rancher; token=avZcQ1kseRmc5MxACSwAN62Vv2CD7oGFn441rtHM' \ -H 'Origin: http://localhost:8080' \ -H 'Accept-Encoding: gzip, deflate' \ -H 'Accept-Language: en-US,en;q=0.8' \ -H 'Content-Type: application/json' \ -H 'x-api-no-challenge: true' \ -H 'Accept: application/json' \ -H 'Referer: http://localhost:8080/env/1a8/api' \ -H 'X-Requested-With: XMLHttpRequest' \ -H 'Connection: keep-alive' \ --data-binary 'cool description","created":null,"kind":null,"removed":null,"uuid":null' \ --compressed \ | jq '.'


Response:

{ "id": "1c6", "type": "apiKey", "links": { "self": "http://localhost:8080/v1/projects/1a8/apikeys/1c6", "account": "http://localhost:8080/v1/projects/1a8/apikeys/1c6/account", "images": "http://localhost:8080/v1/projects/1a8/apikeys/1c6/images", "instances": "http://localhost:8080/v1/projects/1a8/apikeys/1c6/instances", "certificate": "http://localhost:8080/v1/projects/1a8/apikeys/1c6/certificate" }, "actions": { "activate": "http://localhost:8080/v1/projects/1a8/apikeys/1c6/?action=activate", "remove": "http://localhost:8080/v1/projects/1a8/apikeys/1c6/?action=remove", "deactivate": "http://localhost:8080/v1/projects/1a8/apikeys/1c6/?action=deactivate" }, "name": "mycoolname", "state": "registering", "accountId": "1a8", "created": "2016-07-29T18:22:37Z", "createdTS": 1469816557000, "description": "my cool description", "kind": "apiKey", "publicValue": "375AD58E3AAF7191D3C0", "removed": null, "secretValue": "aS2tSzVn6okWKUKGCFeg1hjp3vzxe2Y367v7uQqS", "transitioning": "yes", "transitioningMessage": "In Progress", "transitioningProgress": null, "uuid": "da6e0500-b2e9-4fa8-849e-0495b26e46bd" }


The `publicValue` is the RANCHER_ACCESS_KEY, and the `secretValue` is the RANCHER_SECRET_KEY




manager = Rancher::ManagementApi::Token.build_manager(username, password) project = manager.create_project(...) api_key = project.create_api_key(...) api_key.access_key api_key.secret_key

</code>