vmc-stic 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. data/LICENSE +24 -0
  2. data/README.md +102 -0
  3. data/Rakefile +99 -0
  4. data/bin/vmc +6 -0
  5. data/caldecott_helper/Gemfile +10 -0
  6. data/caldecott_helper/Gemfile.lock +48 -0
  7. data/caldecott_helper/server.rb +43 -0
  8. data/config/clients.yml +17 -0
  9. data/config/micro/offline.conf +2 -0
  10. data/config/micro/paths.yml +22 -0
  11. data/config/micro/refresh_ip.rb +20 -0
  12. data/lib/cli.rb +46 -0
  13. data/lib/cli/commands/admin.rb +80 -0
  14. data/lib/cli/commands/apps.rb +1103 -0
  15. data/lib/cli/commands/base.rb +227 -0
  16. data/lib/cli/commands/manifest.rb +56 -0
  17. data/lib/cli/commands/micro.rb +115 -0
  18. data/lib/cli/commands/misc.rb +129 -0
  19. data/lib/cli/commands/services.rb +180 -0
  20. data/lib/cli/commands/user.rb +65 -0
  21. data/lib/cli/config.rb +173 -0
  22. data/lib/cli/console_helper.rb +157 -0
  23. data/lib/cli/core_ext.rb +122 -0
  24. data/lib/cli/errors.rb +19 -0
  25. data/lib/cli/frameworks.rb +142 -0
  26. data/lib/cli/manifest_helper.rb +262 -0
  27. data/lib/cli/runner.rb +532 -0
  28. data/lib/cli/services_helper.rb +84 -0
  29. data/lib/cli/tunnel_helper.rb +332 -0
  30. data/lib/cli/usage.rb +115 -0
  31. data/lib/cli/version.rb +7 -0
  32. data/lib/cli/zip_util.rb +77 -0
  33. data/lib/vmc.rb +3 -0
  34. data/lib/vmc/client.rb +471 -0
  35. data/lib/vmc/const.rb +22 -0
  36. data/lib/vmc/micro.rb +56 -0
  37. data/lib/vmc/micro/switcher/base.rb +97 -0
  38. data/lib/vmc/micro/switcher/darwin.rb +19 -0
  39. data/lib/vmc/micro/switcher/dummy.rb +15 -0
  40. data/lib/vmc/micro/switcher/linux.rb +16 -0
  41. data/lib/vmc/micro/switcher/windows.rb +31 -0
  42. data/lib/vmc/micro/vmrun.rb +158 -0
  43. metadata +207 -0
data/LICENSE ADDED
@@ -0,0 +1,24 @@
1
+ Copyright (c) 2010-2011 VMware Inc, All Rights Reserved
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
20
+
21
+ This software downloads additional open source software components upon install
22
+ that are distributed under separate terms and conditions. Please see the license
23
+ information provided in the individual software components for more information.
24
+
data/README.md ADDED
@@ -0,0 +1,102 @@
1
+ # VMC
2
+
3
+ The VMware Cloud CLI. This is the command line interface to VMware's Application Platform
4
+
5
+ _Copyright 2010-2011, VMware, Inc. Licensed under the
6
+ MIT license, please see the LICENSE file. All rights reserved._
7
+
8
+ Usage: vmc [options] command [<args>] [command_options]
9
+ Try 'vmc help [command]' or 'vmc help options' for more information.
10
+
11
+ Currently available vmc commands are:
12
+
13
+ Getting Started
14
+ target [url] Reports current target or sets a new target
15
+ login [email] [--email, --passwd] Login
16
+ info System and account information
17
+
18
+ Applications
19
+ apps List deployed applications
20
+
21
+ Application Creation
22
+ push [appname] Create, push, map, and start a new application
23
+ push [appname] --path Push application from specified path
24
+ push [appname] --url Set the url for the application
25
+ push [appname] --instances <N> Set the expected number <N> of instances
26
+ push [appname] --mem M Set the memory reservation for the application
27
+ push [appname] --no-start Do not auto-start the application
28
+
29
+ Application Operations
30
+ start <appname> Start the application
31
+ stop <appname> Stop the application
32
+ restart <appname> Restart the application
33
+ delete <appname> Delete the application
34
+
35
+ Application Updates
36
+ update <appname> [--path] Update the application bits
37
+ mem <appname> [memsize] Update the memory reservation for an application
38
+ map <appname> <url> Register the application to the url
39
+ unmap <appname> <url> Unregister the application from the url
40
+ instances <appname> <num|delta> Scale the application instances up or down
41
+
42
+ Application Information
43
+ crashes <appname> List recent application crashes
44
+ crashlogs <appname> Display log information for crashed applications
45
+ logs <appname> [--all] Display log information for the application
46
+ files <appname> [path] [--all] Display directory listing or file download for path
47
+ stats <appname> Display resource usage for the application
48
+ instances <appname> List application instances
49
+
50
+ Application Environment
51
+ env <appname> List application environment variables
52
+ env-add <appname> <variable[=]value> Add an environment variable to an application
53
+ env-del <appname> <variable> Delete an environment variable to an application
54
+
55
+ Services
56
+ services Lists of services available and provisioned
57
+ create-service <service> [--name,--bind] Create a provisioned service
58
+ create-service <service> <name> Create a provisioned service and assign it <name>
59
+ create-service <service> <name> <app> Create a provisioned service and assign it <name>, and bind to <app>
60
+ delete-service [servicename] Delete a provisioned service
61
+ bind-service <servicename> <appname> Bind a service to an application
62
+ unbind-service <servicename> <appname> Unbind service from the application
63
+ clone-services <src-app> <dest-app> Clone service bindings from <src-app> application to <dest-app>
64
+ tunnel <servicename> [--port] Create a local tunnel to a service
65
+ tunnel <servicename> <clientcmd> Create a local tunnel to a service and start a local client
66
+
67
+ Administration
68
+ user Display user account information
69
+ passwd Change the password for the current user
70
+ logout Logs current user out of the target system
71
+ add-user [--email, --passwd] Register a new user (requires admin privileges)
72
+ delete-user <user> Delete a user and all apps and services (requires admin privileges)
73
+
74
+ System
75
+ runtimes Display the supported runtimes of the target system
76
+ frameworks Display the recognized frameworks of the target system
77
+
78
+ Micro Cloud Foundry
79
+ micro status Display Micro Cloud Foundry VM status
80
+ mciro offline Configure Micro Cloud Foundry VM for offline mode
81
+ micro online Configure Micro Cloud Foundry VM for online mode
82
+ [--vmx file] Path to micro.vmx
83
+ [--vmrun executable] Path to vmrun executable
84
+ [--password cleartext] Cleartext password for guest VM vcap user
85
+ [--save] Save cleartext password in ~/.vmc_micro
86
+
87
+ Misc
88
+ aliases List aliases
89
+ alias <alias[=]command> Create an alias for a command
90
+ unalias <alias> Remove an alias
91
+ targets List known targets and associated authorization tokens
92
+
93
+ Help
94
+ help [command] Get general help or help on a specific command
95
+ help options Get help on available options
96
+
97
+ ## Simple Story (for Ruby apps)
98
+
99
+ vmc target api.cloudfoundry.com
100
+ vmc login
101
+ bundle package
102
+ vmc push
data/Rakefile ADDED
@@ -0,0 +1,99 @@
1
+ require 'rake'
2
+ require 'spec/rake/spectask'
3
+
4
+ desc "Run specs"
5
+ task :spec => :build do
6
+ Spec::Rake::SpecTask.new('spec') do |t|
7
+ t.spec_opts = %w(-fs -c)
8
+ t.spec_files = FileList['spec/**/*_spec.rb']
9
+ end
10
+ end
11
+
12
+ desc "Synonym for spec"
13
+ task :test => :spec
14
+ desc "Synonym for spec"
15
+ task :tests => :spec
16
+ task :default => :spec
17
+
18
+ def tests_path
19
+ if @tests_path == nil
20
+ @tests_path = File.join(Dir.pwd, "spec/assets/tests")
21
+ end
22
+ @tests_path
23
+ end
24
+ TESTS_PATH = tests_path
25
+
26
+ BUILD_ARTIFACT = File.join(Dir.pwd, "spec/assets/.build")
27
+
28
+ TESTS_TO_BUILD = ["#{TESTS_PATH}/java_web/java_tiny_app",
29
+ # "#{TESTS_PATH}/grails/guestbook",
30
+ "#{TESTS_PATH}/lift/hello_lift",
31
+ "#{TESTS_PATH}/spring/roo-guestbook",
32
+ "#{TESTS_PATH}/spring/spring-osgi-hello",
33
+ ]
34
+
35
+ desc "Build the tests. If the git hash associated with the test assets has not changed, nothing is built. To force a build, invoke 'rake build[--force]'"
36
+ task :build, [:force] do |t, args|
37
+ sh('bundle install')
38
+ sh('git submodule update --init')
39
+ puts "\nBuilding tests"
40
+ if build_required? args.force
41
+ ENV['MAVEN_OPTS']="-XX:MaxPermSize=256M"
42
+ TESTS_TO_BUILD.each do |test|
43
+ puts "\tBuilding '#{test}'"
44
+ Dir.chdir test do
45
+ sh('mvn package -DskipTests') do |success, exit_code|
46
+ unless success
47
+ clear_build_artifact
48
+ do_mvn_clean('-q')
49
+ fail "\tFailed to build #{test} - aborting build"
50
+ end
51
+ end
52
+ end
53
+ puts "\tCompleted building '#{test}'"
54
+ end
55
+ save_git_hash
56
+ else
57
+ puts "Built artifacts in sync with test assets - no build required"
58
+ end
59
+ end
60
+
61
+ desc "Clean the build artifacts"
62
+ task :clean do
63
+ puts "\nCleaning tests"
64
+ clear_build_artifact
65
+ TESTS_TO_BUILD.each do |test|
66
+ puts "\tCleaning '#{test}'"
67
+ Dir.chdir test do
68
+ do_mvn_clean
69
+ end
70
+ puts "\tCompleted cleaning '#{test}'"
71
+ end
72
+ end
73
+
74
+ def build_required? (force_build=nil)
75
+ if File.exists?(BUILD_ARTIFACT) == false or (force_build and force_build == "--force")
76
+ return true
77
+ end
78
+ Dir.chdir(tests_path) do
79
+ saved_git_hash = IO.readlines(BUILD_ARTIFACT)[0].split[0]
80
+ git_hash = `git rev-parse --short=8 --verify HEAD`
81
+ saved_git_hash.to_s.strip != git_hash.to_s.strip
82
+ end
83
+ end
84
+
85
+ def save_git_hash
86
+ Dir.chdir(tests_path) do
87
+ git_hash = `git rev-parse --short=8 --verify HEAD`
88
+ File.open(BUILD_ARTIFACT, 'w') {|f| f.puts("#{git_hash}")}
89
+ end
90
+ end
91
+
92
+ def clear_build_artifact
93
+ puts "\tClearing build artifact #{BUILD_ARTIFACT}"
94
+ File.unlink BUILD_ARTIFACT if File.exists? BUILD_ARTIFACT
95
+ end
96
+
97
+ def do_mvn_clean options=nil
98
+ sh("mvn clean #{options}")
99
+ end
data/bin/vmc ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path('../../lib/cli', __FILE__)
4
+
5
+ VMC::Cli::Runner.run(ARGV.dup)
6
+
@@ -0,0 +1,10 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'rack', '~> 1.2.0'
4
+ gem 'caldecott', '= 0.0.3'
5
+ gem 'bundler'
6
+ gem 'em-websocket'
7
+ gem 'async_sinatra'
8
+ gem 'thin'
9
+ gem 'json'
10
+ gem 'uuidtools'
@@ -0,0 +1,48 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.2.6)
5
+ async_sinatra (0.5.0)
6
+ rack (>= 1.2.1)
7
+ sinatra (>= 1.0)
8
+ caldecott (0.0.3)
9
+ addressable (= 2.2.6)
10
+ async_sinatra (= 0.5.0)
11
+ em-http-request (= 0.3.0)
12
+ em-websocket (= 0.3.1)
13
+ json (= 1.6.1)
14
+ uuidtools (= 2.1.2)
15
+ daemons (1.1.4)
16
+ em-http-request (0.3.0)
17
+ addressable (>= 2.0.0)
18
+ escape_utils
19
+ eventmachine (>= 0.12.9)
20
+ em-websocket (0.3.1)
21
+ addressable (>= 2.1.1)
22
+ eventmachine (>= 0.12.9)
23
+ escape_utils (0.2.4)
24
+ eventmachine (0.12.10)
25
+ json (1.6.1)
26
+ rack (1.2.4)
27
+ sinatra (1.2.7)
28
+ rack (~> 1.1)
29
+ tilt (>= 1.2.2, < 2.0)
30
+ thin (1.2.11)
31
+ daemons (>= 1.0.9)
32
+ eventmachine (>= 0.12.6)
33
+ rack (>= 1.0.0)
34
+ tilt (1.3.3)
35
+ uuidtools (2.1.2)
36
+
37
+ PLATFORMS
38
+ ruby
39
+
40
+ DEPENDENCIES
41
+ async_sinatra
42
+ bundler
43
+ caldecott (= 0.0.3)
44
+ em-websocket
45
+ json
46
+ rack (~> 1.2.0)
47
+ thin
48
+ uuidtools
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright (c) 2009-2011 VMware, Inc.
3
+ $:.unshift(File.dirname(__FILE__) + '/lib')
4
+
5
+ require 'rubygems'
6
+ require 'bundler/setup'
7
+
8
+ require 'caldecott'
9
+ require 'sinatra'
10
+ require 'json'
11
+ require 'eventmachine'
12
+
13
+ port = ENV['VMC_APP_PORT']
14
+ port ||= 8081
15
+
16
+ # add vcap specific stuff to Caldecott
17
+ class VcapHttpTunnel < Caldecott::Server::HttpTunnel
18
+ get '/info' do
19
+ { "version" => '0.0.4' }.to_json
20
+ end
21
+
22
+ def self.get_tunnels
23
+ super
24
+ end
25
+
26
+ get '/services' do
27
+ services_env = ENV['VMC_SERVICES']
28
+ return "no services env" if services_env.nil? or services_env.empty?
29
+ services_env
30
+ end
31
+
32
+ get '/services/:service' do |service_name|
33
+ services_env = ENV['VMC_SERVICES']
34
+ not_found if services_env.nil?
35
+
36
+ services = JSON.parse(services_env)
37
+ service = services.find { |s| s["name"] == service_name }
38
+ not_found if service.nil?
39
+ service["options"].to_json
40
+ end
41
+ end
42
+
43
+ VcapHttpTunnel.run!(:port => port, :auth_token => ENV["CALDECOTT_AUTH"])
@@ -0,0 +1,17 @@
1
+ redis:
2
+ redis-cli: -h ${host} -p ${port} -a ${password}
3
+
4
+ mysql:
5
+ mysql: --protocol=TCP --host=${host} --port=${port} --user=${user} --password=${password} ${name}
6
+ mysqldump: --protocol=TCP --host=${host} --port=${port} --user=${user} --password=${password} ${name} > ${Output file}
7
+
8
+ mongodb:
9
+ mongo: --host ${host} --port ${port} -u ${user} -p ${password} ${name}
10
+ mongodump: --host ${host} --port ${port} -u ${user} -p ${password} --db ${name}
11
+ mongorestore: --host ${host} --port ${port} -u ${user} -p ${password} --db ${name} ${Directory or filename to restore from}
12
+
13
+ postgresql:
14
+ psql:
15
+ command: -h ${host} -p ${port} -d ${name} -U ${user} -w
16
+ environment:
17
+ - PGPASSWORD='${password}'
@@ -0,0 +1,2 @@
1
+ no-resolv
2
+ log-queries
@@ -0,0 +1,22 @@
1
+ darwin:
2
+ vmrun:
3
+ - "/Applications/VMware Fusion.app/Contents/Library/"
4
+ - "/Applications/Fusion.app/Contents/Library/"
5
+ vmx:
6
+ - "~/Documents/Virtual Machines.localized/"
7
+ - "~/Documents/Virtual Machines/"
8
+ - "~/Desktop/"
9
+
10
+ linux:
11
+ vmrun:
12
+ - "/usr/bin/"
13
+ vmx:
14
+ - "~/"
15
+
16
+ windows:
17
+ vmrun:
18
+ - "c:\\Program Files (x86)\\"
19
+ - "c:\\Program Files\\"
20
+ vmx:
21
+ - "~\\Documents\\"
22
+ - "~\\Desktop\\"
@@ -0,0 +1,20 @@
1
+ #!/var/vcap/bosh/bin/ruby
2
+ require 'socket'
3
+
4
+ A_ROOT_SERVER = '198.41.0.4'
5
+
6
+ begin
7
+ retries ||= 0
8
+ route ||= A_ROOT_SERVER
9
+ orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true
10
+ ip_address = UDPSocket.open {|s| s.connect(route, 1); s.addr.last }
11
+ rescue Errno::ENETUNREACH
12
+ # happens on boot when dhcp hasn't completed when we get here
13
+ sleep 3
14
+ retries += 1
15
+ retry if retries < 10
16
+ ensure
17
+ Socket.do_not_reverse_lookup = orig
18
+ end
19
+
20
+ File.open("/tmp/ip.txt", 'w') { |file| file.write(ip_address) }
data/lib/cli.rb ADDED
@@ -0,0 +1,46 @@
1
+ ROOT = File.expand_path(File.dirname(__FILE__))
2
+ WINDOWS = !!(RUBY_PLATFORM =~ /mingw|mswin32|cygwin/)
3
+
4
+
5
+ module VMC
6
+ autoload :Client, "#{ROOT}/vmc/client"
7
+ autoload :Micro, "#{ROOT}/vmc/micro"
8
+
9
+ module Micro
10
+ module Switcher
11
+ autoload :Base, "#{ROOT}/vmc/micro/switcher/base"
12
+ autoload :Darwin, "#{ROOT}/vmc/micro/switcher/darwin"
13
+ autoload :Dummy, "#{ROOT}/vmc/micro/switcher/dummy"
14
+ autoload :Linux, "#{ROOT}/vmc/micro/switcher/linux"
15
+ autoload :Windows, "#{ROOT}/vmc/micro/switcher/windows"
16
+ end
17
+ autoload :VMrun, "#{ROOT}/vmc/micro/vmrun"
18
+ end
19
+
20
+ module Cli
21
+ autoload :Config, "#{ROOT}/cli/config"
22
+ autoload :Framework, "#{ROOT}/cli/frameworks"
23
+ autoload :Runner, "#{ROOT}/cli/runner"
24
+ autoload :ZipUtil, "#{ROOT}/cli/zip_util"
25
+ autoload :ServicesHelper, "#{ROOT}/cli/services_helper"
26
+ autoload :TunnelHelper, "#{ROOT}/cli/tunnel_helper"
27
+ autoload :ManifestHelper, "#{ROOT}/cli/manifest_helper"
28
+ autoload :ConsoleHelper, "#{ROOT}/cli/console_helper"
29
+
30
+ module Command
31
+ autoload :Base, "#{ROOT}/cli/commands/base"
32
+ autoload :Admin, "#{ROOT}/cli/commands/admin"
33
+ autoload :Apps, "#{ROOT}/cli/commands/apps"
34
+ autoload :Micro, "#{ROOT}/cli/commands/micro"
35
+ autoload :Misc, "#{ROOT}/cli/commands/misc"
36
+ autoload :Services, "#{ROOT}/cli/commands/services"
37
+ autoload :User, "#{ROOT}/cli/commands/user"
38
+ autoload :Manifest, "#{ROOT}/cli/commands/manifest"
39
+ end
40
+
41
+ end
42
+ end
43
+
44
+ require "#{ROOT}/cli/version"
45
+ require "#{ROOT}/cli/core_ext"
46
+ require "#{ROOT}/cli/errors"