Extensions for VMC the CLI of VMWare's Cloud Foundry


License
MIT
Install
gem install vmc_knife -v 0.0.69

Documentation

VMC Knife

Extensions for vmc: the VMware Cloud CLI; the command line interface to VMware's Application Platform

MIT license

Usecase

Prepare a file that describes the list of applications to deploy, their settings, their environment variables, required data-services and names, build file for the apps. Run the deployment file on the command: will either install update, modify the apps on the cloudfoundry. Run the deployment file via a web-interface.

prepare a vmc deployment file.
vmc_knife vmc_deployment_file.json

Installation

ssh into a Cloudfoundry VM load the cloudfoundry profile and install the gem:

source /home/ubuntu/.cloudfoundry_deployment_local
gem install vmc_knife

Or to install from source:

git clone https://github.com/hmalphettes/vmc-knife.git
cd vmc-knife
gem build vmc_knife.gemspec
gem install vmc_knife

Example:

Create a recipe with the mongodb app example and the sinatra example app.

Make a new file example_recipe.json

Enter:

{
  "sub_domain": "vcap.me",
  "target": "api.vcap.me",
  "email": "vcap@vcap.me",
  "password": "vcap",
  "recipes": [
    {
      "name": "example_recipe",
      "data_services": {
        "mongo1": {
          "name": "a_mongo",
          "vendor": "mongodb"
        }
      },
      "applications": {
        "example_mongo": {
          "name": "mongo_db_demo",
          "uris": [
            "mongodb-on-cf-demo.#{this['sub_domain']}"
          ],
          "staging": {
            "stack": "ruby19",
            "model": "rails3"
          },
          "resources": {
            "memory": 256
          },
          "services": [
            "#{this['recipes'][0]['data_services']['mongo1']['name']}"
          ],
          "env": [
            "DERIVED_VALUE_EXAMPLE=http://#{this['recipes'][0]['applications']['example_mongo']['uris'][0]}"
          ],
          "repository": {
            "url": "https://github.com/mccrory/cloud-foundry-mongodb-demo.git",
            "branch":"master"
          }
        }
      }
    }
  ]
}

Navigate to the folder where the recipe is located. And use vmc_knife:

vmc_knife login
vmc_knife configure-apps
vmc_knife upload-apps
vmc_knife start-apps

The console will look like this:

ubuntu@ubuntu:~/tmp$ vmc_knife configure-apps
Applications selected mongo_db_demo
Data-services selected a_mongo
{
  "applications": {
    "mongo_db_demo": {
      "name": "Create mongo_db_demo",
      "services": {
        "add": [
          "a_mongo"
        ]
      },
      "env": {
        "add": [
          "DERIVED_VALUE_EXAMPLE=http://mongodb-on-cf-demo.vcap.me"
        ]
      },
      "uris": {
        "add": [
          "mongodb-on-cf-demo.vcap.me"
        ]
      },
      "memory": " => 256"
    }
  }
}
Creating mongo_db_demo with {:name=>"mongo_db_demo", "resources"=>{"memory"=>256}, "staging"=>{"model"=>"rails3", "stack"=>"ruby19"}, "uris"=>["mongodb-on-cf-demo.vcap.me"], "services"=>["a_mongo"], "env"=>["DERIVED_VALUE_EXAMPLE=http://mongodb-on-cf-demo.vcap.me"]}

ubuntu@ubuntu:~/tmp$ vmc_knife upload-apps
Applications selected mongo_db_demo
Data-services selected a_mongo
Dir.entries(/home/ubuntu/vmc_knife_downloads/mongo_db_demo).size 2
remote: Counting objects: 85, done.
remote: Compressing objects: 100% (65/65), done.
remote: Total 85 (delta 4), reused 84 (delta 4)
Unpacking objects: 100% (85/85), done.
fatal: Not a git repository (or any of the parent directories): .git
Uploading Application mongo_db_demo from /home/ubuntu/vmc_knife_downloads/mongo_db_demo:
Copying the files
Done copying the files
  Checking for available resources: About to compute the fingerprints
Finished computing the fingerprints
Invoking check_resources with the fingerprints
OK
  Processing resources: OK
  Packing application: OK
  Uploading (255K): client.upload_app about to start
  Uploading (255K): OK   
Done client.upload_app
Push Status: OK

Updating an app:

For example edit the memory parameter of the app. Then call:

vmc_knife configure-apps
vmc_knife restart-apps example_mongo

Note that vmc_knife's start/stop/restart only sends the command to vcap's cloud_controller. It does not try to poll it to see if the command was successful.

Delete data-services and apps in the recipe:

vmc_knife delete-all

Accessing the data-services:

Assuming that vmc_knife is able to locate the cloud_controller.yml and mongo binary:

vmc_knife data-shell mongo1

will drop the user to the mongo shell:

ubuntu@ubuntu:~/tmp$ vmc_knife data-shell mongo1
Applications selected mongo_db_demo
Data-services selected a_mongo
Executing /home/ubuntu/cloudfoundry/.deployments/intalio_devbox/deploy/mongodb/bin/mongo -u 6e409825-31f6-4a47-8eef-11f49e763a9a -p 153c52d6-26ab-467b-9c1d-bc1b071a5c86 192.168.0.138:25001/db
MongoDB shell version: 1.8.1
connecting to: 192.168.0.138:25001/db
>

With postgresql export and import are supported.

Todo: take advantage of the new vmc-tunnel.