vmcu 0.3.17

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 +160 -0
  3. data/Rakefile +101 -0
  4. data/bin/vmcu +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 +47 -0
  13. data/lib/cli/commands/admin.rb +80 -0
  14. data/lib/cli/commands/apps.rb +1128 -0
  15. data/lib/cli/commands/base.rb +238 -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 +277 -0
  19. data/lib/cli/commands/services.rb +180 -0
  20. data/lib/cli/commands/user.rb +96 -0
  21. data/lib/cli/config.rb +192 -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 +244 -0
  26. data/lib/cli/manifest_helper.rb +302 -0
  27. data/lib/cli/runner.rb +543 -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 +118 -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 +591 -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 +263 -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
+
@@ -0,0 +1,160 @@
1
+ # VMCU
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
+ _Copyright (c) 2011 Uhuru Software, Inc., All Rights Reserved_
8
+
9
+ Usage: vmcu [options] command [<args>] [command_options]
10
+ Try 'vmcu help [command]' or 'vmcu help options' for more information.
11
+
12
+ Currently available vmcu commands are:
13
+
14
+ Getting Started
15
+ target [url] Reports current target or sets a new target
16
+ login [email] [--email, --passwd] Login
17
+ login [token] [--token UHURU_TOKEN] Login for Uhuru AppCloud
18
+ cloud-team [name or id] [--realm REALM] Set cloud team for UhuruApp Cloud. Sys admins can proxy realms.
19
+ import-uhuru Import targets from Uhuru Cloud Foundry Manager
20
+ info System and account information
21
+
22
+ Applications
23
+ apps List deployed applications
24
+
25
+ Application Creation
26
+ push [appname] Create, push, map, and start a new application
27
+ push [appname] --path Push application from specified path
28
+ push [appname] --url Set the url for the application
29
+ push [appname] --instances <N> Set the expected number <N> of instances
30
+ push [appname] --mem M Set the memory reservation for the application
31
+ push [appname] --no-start Do not auto-start the application
32
+
33
+ Application Operations
34
+ start <appname> Start the application
35
+ stop <appname> Stop the application
36
+ restart <appname> Restart the application
37
+ delete <appname> Delete the application
38
+
39
+ Application Updates
40
+ update <appname> [--path] Update the application bits
41
+ mem <appname> [memsize] Update the memory reservation for an application
42
+ map <appname> <url> Register the application to the url
43
+ unmap <appname> <url> Unregister the application from the url
44
+ instances <appname> <num|delta> Scale the application instances up or down
45
+
46
+ Application Information
47
+ crashes <appname> List recent application crashes
48
+ crashlogs <appname> Display log information for crashed applications
49
+ logs <appname> [--all] Display log information for the application
50
+ files <appname> [path] [--all] Display directory listing or file download for path
51
+ stats <appname> Display resource usage for the application
52
+ instances <appname> List application instances
53
+
54
+ Application Environment
55
+ env <appname> List application environment variables
56
+ env-add <appname> <variable[=]value> Add an environment variable to an application
57
+ env-del <appname> <variable> Delete an environment variable to an application
58
+
59
+ Services
60
+ services Lists of services available and provisioned
61
+ create-service <service> [--name,--bind] Create a provisioned service
62
+ create-service <service> <name> Create a provisioned service and assign it <name>
63
+ create-service <service> <name> <app> Create a provisioned service and assign it <name>, and bind to <app>
64
+ delete-service [servicename] Delete a provisioned service
65
+ bind-service <servicename> <appname> Bind a service to an application
66
+ unbind-service <servicename> <appname> Unbind service from the application
67
+ clone-services <src-app> <dest-app> Clone service bindings from <src-app> application to <dest-app>
68
+ tunnel <servicename> [--port] Create a local tunnel to a service
69
+ tunnel <servicename> <clientcmd> Create a local tunnel to a service and start a local client
70
+
71
+ Administration
72
+ user Display user account information
73
+ passwd Change the password for the current user
74
+ logout Logs current user out of the target system
75
+ add-user [--email, --passwd] Register a new user (requires admin privileges)
76
+ delete-user <user> Delete a user and all apps and services (requires admin privileges)
77
+
78
+ System
79
+ runtimes Display the supported runtimes of the target system
80
+ frameworks Display the recognized frameworks of the target system
81
+
82
+ Micro Cloud Foundry
83
+ micro status Display Micro Cloud Foundry VM status
84
+ mciro offline Configure Micro Cloud Foundry VM for offline mode
85
+ micro online Configure Micro Cloud Foundry VM for online mode
86
+ [--vmx file] Path to micro.vmx
87
+ [--vmrun executable] Path to vmrun executable
88
+ [--password cleartext] Cleartext password for guest VM vcap user
89
+ [--save] Save cleartext password in ~/.vmc_micro
90
+
91
+ Misc
92
+ aliases List aliases
93
+ alias <alias[=]command> Create an alias for a command
94
+ unalias <alias> Remove an alias
95
+ targets List known targets and associated authorization tokens
96
+
97
+ Help
98
+ help [command] Get general help or help on a specific command
99
+ help options Get help on available options
100
+
101
+ ## Simple Story (for Ruby apps)
102
+
103
+ vmcu target api.cloudfoundry.com
104
+ vmcu login
105
+ bundle package
106
+ vmcu push
107
+
108
+ ## Uhuru example
109
+
110
+ # To build the gem and install it from source:
111
+ > git clone git://github.com/UhuruSoftware/vmcu.git # Or just download the source from GitHub
112
+ > cd vmcu
113
+ > gem build vmcu.gemspec
114
+ > gem install vmcu-*.*.*.gem # Replace * with current version
115
+
116
+ # target to Uhuru AppCloud with the usual target command. It will automatically detect if it is a Uhuru AppCloud
117
+ # syntax: vmcu target
118
+ > vmcu target-uhuru 192.168.1.10
119
+
120
+ # Log to Uhuru AppCloud with the login command. Both a normal Uhuru AppCloud authentication token or a One Time Token
121
+ # are valid options
122
+ # syntax: login [token] [--token UHURU_TOKEN]
123
+ > vmcu login rabbit-bear
124
+
125
+ # Target to a cloud team. If the cloud team is not beforehand, available cloud teams are presented.
126
+ # syntax: cloud-team [name or id] [--realm REALM] Set cloud team for Uhuru App Cloud. Sys admins can proxy realms.
127
+ > vmcu cloud-team
128
+ 1: G0003 [Id: 09d8b20e-daf5-489f-8502-e4c886bc9ec6]
129
+ Which cloud team would you like to target to?:
130
+ > 1
131
+ Targeted to Uhuru AppCloud: [http://services.uhurucloud.com]
132
+ Cloud Team: [09d8b20e-daf5-489f-8502-e4c886bc9ec6]
133
+ Cloud Foundry domain: [uhurucloud.com]
134
+
135
+ # do some work
136
+ > vmcu apps
137
+
138
+ # target to a regular Cloud Foundry target
139
+ > vmcu target api.uhurucloud.net
140
+ > vmcu login
141
+
142
+ # do some work
143
+ > vmcu apps
144
+
145
+ # target back to the saved Uhuru AppCloud
146
+ > vmcu target 192.168.1.10
147
+ > vmcu apps
148
+
149
+ # import target from Uhuru Cloud Foundry Manager
150
+ > vmcu import-uhuru
151
+ 1: Cloud Foundry [http://api.sstest.cloudfoundry.me] / stefan.schneider@uhurusoftware.com
152
+ 2: Cloud Foundry [http://api.uhurucloud.net] / dev@uhurucloud.org
153
+ 3: Uhuru AppCloud [http://www.uhurusts.com/] / BillingAccount5cb1a91539a5472787d289e9bd9493f6 / test / test
154
+ 4: Uhuru AppCloud [http://192.168.1.10/] / BillingAccount5cb1a91539a5472787d289e9bd9493f6 / test / test
155
+ Which target to import?:
156
+ > 2
157
+ Targeted to Cloud Foundry [http://api.uhurucloud.net] / dev@uhurucloud.org
158
+
159
+ # do some work
160
+ > vmcu apps
@@ -0,0 +1,101 @@
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
+ "#{TESTS_PATH}/standalone/java_app",
34
+ "#{TESTS_PATH}/standalone/python_app"
35
+ ]
36
+
37
+ 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]'"
38
+ task :build, [:force] do |t, args|
39
+ sh('bundle install')
40
+ sh('git submodule update --init')
41
+ puts "\nBuilding tests"
42
+ if build_required? args.force
43
+ ENV['MAVEN_OPTS']="-XX:MaxPermSize=256M"
44
+ TESTS_TO_BUILD.each do |test|
45
+ puts "\tBuilding '#{test}'"
46
+ Dir.chdir test do
47
+ sh('mvn package -DskipTests') do |success, exit_code|
48
+ unless success
49
+ clear_build_artifact
50
+ do_mvn_clean('-q')
51
+ fail "\tFailed to build #{test} - aborting build"
52
+ end
53
+ end
54
+ end
55
+ puts "\tCompleted building '#{test}'"
56
+ end
57
+ save_git_hash
58
+ else
59
+ puts "Built artifacts in sync with test assets - no build required"
60
+ end
61
+ end
62
+
63
+ desc "Clean the build artifacts"
64
+ task :clean do
65
+ puts "\nCleaning tests"
66
+ clear_build_artifact
67
+ TESTS_TO_BUILD.each do |test|
68
+ puts "\tCleaning '#{test}'"
69
+ Dir.chdir test do
70
+ do_mvn_clean
71
+ end
72
+ puts "\tCompleted cleaning '#{test}'"
73
+ end
74
+ end
75
+
76
+ def build_required? (force_build=nil)
77
+ if File.exists?(BUILD_ARTIFACT) == false or (force_build and force_build == "--force")
78
+ return true
79
+ end
80
+ Dir.chdir(tests_path) do
81
+ saved_git_hash = IO.readlines(BUILD_ARTIFACT)[0].split[0]
82
+ git_hash = `git rev-parse --short=8 --verify HEAD`
83
+ saved_git_hash.to_s.strip != git_hash.to_s.strip
84
+ end
85
+ end
86
+
87
+ def save_git_hash
88
+ Dir.chdir(tests_path) do
89
+ git_hash = `git rev-parse --short=8 --verify HEAD`
90
+ File.open(BUILD_ARTIFACT, 'w') {|f| f.puts("#{git_hash}")}
91
+ end
92
+ end
93
+
94
+ def clear_build_artifact
95
+ puts "\tClearing build artifact #{BUILD_ARTIFACT}"
96
+ File.unlink BUILD_ARTIFACT if File.exists? BUILD_ARTIFACT
97
+ end
98
+
99
+ def do_mvn_clean options=nil
100
+ sh("mvn clean #{options}")
101
+ end
@@ -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) }