af 0.3.13.beta.5 → 0.3.16.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (594) hide show
  1. data/README.md +13 -3
  2. data/Rakefile +2 -0
  3. data/caldecott_helper/Gemfile +10 -0
  4. data/caldecott_helper/Gemfile.lock +48 -0
  5. data/caldecott_helper/server.rb +43 -0
  6. data/config/clients.yml +17 -0
  7. data/config/micro/offline.conf +2 -0
  8. data/config/micro/paths.yml +22 -0
  9. data/config/micro/refresh_ip.rb +20 -0
  10. data/lib/cli.rb +17 -0
  11. data/lib/cli/commands/admin.rb +2 -2
  12. data/lib/cli/commands/apps.rb +584 -458
  13. data/lib/cli/commands/base.rb +166 -11
  14. data/lib/cli/commands/manifest.rb +56 -0
  15. data/lib/cli/commands/micro.rb +115 -0
  16. data/lib/cli/commands/misc.rb +1 -1
  17. data/lib/cli/commands/services.rb +95 -0
  18. data/lib/cli/commands/user.rb +4 -3
  19. data/lib/cli/config.rb +61 -19
  20. data/lib/cli/console_helper.rb +157 -0
  21. data/lib/cli/core_ext.rb +0 -328
  22. data/lib/cli/frameworks.rb +141 -33
  23. data/lib/cli/manifest_helper.rb +302 -0
  24. data/lib/cli/runner.rb +53 -16
  25. data/lib/cli/tunnel_helper.rb +332 -0
  26. data/lib/cli/usage.rb +11 -1
  27. data/lib/cli/version.rb +1 -1
  28. data/lib/vmc/client.rb +33 -21
  29. data/lib/vmc/const.rb +9 -9
  30. data/lib/vmc/micro.rb +56 -0
  31. data/lib/vmc/micro/switcher/base.rb +97 -0
  32. data/lib/vmc/micro/switcher/darwin.rb +19 -0
  33. data/lib/vmc/micro/switcher/dummy.rb +15 -0
  34. data/lib/vmc/micro/switcher/linux.rb +16 -0
  35. data/lib/vmc/micro/switcher/windows.rb +31 -0
  36. data/lib/vmc/micro/vmrun.rb +158 -0
  37. metadata +124 -643
  38. data/spec/assets/app_info.txt +0 -9
  39. data/spec/assets/app_listings.txt +0 -9
  40. data/spec/assets/bad_create_app.txt +0 -9
  41. data/spec/assets/delete_app.txt +0 -9
  42. data/spec/assets/global_service_listings.txt +0 -9
  43. data/spec/assets/good_create_app.txt +0 -9
  44. data/spec/assets/good_create_service.txt +0 -9
  45. data/spec/assets/info_authenticated.txt +0 -27
  46. data/spec/assets/info_return.txt +0 -15
  47. data/spec/assets/info_return_bad.txt +0 -16
  48. data/spec/assets/list_users.txt +0 -13
  49. data/spec/assets/login_fail.txt +0 -9
  50. data/spec/assets/login_success.txt +0 -9
  51. data/spec/assets/sample_token.txt +0 -1
  52. data/spec/assets/service_already_exists.txt +0 -9
  53. data/spec/assets/service_gateway_fail.txt +0 -9
  54. data/spec/assets/service_listings.txt +0 -9
  55. data/spec/assets/service_not_found.txt +0 -9
  56. data/spec/assets/tests/LICENSE +0 -7136
  57. data/spec/assets/tests/NOTICE +0 -10
  58. data/spec/assets/tests/README +0 -21
  59. data/spec/assets/tests/git/hooks-wrapper +0 -9
  60. data/spec/assets/tests/git/install-hook-symlinks +0 -28
  61. data/spec/assets/tests/git/tracked_hooks/pre-commit +0 -11
  62. data/spec/assets/tests/grails/guestbook/README +0 -8
  63. data/spec/assets/tests/grails/guestbook/Rakefile +0 -28
  64. data/spec/assets/tests/grails/guestbook/application.properties +0 -8
  65. data/spec/assets/tests/grails/guestbook/grails-app/conf/BootStrap.groovy +0 -7
  66. data/spec/assets/tests/grails/guestbook/grails-app/conf/BuildConfig.groovy +0 -31
  67. data/spec/assets/tests/grails/guestbook/grails-app/conf/Config.groovy +0 -90
  68. data/spec/assets/tests/grails/guestbook/grails-app/conf/DataSource.groovy +0 -32
  69. data/spec/assets/tests/grails/guestbook/grails-app/conf/UrlMappings.groovy +0 -13
  70. data/spec/assets/tests/grails/guestbook/grails-app/conf/spring/resources.groovy +0 -3
  71. data/spec/assets/tests/grails/guestbook/grails-app/controllers/com/vmware/appcloud/testapps/grails/guestbook/GuestController.groovy +0 -100
  72. data/spec/assets/tests/grails/guestbook/grails-app/domain/com/vmware/appcloud/testapps/grails/guestbook/Guest.groovy +0 -6
  73. data/spec/assets/tests/grails/guestbook/grails-app/i18n/messages.properties +0 -55
  74. data/spec/assets/tests/grails/guestbook/grails-app/i18n/messages_da.properties +0 -56
  75. data/spec/assets/tests/grails/guestbook/grails-app/i18n/messages_de.properties +0 -55
  76. data/spec/assets/tests/grails/guestbook/grails-app/i18n/messages_es.properties +0 -30
  77. data/spec/assets/tests/grails/guestbook/grails-app/i18n/messages_fr.properties +0 -19
  78. data/spec/assets/tests/grails/guestbook/grails-app/i18n/messages_it.properties +0 -19
  79. data/spec/assets/tests/grails/guestbook/grails-app/i18n/messages_ja.properties +0 -19
  80. data/spec/assets/tests/grails/guestbook/grails-app/i18n/messages_nl.properties +0 -55
  81. data/spec/assets/tests/grails/guestbook/grails-app/i18n/messages_pt_BR.properties +0 -34
  82. data/spec/assets/tests/grails/guestbook/grails-app/i18n/messages_pt_PT.properties +0 -34
  83. data/spec/assets/tests/grails/guestbook/grails-app/i18n/messages_ru.properties +0 -31
  84. data/spec/assets/tests/grails/guestbook/grails-app/i18n/messages_th.properties +0 -35
  85. data/spec/assets/tests/grails/guestbook/grails-app/i18n/messages_zh_CN.properties +0 -18
  86. data/spec/assets/tests/grails/guestbook/grails-app/views/error.gsp +0 -54
  87. data/spec/assets/tests/grails/guestbook/grails-app/views/guest/create.gsp +0 -49
  88. data/spec/assets/tests/grails/guestbook/grails-app/views/guest/edit.gsp +0 -53
  89. data/spec/assets/tests/grails/guestbook/grails-app/views/guest/list.gsp +0 -53
  90. data/spec/assets/tests/grails/guestbook/grails-app/views/guest/show.gsp +0 -58
  91. data/spec/assets/tests/grails/guestbook/grails-app/views/index.gsp +0 -100
  92. data/spec/assets/tests/grails/guestbook/grails-app/views/layouts/main.gsp +0 -17
  93. data/spec/assets/tests/grails/guestbook/pom.xml +0 -316
  94. data/spec/assets/tests/grails/guestbook/src/main/webapp/WEB-INF/web.xml +0 -0
  95. data/spec/assets/tests/grails/guestbook/stacktrace.log +0 -0
  96. data/spec/assets/tests/grails/guestbook/test/unit/com/vmware/appcloud/testapps/grails/guestbook/GuestControllerTests.groovy +0 -17
  97. data/spec/assets/tests/grails/guestbook/test/unit/com/vmware/appcloud/testapps/grails/guestbook/GuestTests.groovy +0 -17
  98. data/spec/assets/tests/grails/guestbook/web-app/WEB-INF/applicationContext.xml +0 -42
  99. data/spec/assets/tests/grails/guestbook/web-app/WEB-INF/sitemesh.xml +0 -14
  100. data/spec/assets/tests/grails/guestbook/web-app/WEB-INF/tld/c.tld +0 -563
  101. data/spec/assets/tests/grails/guestbook/web-app/WEB-INF/tld/fmt.tld +0 -671
  102. data/spec/assets/tests/grails/guestbook/web-app/WEB-INF/tld/grails.tld +0 -550
  103. data/spec/assets/tests/grails/guestbook/web-app/WEB-INF/tld/spring.tld +0 -311
  104. data/spec/assets/tests/grails/guestbook/web-app/css/main.css +0 -273
  105. data/spec/assets/tests/grails/guestbook/web-app/images/favicon.ico +0 -0
  106. data/spec/assets/tests/grails/guestbook/web-app/images/grails_logo.jpg +0 -0
  107. data/spec/assets/tests/grails/guestbook/web-app/images/grails_logo.png +0 -0
  108. data/spec/assets/tests/grails/guestbook/web-app/images/leftnav_btm.png +0 -0
  109. data/spec/assets/tests/grails/guestbook/web-app/images/leftnav_midstretch.png +0 -0
  110. data/spec/assets/tests/grails/guestbook/web-app/images/leftnav_top.png +0 -0
  111. data/spec/assets/tests/grails/guestbook/web-app/images/skin/database_add.png +0 -0
  112. data/spec/assets/tests/grails/guestbook/web-app/images/skin/database_delete.png +0 -0
  113. data/spec/assets/tests/grails/guestbook/web-app/images/skin/database_edit.png +0 -0
  114. data/spec/assets/tests/grails/guestbook/web-app/images/skin/database_save.png +0 -0
  115. data/spec/assets/tests/grails/guestbook/web-app/images/skin/database_table.png +0 -0
  116. data/spec/assets/tests/grails/guestbook/web-app/images/skin/exclamation.png +0 -0
  117. data/spec/assets/tests/grails/guestbook/web-app/images/skin/house.png +0 -0
  118. data/spec/assets/tests/grails/guestbook/web-app/images/skin/information.png +0 -0
  119. data/spec/assets/tests/grails/guestbook/web-app/images/skin/shadow.jpg +0 -0
  120. data/spec/assets/tests/grails/guestbook/web-app/images/skin/sorted_asc.gif +0 -0
  121. data/spec/assets/tests/grails/guestbook/web-app/images/skin/sorted_desc.gif +0 -0
  122. data/spec/assets/tests/grails/guestbook/web-app/images/spinner.gif +0 -0
  123. data/spec/assets/tests/grails/guestbook/web-app/images/springsource.png +0 -0
  124. data/spec/assets/tests/grails/guestbook/web-app/js/application.js +0 -13
  125. data/spec/assets/tests/grails/guestbook/web-app/js/prototype/animation.js +0 -7
  126. data/spec/assets/tests/grails/guestbook/web-app/js/prototype/builder.js +0 -136
  127. data/spec/assets/tests/grails/guestbook/web-app/js/prototype/controls.js +0 -965
  128. data/spec/assets/tests/grails/guestbook/web-app/js/prototype/dragdrop.js +0 -974
  129. data/spec/assets/tests/grails/guestbook/web-app/js/prototype/effects.js +0 -1123
  130. data/spec/assets/tests/grails/guestbook/web-app/js/prototype/prototype.js +0 -4874
  131. data/spec/assets/tests/grails/guestbook/web-app/js/prototype/rico.js +0 -2691
  132. data/spec/assets/tests/grails/guestbook/web-app/js/prototype/scriptaculous.js +0 -68
  133. data/spec/assets/tests/grails/guestbook/web-app/js/prototype/slider.js +0 -275
  134. data/spec/assets/tests/grails/guestbook/web-app/js/prototype/sound.js +0 -59
  135. data/spec/assets/tests/grails/guestbook/web-app/js/prototype/unittest.js +0 -568
  136. data/spec/assets/tests/java_web/java_tiny_app/Java_tiny_app.iml +0 -29
  137. data/spec/assets/tests/java_web/java_tiny_app/README +0 -9
  138. data/spec/assets/tests/java_web/java_tiny_app/pom.xml +0 -15
  139. data/spec/assets/tests/java_web/java_tiny_app/src/main/java/com/vmware/appcloud/testapps/javatinyapp/MainServlet.java +0 -31
  140. data/spec/assets/tests/java_web/java_tiny_app/src/main/webapp/WEB-INF/web.xml +0 -23
  141. data/spec/assets/tests/java_web/java_tiny_app/target/JavaTinyApp-1.0.war +0 -0
  142. data/spec/assets/tests/java_web/java_tiny_app/target/JavaTinyApp-1.0/WEB-INF/classes/com/vmware/appcloud/testapps/javatinyapp/MainServlet.class +0 -0
  143. data/spec/assets/tests/java_web/java_tiny_app/target/JavaTinyApp-1.0/WEB-INF/web.xml +0 -23
  144. data/spec/assets/tests/java_web/java_tiny_app/target/classes/com/vmware/appcloud/testapps/javatinyapp/MainServlet.class +0 -0
  145. data/spec/assets/tests/java_web/java_tiny_app/target/maven-archiver/pom.properties +0 -5
  146. data/spec/assets/tests/lift/hello_lift/README +0 -8
  147. data/spec/assets/tests/lift/hello_lift/pom.xml +0 -209
  148. data/spec/assets/tests/lift/hello_lift/project/build.properties +0 -7
  149. data/spec/assets/tests/lift/hello_lift/project/build/LiftProject.scala +0 -9
  150. data/spec/assets/tests/lift/hello_lift/src/main/resources/props/default.props +0 -1
  151. data/spec/assets/tests/lift/hello_lift/src/main/scala/bootstrap/liftweb/Boot.scala +0 -71
  152. data/spec/assets/tests/lift/hello_lift/src/main/scala/com/vmware/appcloud/lib/DepencyFactory.scala +0 -57
  153. data/spec/assets/tests/lift/hello_lift/src/main/scala/com/vmware/appcloud/model/User.scala +0 -38
  154. data/spec/assets/tests/lift/hello_lift/src/main/scala/com/vmware/appcloud/snippet/HelloWorld.scala +0 -25
  155. data/spec/assets/tests/lift/hello_lift/src/main/webapp/WEB-INF/web.xml +0 -21
  156. data/spec/assets/tests/lift/hello_lift/src/main/webapp/images/ajax-loader.gif +0 -0
  157. data/spec/assets/tests/lift/hello_lift/src/main/webapp/index.html +0 -9
  158. data/spec/assets/tests/lift/hello_lift/src/main/webapp/static/index.html +0 -5
  159. data/spec/assets/tests/lift/hello_lift/src/main/webapp/templates-hidden/default.html +0 -99
  160. data/spec/assets/tests/lift/hello_lift/src/main/webapp/templates-hidden/wizard-all.html +0 -23
  161. data/spec/assets/tests/lift/hello_lift/src/packageLinkDefs.properties +0 -7
  162. data/spec/assets/tests/lift/hello_lift/src/test/scala/LiftConsole.scala +0 -15
  163. data/spec/assets/tests/lift/hello_lift/src/test/scala/RunWebApp.scala +0 -33
  164. data/spec/assets/tests/lift/hello_lift/src/test/scala/com/vmware/appcloud/AppTest.scala +0 -85
  165. data/spec/assets/tests/lift/hello_lift/src/test/scala/com/vmware/appcloud/snippet/HelloWorldTest.scala +0 -46
  166. data/spec/assets/tests/lift/hello_lift/target/classes.timestamp +0 -1
  167. data/spec/assets/tests/lift/hello_lift/target/classes/bootstrap/liftweb/Boot$$anonfun$1.class +0 -0
  168. data/spec/assets/tests/lift/hello_lift/target/classes/bootstrap/liftweb/Boot$$anonfun$2.class +0 -0
  169. data/spec/assets/tests/lift/hello_lift/target/classes/bootstrap/liftweb/Boot$$anonfun$boot$1.class +0 -0
  170. data/spec/assets/tests/lift/hello_lift/target/classes/bootstrap/liftweb/Boot$$anonfun$boot$2.class +0 -0
  171. data/spec/assets/tests/lift/hello_lift/target/classes/bootstrap/liftweb/Boot$$anonfun$boot$3.class +0 -0
  172. data/spec/assets/tests/lift/hello_lift/target/classes/bootstrap/liftweb/Boot$$anonfun$boot$4.class +0 -0
  173. data/spec/assets/tests/lift/hello_lift/target/classes/bootstrap/liftweb/Boot$$anonfun$boot$5.class +0 -0
  174. data/spec/assets/tests/lift/hello_lift/target/classes/bootstrap/liftweb/Boot$$anonfun$boot$6.class +0 -0
  175. data/spec/assets/tests/lift/hello_lift/target/classes/bootstrap/liftweb/Boot$$anonfun$boot$7.class +0 -0
  176. data/spec/assets/tests/lift/hello_lift/target/classes/bootstrap/liftweb/Boot$$anonfun$sitemap$1$1.class +0 -0
  177. data/spec/assets/tests/lift/hello_lift/target/classes/bootstrap/liftweb/Boot$$anonfun$sitemap$1$2.class +0 -0
  178. data/spec/assets/tests/lift/hello_lift/target/classes/bootstrap/liftweb/Boot.class +0 -0
  179. data/spec/assets/tests/lift/hello_lift/target/classes/com/vmware/appcloud/lib/DependencyFactory$.class +0 -0
  180. data/spec/assets/tests/lift/hello_lift/target/classes/com/vmware/appcloud/lib/DependencyFactory$time$$anonfun$$init$$1.class +0 -0
  181. data/spec/assets/tests/lift/hello_lift/target/classes/com/vmware/appcloud/lib/DependencyFactory$time$.class +0 -0
  182. data/spec/assets/tests/lift/hello_lift/target/classes/com/vmware/appcloud/lib/DependencyFactory.class +0 -0
  183. data/spec/assets/tests/lift/hello_lift/target/classes/com/vmware/appcloud/model/User$.class +0 -0
  184. data/spec/assets/tests/lift/hello_lift/target/classes/com/vmware/appcloud/model/User$textArea$.class +0 -0
  185. data/spec/assets/tests/lift/hello_lift/target/classes/com/vmware/appcloud/model/User.class +0 -0
  186. data/spec/assets/tests/lift/hello_lift/target/classes/com/vmware/appcloud/snippet/HelloWorld$$anonfun$howdy$1.class +0 -0
  187. data/spec/assets/tests/lift/hello_lift/target/classes/com/vmware/appcloud/snippet/HelloWorld.class +0 -0
  188. data/spec/assets/tests/lift/hello_lift/target/classes/props/default.props +0 -1
  189. data/spec/assets/tests/lift/hello_lift/target/maven-archiver/pom.properties +0 -5
  190. data/spec/assets/tests/lift/hello_lift/target/packageLinkDefs.properties +0 -7
  191. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0.war +0 -0
  192. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/bootstrap/liftweb/Boot$$anonfun$1.class +0 -0
  193. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/bootstrap/liftweb/Boot$$anonfun$2.class +0 -0
  194. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/bootstrap/liftweb/Boot$$anonfun$boot$1.class +0 -0
  195. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/bootstrap/liftweb/Boot$$anonfun$boot$2.class +0 -0
  196. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/bootstrap/liftweb/Boot$$anonfun$boot$3.class +0 -0
  197. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/bootstrap/liftweb/Boot$$anonfun$boot$4.class +0 -0
  198. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/bootstrap/liftweb/Boot$$anonfun$boot$5.class +0 -0
  199. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/bootstrap/liftweb/Boot$$anonfun$boot$6.class +0 -0
  200. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/bootstrap/liftweb/Boot$$anonfun$boot$7.class +0 -0
  201. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/bootstrap/liftweb/Boot$$anonfun$sitemap$1$1.class +0 -0
  202. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/bootstrap/liftweb/Boot$$anonfun$sitemap$1$2.class +0 -0
  203. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/bootstrap/liftweb/Boot.class +0 -0
  204. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/com/vmware/appcloud/lib/DependencyFactory$.class +0 -0
  205. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/com/vmware/appcloud/lib/DependencyFactory$time$$anonfun$$init$$1.class +0 -0
  206. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/com/vmware/appcloud/lib/DependencyFactory$time$.class +0 -0
  207. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/com/vmware/appcloud/lib/DependencyFactory.class +0 -0
  208. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/com/vmware/appcloud/model/User$.class +0 -0
  209. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/com/vmware/appcloud/model/User$textArea$.class +0 -0
  210. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/com/vmware/appcloud/model/User.class +0 -0
  211. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/com/vmware/appcloud/snippet/HelloWorld$$anonfun$howdy$1.class +0 -0
  212. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/com/vmware/appcloud/snippet/HelloWorld.class +0 -0
  213. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/classes/props/default.props +0 -1
  214. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/activation-1.1.jar +0 -0
  215. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/commons-codec-1.4.jar +0 -0
  216. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/commons-fileupload-1.2.2.jar +0 -0
  217. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/derby-10.7.1.1.jar +0 -0
  218. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/h2-1.2.138.jar +0 -0
  219. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/htmlparser-1.2.1.jar +0 -0
  220. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/joda-time-1.6.2.jar +0 -0
  221. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/lift-actor_2.8.1-2.3.jar +0 -0
  222. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/lift-common_2.8.1-2.3.jar +0 -0
  223. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/lift-db_2.8.1-2.3.jar +0 -0
  224. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/lift-json_2.8.1-2.3.jar +0 -0
  225. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/lift-mapper_2.8.1-2.3.jar +0 -0
  226. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/lift-proto_2.8.1-2.3.jar +0 -0
  227. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/lift-util_2.8.1-2.3.jar +0 -0
  228. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/lift-webkit_2.8.1-2.3.jar +0 -0
  229. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/logback-classic-0.9.26.jar +0 -0
  230. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/logback-core-0.9.26.jar +0 -0
  231. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/mail-1.4.1.jar +0 -0
  232. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/paranamer-2.3.jar +0 -0
  233. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/scala-library-2.8.1.jar +0 -0
  234. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/lib/slf4j-api-1.6.1.jar +0 -0
  235. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/WEB-INF/web.xml +0 -21
  236. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/images/ajax-loader.gif +0 -0
  237. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/index.html +0 -9
  238. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/static/index.html +0 -5
  239. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/templates-hidden/default.html +0 -99
  240. data/spec/assets/tests/lift/hello_lift/target/scala_lift-1.0/templates-hidden/wizard-all.html +0 -23
  241. data/spec/assets/tests/lift/hello_lift/target/test-classes.timestamp +0 -1
  242. data/spec/assets/tests/lift/hello_lift/target/test-classes/LiftConsole$.class +0 -0
  243. data/spec/assets/tests/lift/hello_lift/target/test-classes/LiftConsole.class +0 -0
  244. data/spec/assets/tests/lift/hello_lift/target/test-classes/RunWebApp$.class +0 -0
  245. data/spec/assets/tests/lift/hello_lift/target/test-classes/RunWebApp.class +0 -0
  246. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/AppTest$$anonfun$wellFormed$1$1.class +0 -0
  247. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/AppTest$.class +0 -0
  248. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/AppTest.class +0 -0
  249. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecs$$anonfun$1$$anonfun$apply$6$$anonfun$apply$1.class +0 -0
  250. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecs$$anonfun$1$$anonfun$apply$6$$anonfun$apply$3.class +0 -0
  251. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecs$$anonfun$1$$anonfun$apply$6$$anonfun$apply$7$$anonfun$apply$2.class +0 -0
  252. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecs$$anonfun$1$$anonfun$apply$6$$anonfun$apply$7$$anonfun$apply$8.class +0 -0
  253. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecs$$anonfun$1$$anonfun$apply$6$$anonfun$apply$7.class +0 -0
  254. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecs$$anonfun$1$$anonfun$apply$6$$anonfun$apply$9$$anonfun$apply$10.class +0 -0
  255. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecs$$anonfun$1$$anonfun$apply$6$$anonfun$apply$9$$anonfun$apply$4.class +0 -0
  256. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecs$$anonfun$1$$anonfun$apply$6$$anonfun$apply$9.class +0 -0
  257. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecs$$anonfun$1$$anonfun$apply$6.class +0 -0
  258. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecs$$anonfun$1.class +0 -0
  259. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecs$$anonfun$executeExpectations$1$$anonfun$apply$5.class +0 -0
  260. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecs$$anonfun$executeExpectations$1.class +0 -0
  261. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecs$.class +0 -0
  262. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecs.class +0 -0
  263. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecsAsTest.class +0 -0
  264. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecsRunner$.class +0 -0
  265. data/spec/assets/tests/lift/hello_lift/target/test-classes/com/vmware/appcloud/snippet/HelloWorldTestSpecsRunner.class +0 -0
  266. data/spec/assets/tests/node/hello_vcap/app.js +0 -16
  267. data/spec/assets/tests/rails3/hello_vcap/Gemfile +0 -8
  268. data/spec/assets/tests/rails3/hello_vcap/Gemfile.lock +0 -85
  269. data/spec/assets/tests/rails3/hello_vcap/README +0 -256
  270. data/spec/assets/tests/rails3/hello_vcap/Rakefile +0 -7
  271. data/spec/assets/tests/rails3/hello_vcap/app/controllers/application_controller.rb +0 -3
  272. data/spec/assets/tests/rails3/hello_vcap/app/controllers/root_controller.rb +0 -13
  273. data/spec/assets/tests/rails3/hello_vcap/app/helpers/application_helper.rb +0 -2
  274. data/spec/assets/tests/rails3/hello_vcap/app/helpers/root_helper.rb +0 -2
  275. data/spec/assets/tests/rails3/hello_vcap/app/models/widget.rb +0 -2
  276. data/spec/assets/tests/rails3/hello_vcap/app/views/layouts/application.html.erb +0 -11
  277. data/spec/assets/tests/rails3/hello_vcap/app/views/root/index.html.erb +0 -5
  278. data/spec/assets/tests/rails3/hello_vcap/config.ru +0 -4
  279. data/spec/assets/tests/rails3/hello_vcap/config/application.rb +0 -42
  280. data/spec/assets/tests/rails3/hello_vcap/config/boot.rb +0 -13
  281. data/spec/assets/tests/rails3/hello_vcap/config/database.yml +0 -12
  282. data/spec/assets/tests/rails3/hello_vcap/config/environment.rb +0 -5
  283. data/spec/assets/tests/rails3/hello_vcap/config/environments/development.rb +0 -26
  284. data/spec/assets/tests/rails3/hello_vcap/config/environments/production.rb +0 -49
  285. data/spec/assets/tests/rails3/hello_vcap/config/environments/test.rb +0 -35
  286. data/spec/assets/tests/rails3/hello_vcap/config/initializers/backtrace_silencers.rb +0 -7
  287. data/spec/assets/tests/rails3/hello_vcap/config/initializers/inflections.rb +0 -10
  288. data/spec/assets/tests/rails3/hello_vcap/config/initializers/mime_types.rb +0 -5
  289. data/spec/assets/tests/rails3/hello_vcap/config/initializers/secret_token.rb +0 -7
  290. data/spec/assets/tests/rails3/hello_vcap/config/initializers/session_store.rb +0 -8
  291. data/spec/assets/tests/rails3/hello_vcap/config/locales/en.yml +0 -5
  292. data/spec/assets/tests/rails3/hello_vcap/config/routes.rb +0 -61
  293. data/spec/assets/tests/rails3/hello_vcap/db/migrate/20101108182500_create_widgets.rb +0 -13
  294. data/spec/assets/tests/rails3/hello_vcap/db/schema.rb +0 -21
  295. data/spec/assets/tests/rails3/hello_vcap/db/seeds.rb +0 -7
  296. data/spec/assets/tests/rails3/hello_vcap/public/404.html +0 -26
  297. data/spec/assets/tests/rails3/hello_vcap/public/422.html +0 -26
  298. data/spec/assets/tests/rails3/hello_vcap/public/500.html +0 -26
  299. data/spec/assets/tests/rails3/hello_vcap/public/favicon.ico +0 -0
  300. data/spec/assets/tests/rails3/hello_vcap/public/images/rails.png +0 -0
  301. data/spec/assets/tests/rails3/hello_vcap/public/javascripts/application.js +0 -0
  302. data/spec/assets/tests/rails3/hello_vcap/public/robots.txt +0 -5
  303. data/spec/assets/tests/rails3/hello_vcap/script/rails +0 -6
  304. data/spec/assets/tests/rails3/hello_vcap/test/functional/root_controller_test.rb +0 -14
  305. data/spec/assets/tests/rails3/hello_vcap/test/performance/browsing_test.rb +0 -9
  306. data/spec/assets/tests/rails3/hello_vcap/test/test_helper.rb +0 -13
  307. data/spec/assets/tests/rails3/hello_vcap/test/unit/helpers/root_helper_test.rb +0 -4
  308. data/spec/assets/tests/rails3/hello_vcap/test/unit/widget_test.rb +0 -12
  309. data/spec/assets/tests/sinatra/hello_vcap/foo.rb +0 -13
  310. data/spec/assets/tests/spring/auto-reconfig-missing-deps-test-app/pom.xml +0 -247
  311. data/spec/assets/tests/spring/auto-reconfig-missing-deps-test-app/src/main/java/org/cloudfoundry/test/DefaultController.java +0 -40
  312. data/spec/assets/tests/spring/auto-reconfig-missing-deps-test-app/src/main/resources/META-INF/spring/root-context.xml +0 -27
  313. data/spec/assets/tests/spring/auto-reconfig-missing-deps-test-app/src/main/resources/log4j.xml +0 -41
  314. data/spec/assets/tests/spring/auto-reconfig-missing-deps-test-app/src/main/webapp/META-INF/MANIFEST.MF +0 -2
  315. data/spec/assets/tests/spring/auto-reconfig-missing-deps-test-app/src/main/webapp/WEB-INF/spring/servlet-context.xml +0 -22
  316. data/spec/assets/tests/spring/auto-reconfig-missing-deps-test-app/src/main/webapp/WEB-INF/web.xml +0 -30
  317. data/spec/assets/tests/spring/auto-reconfig-test-app/pom.xml +0 -374
  318. data/spec/assets/tests/spring/auto-reconfig-test-app/src/main/java/org/cloudfoundry/test/ServiceController.java +0 -122
  319. data/spec/assets/tests/spring/auto-reconfig-test-app/src/main/java/org/cloudfoundry/test/ServiceHolder.java +0 -97
  320. data/spec/assets/tests/spring/auto-reconfig-test-app/src/main/java/org/cloudfoundry/test/TestApplicationContextInitializer.java +0 -45
  321. data/spec/assets/tests/spring/auto-reconfig-test-app/src/main/resources/META-INF/spring/database.properties +0 -4
  322. data/spec/assets/tests/spring/auto-reconfig-test-app/src/main/resources/META-INF/spring/root-context.xml +0 -86
  323. data/spec/assets/tests/spring/auto-reconfig-test-app/src/main/resources/log4j.xml +0 -41
  324. data/spec/assets/tests/spring/auto-reconfig-test-app/src/main/webapp/META-INF/MANIFEST.MF +0 -2
  325. data/spec/assets/tests/spring/auto-reconfig-test-app/src/main/webapp/WEB-INF/spring/servlet-context.xml +0 -22
  326. data/spec/assets/tests/spring/auto-reconfig-test-app/src/main/webapp/WEB-INF/web.xml +0 -34
  327. data/spec/assets/tests/spring/roo-guestbook/README +0 -4
  328. data/spec/assets/tests/spring/roo-guestbook/pom.xml +0 -493
  329. data/spec/assets/tests/spring/roo-guestbook/src/main/java/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest.java +0 -13
  330. data/spec/assets/tests/spring/roo-guestbook/src/main/java/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest_Roo_Configurable.aj +0 -12
  331. data/spec/assets/tests/spring/roo-guestbook/src/main/java/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest_Roo_Entity.aj +0 -106
  332. data/spec/assets/tests/spring/roo-guestbook/src/main/java/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest_Roo_JavaBean.aj +0 -18
  333. data/spec/assets/tests/spring/roo-guestbook/src/main/java/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest_Roo_ToString.aj +0 -18
  334. data/spec/assets/tests/spring/roo-guestbook/src/main/java/com/vmware/appcloud/testapps/roo/guestbook/web/GuestController.java +0 -12
  335. data/spec/assets/tests/spring/roo-guestbook/src/main/java/com/vmware/appcloud/testapps/roo/guestbook/web/GuestController_Roo_Controller.aj +0 -115
  336. data/spec/assets/tests/spring/roo-guestbook/src/main/resources/META-INF/persistence.xml +0 -15
  337. data/spec/assets/tests/spring/roo-guestbook/src/main/resources/META-INF/spring/applicationContext.xml +0 -63
  338. data/spec/assets/tests/spring/roo-guestbook/src/main/resources/META-INF/spring/database.properties +0 -6
  339. data/spec/assets/tests/spring/roo-guestbook/src/main/resources/log4j.properties +0 -17
  340. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/classes/alt.properties +0 -1
  341. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/classes/standard.properties +0 -1
  342. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/i18n/application.properties +0 -11
  343. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/i18n/messages.properties +0 -99
  344. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/layouts/default.jspx +0 -27
  345. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/layouts/layouts.xml +0 -19
  346. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/spring/webmvc-config.xml +0 -73
  347. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/create.tagx +0 -29
  348. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/dependency.tagx +0 -25
  349. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/fields/checkbox.tagx +0 -35
  350. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/fields/column.tagx +0 -28
  351. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/fields/datetime.tagx +0 -75
  352. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/fields/display.tagx +0 -51
  353. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/fields/editor.tagx +0 -46
  354. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/fields/input.tagx +0 -87
  355. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/fields/reference.tagx +0 -42
  356. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/fields/select.tagx +0 -99
  357. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/fields/simple.tagx +0 -35
  358. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/fields/table.tagx +0 -138
  359. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/fields/textarea.tagx +0 -47
  360. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/find.tagx +0 -29
  361. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/list.tagx +0 -31
  362. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/show.tagx +0 -101
  363. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/form/update.tagx +0 -42
  364. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/menu/category.tagx +0 -25
  365. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/menu/item.tagx +0 -29
  366. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/menu/menu.tagx +0 -13
  367. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/util/language.tagx +0 -31
  368. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/util/load-scripts.tagx +0 -28
  369. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/util/pagination.tagx +0 -87
  370. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/util/panel.tagx +0 -32
  371. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/util/placeholder.tagx +0 -4
  372. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/tags/util/theme.tagx +0 -36
  373. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/views/dataAccessFailure.jspx +0 -29
  374. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/views/footer.jspx +0 -36
  375. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/views/guests/create.jspx +0 -8
  376. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/views/guests/list.jspx +0 -9
  377. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/views/guests/show.jspx +0 -7
  378. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/views/guests/update.jspx +0 -7
  379. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/views/guests/views.xml +0 -16
  380. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/views/header.jspx +0 -10
  381. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/views/index-template.jspx +0 -10
  382. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/views/index.jspx +0 -13
  383. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/views/menu.jspx +0 -11
  384. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/views/resourceNotFound.jspx +0 -28
  385. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/views/uncaughtException.jspx +0 -28
  386. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/views/views.xml +0 -24
  387. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/WEB-INF/web.xml +0 -94
  388. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/images/add.png +0 -0
  389. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/images/banner-graphic.png +0 -0
  390. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/images/create.png +0 -0
  391. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/images/delete.png +0 -0
  392. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/images/en.png +0 -0
  393. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/images/favicon.ico +0 -0
  394. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/images/list.png +0 -0
  395. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/images/resultset_first.png +0 -0
  396. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/images/resultset_last.png +0 -0
  397. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/images/resultset_next.png +0 -0
  398. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/images/resultset_previous.png +0 -0
  399. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/images/show.png +0 -0
  400. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/images/springsource-logo.png +0 -0
  401. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/images/update.png +0 -0
  402. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/styles/alt.css +0 -362
  403. data/spec/assets/tests/spring/roo-guestbook/src/main/webapp/styles/standard.css +0 -366
  404. data/spec/assets/tests/spring/roo-guestbook/target/classes/META-INF/aop-ajc.xml +0 -10
  405. data/spec/assets/tests/spring/roo-guestbook/target/classes/META-INF/persistence.xml +0 -15
  406. data/spec/assets/tests/spring/roo-guestbook/target/classes/META-INF/spring/applicationContext.xml +0 -63
  407. data/spec/assets/tests/spring/roo-guestbook/target/classes/META-INF/spring/database.properties +0 -6
  408. data/spec/assets/tests/spring/roo-guestbook/target/classes/builddef.lst +0 -18
  409. data/spec/assets/tests/spring/roo-guestbook/target/classes/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest.class +0 -0
  410. data/spec/assets/tests/spring/roo-guestbook/target/classes/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest_Roo_Configurable.class +0 -0
  411. data/spec/assets/tests/spring/roo-guestbook/target/classes/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest_Roo_Entity.class +0 -0
  412. data/spec/assets/tests/spring/roo-guestbook/target/classes/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest_Roo_JavaBean.class +0 -0
  413. data/spec/assets/tests/spring/roo-guestbook/target/classes/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest_Roo_ToString.class +0 -0
  414. data/spec/assets/tests/spring/roo-guestbook/target/classes/com/vmware/appcloud/testapps/roo/guestbook/web/GuestController$1.class +0 -0
  415. data/spec/assets/tests/spring/roo-guestbook/target/classes/com/vmware/appcloud/testapps/roo/guestbook/web/GuestController.class +0 -0
  416. data/spec/assets/tests/spring/roo-guestbook/target/classes/com/vmware/appcloud/testapps/roo/guestbook/web/GuestController_Roo_Controller.class +0 -0
  417. data/spec/assets/tests/spring/roo-guestbook/target/classes/log4j.properties +0 -17
  418. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT.war +0 -0
  419. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/META-INF/aop-ajc.xml +0 -10
  420. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/META-INF/persistence.xml +0 -15
  421. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/META-INF/spring/applicationContext.xml +0 -63
  422. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/META-INF/spring/database.properties +0 -6
  423. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/alt.properties +0 -1
  424. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/builddef.lst +0 -18
  425. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest.class +0 -0
  426. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest_Roo_Configurable.class +0 -0
  427. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest_Roo_Entity.class +0 -0
  428. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest_Roo_JavaBean.class +0 -0
  429. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/com/vmware/appcloud/testapps/roo/guestbook/domain/Guest_Roo_ToString.class +0 -0
  430. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/com/vmware/appcloud/testapps/roo/guestbook/web/GuestController$1.class +0 -0
  431. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/com/vmware/appcloud/testapps/roo/guestbook/web/GuestController.class +0 -0
  432. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/com/vmware/appcloud/testapps/roo/guestbook/web/GuestController_Roo_Controller.class +0 -0
  433. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/log4j.properties +0 -17
  434. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/classes/standard.properties +0 -1
  435. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/i18n/application.properties +0 -11
  436. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/i18n/messages.properties +0 -99
  437. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/layouts/default.jspx +0 -27
  438. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/layouts/layouts.xml +0 -19
  439. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/antlr-2.7.6.jar +0 -0
  440. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/aopalliance-1.0.jar +0 -0
  441. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/aspectjrt-1.6.10.jar +0 -0
  442. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/aspectjweaver-1.6.10.jar +0 -0
  443. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/cglib-nodep-2.2.jar +0 -0
  444. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/commons-beanutils-1.8.0.jar +0 -0
  445. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/commons-collections-3.1.jar +0 -0
  446. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/commons-dbcp-1.3.jar +0 -0
  447. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/commons-digester-2.0.jar +0 -0
  448. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/commons-fileupload-1.2.1.jar +0 -0
  449. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/commons-pool-1.5.4.jar +0 -0
  450. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/dom4j-1.6.1.jar +0 -0
  451. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/flexjson-2.0.jar +0 -0
  452. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/hibernate-annotations-3.5.5-Final.jar +0 -0
  453. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/hibernate-commons-annotations-3.2.0.Final.jar +0 -0
  454. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/hibernate-core-3.5.5-Final.jar +0 -0
  455. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/hibernate-entitymanager-3.5.5-Final.jar +0 -0
  456. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/hibernate-jpa-2.0-api-1.0.0.Final.jar +0 -0
  457. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/hibernate-validator-4.1.0.Final.jar +0 -0
  458. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/hsqldb-1.8.0.10.jar +0 -0
  459. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/javassist-3.9.0.GA.jar +0 -0
  460. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/jcl-over-slf4j-1.6.1.jar +0 -0
  461. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/joda-time-1.6.jar +0 -0
  462. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/jstl-1.2.jar +0 -0
  463. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/jta-1.1.jar +0 -0
  464. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/log4j-1.2.16.jar +0 -0
  465. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/slf4j-api-1.6.1.jar +0 -0
  466. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/slf4j-log4j12-1.6.1.jar +0 -0
  467. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/spring-aop-3.0.5.RELEASE.jar +0 -0
  468. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/spring-asm-3.0.5.RELEASE.jar +0 -0
  469. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/spring-aspects-3.0.5.RELEASE.jar +0 -0
  470. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/spring-beans-3.0.5.RELEASE.jar +0 -0
  471. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/spring-context-3.0.5.RELEASE.jar +0 -0
  472. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/spring-context-support-3.0.5.RELEASE.jar +0 -0
  473. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/spring-core-3.0.5.RELEASE.jar +0 -0
  474. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/spring-expression-3.0.5.RELEASE.jar +0 -0
  475. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/spring-jdbc-3.0.5.RELEASE.jar +0 -0
  476. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/spring-js-resources-2.2.0.RELEASE.jar +0 -0
  477. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/spring-orm-3.0.5.RELEASE.jar +0 -0
  478. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/spring-tx-3.0.5.RELEASE.jar +0 -0
  479. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/spring-web-3.0.5.RELEASE.jar +0 -0
  480. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/spring-webmvc-3.0.5.RELEASE.jar +0 -0
  481. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/tiles-api-2.2.1.jar +0 -0
  482. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/tiles-core-2.2.1.jar +0 -0
  483. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/tiles-jsp-2.2.1.jar +0 -0
  484. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/tiles-servlet-2.2.1.jar +0 -0
  485. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/tiles-template-2.2.1.jar +0 -0
  486. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/validation-api-1.0.0.GA.jar +0 -0
  487. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/lib/xml-apis-1.0.b2.jar +0 -0
  488. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/spring/webmvc-config.xml +0 -73
  489. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/create.tagx +0 -29
  490. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/dependency.tagx +0 -25
  491. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/fields/checkbox.tagx +0 -35
  492. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/fields/column.tagx +0 -28
  493. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/fields/datetime.tagx +0 -75
  494. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/fields/display.tagx +0 -51
  495. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/fields/editor.tagx +0 -46
  496. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/fields/input.tagx +0 -87
  497. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/fields/reference.tagx +0 -42
  498. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/fields/select.tagx +0 -99
  499. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/fields/simple.tagx +0 -35
  500. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/fields/table.tagx +0 -138
  501. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/fields/textarea.tagx +0 -47
  502. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/find.tagx +0 -29
  503. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/list.tagx +0 -31
  504. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/show.tagx +0 -101
  505. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/form/update.tagx +0 -42
  506. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/menu/category.tagx +0 -25
  507. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/menu/item.tagx +0 -29
  508. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/menu/menu.tagx +0 -13
  509. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/util/language.tagx +0 -31
  510. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/util/load-scripts.tagx +0 -28
  511. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/util/pagination.tagx +0 -87
  512. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/util/panel.tagx +0 -32
  513. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/util/placeholder.tagx +0 -4
  514. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/tags/util/theme.tagx +0 -36
  515. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/views/dataAccessFailure.jspx +0 -29
  516. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/views/footer.jspx +0 -36
  517. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/views/guests/create.jspx +0 -8
  518. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/views/guests/list.jspx +0 -9
  519. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/views/guests/show.jspx +0 -7
  520. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/views/guests/update.jspx +0 -7
  521. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/views/guests/views.xml +0 -16
  522. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/views/header.jspx +0 -10
  523. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/views/index-template.jspx +0 -10
  524. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/views/index.jspx +0 -13
  525. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/views/menu.jspx +0 -11
  526. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/views/resourceNotFound.jspx +0 -28
  527. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/views/uncaughtException.jspx +0 -28
  528. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/views/views.xml +0 -24
  529. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/WEB-INF/web.xml +0 -94
  530. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/images/add.png +0 -0
  531. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/images/banner-graphic.png +0 -0
  532. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/images/create.png +0 -0
  533. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/images/delete.png +0 -0
  534. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/images/en.png +0 -0
  535. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/images/favicon.ico +0 -0
  536. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/images/list.png +0 -0
  537. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/images/resultset_first.png +0 -0
  538. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/images/resultset_last.png +0 -0
  539. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/images/resultset_next.png +0 -0
  540. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/images/resultset_previous.png +0 -0
  541. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/images/show.png +0 -0
  542. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/images/springsource-logo.png +0 -0
  543. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/images/update.png +0 -0
  544. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/styles/alt.css +0 -362
  545. data/spec/assets/tests/spring/roo-guestbook/target/guestbook-roo-0.1.0.BUILD-SNAPSHOT/styles/standard.css +0 -366
  546. data/spec/assets/tests/spring/roo-guestbook/target/maven-archiver/pom.properties +0 -5
  547. data/spec/assets/tests/spring/roo-guestbook/target/war/work/webapp-cache.xml +0 -2461
  548. data/spec/assets/tests/spring/spring-osgi-hello/pom.xml +0 -233
  549. data/spec/assets/tests/spring/spring-osgi-hello/src/main/java/org/cloudfoundry/osgi/HomeController.java +0 -39
  550. data/spec/assets/tests/spring/spring-osgi-hello/src/main/resources/log4j.xml +0 -41
  551. data/spec/assets/tests/spring/spring-osgi-hello/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml +0 -28
  552. data/spec/assets/tests/spring/spring-osgi-hello/src/main/webapp/WEB-INF/spring/root-context.xml +0 -8
  553. data/spec/assets/tests/spring/spring-osgi-hello/src/main/webapp/WEB-INF/views/home.jsp +0 -14
  554. data/spec/assets/tests/spring/spring-osgi-hello/src/main/webapp/WEB-INF/web.xml +0 -33
  555. data/spec/assets/tests/spring/spring-osgi-hello/src/test/resources/log4j.xml +0 -41
  556. data/spec/assets/tests/spring/spring-osgi-hello/target/classes/META-INF/aop-ajc.xml +0 -5
  557. data/spec/assets/tests/spring/spring-osgi-hello/target/classes/builddef.lst +0 -10
  558. data/spec/assets/tests/spring/spring-osgi-hello/target/classes/log4j.xml +0 -41
  559. data/spec/assets/tests/spring/spring-osgi-hello/target/classes/org/cloudfoundry/osgi/HomeController.class +0 -0
  560. data/spec/assets/tests/spring/spring-osgi-hello/target/hello.war +0 -0
  561. data/spec/assets/tests/spring/spring-osgi-hello/target/maven-archiver/pom.properties +0 -5
  562. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/classes/META-INF/aop-ajc.xml +0 -5
  563. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/classes/builddef.lst +0 -10
  564. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/classes/log4j.xml +0 -41
  565. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/classes/org/cloudfoundry/osgi/HomeController.class +0 -0
  566. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/aopalliance-1.0.jar +0 -0
  567. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/aspectjrt-1.6.9.jar +0 -0
  568. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/commons-logging-1.1.1.jar +0 -0
  569. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/javax.inject-1.jar +0 -0
  570. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/jcl-over-slf4j-1.5.10.jar +0 -0
  571. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/jstl-1.2.jar +0 -0
  572. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/log4j-1.2.15.jar +0 -0
  573. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/slf4j-api-1.5.10.jar +0 -0
  574. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/slf4j-log4j12-1.5.10.jar +0 -0
  575. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/spring-aop-3.0.5.RELEASE.jar +0 -0
  576. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/spring-asm-3.0.5.RELEASE.jar +0 -0
  577. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/spring-beans-3.0.5.RELEASE.jar +0 -0
  578. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/spring-context-3.0.5.RELEASE.jar +0 -0
  579. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/spring-context-support-3.0.5.RELEASE.jar +0 -0
  580. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/spring-core-3.0.5.RELEASE.jar +0 -0
  581. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/spring-expression-3.0.5.RELEASE.jar +0 -0
  582. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/spring-web-3.0.5.RELEASE.jar +0 -0
  583. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/lib/spring-webmvc-3.0.5.RELEASE.jar +0 -0
  584. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/spring/appServlet/servlet-context.xml +0 -28
  585. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/spring/root-context.xml +0 -8
  586. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/views/home.jsp +0 -14
  587. data/spec/assets/tests/spring/spring-osgi-hello/target/osgi-1.0.0-BUILD-SNAPSHOT/WEB-INF/web.xml +0 -33
  588. data/spec/assets/tests/spring/spring-osgi-hello/target/test-classes/log4j.xml +0 -41
  589. data/spec/assets/user_info.txt +0 -9
  590. data/spec/spec_helper.rb +0 -13
  591. data/spec/unit/cli_opts_spec.rb +0 -85
  592. data/spec/unit/client_spec.rb +0 -345
  593. data/spec/unit/frameworks_spec.rb +0 -94
  594. data/spec/unit/io_spec.rb +0 -192
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # af
1
+ # AF
2
2
 
3
- The AppFog.com CLI. This is the command line interface to AppFog's Application Platform
3
+ The AppFog CLI. This is the command line interface to AppFog.com
4
4
 
5
5
  af is based on vmc but will have features specific to the AppFog service as well as having the default target set to AppFog's service
6
6
 
@@ -33,7 +33,6 @@ MIT license, please see the LICENSE file. All rights reserved._
33
33
  stop <appname> Stop the application
34
34
  restart <appname> Restart the application
35
35
  delete <appname> Delete the application
36
- rename <appname> <newname> Rename the application
37
36
 
38
37
  Application Updates
39
38
  update <appname> [--path] Update the application bits
@@ -64,6 +63,8 @@ MIT license, please see the LICENSE file. All rights reserved._
64
63
  bind-service <servicename> <appname> Bind a service to an application
65
64
  unbind-service <servicename> <appname> Unbind service from the application
66
65
  clone-services <src-app> <dest-app> Clone service bindings from <src-app> application to <dest-app>
66
+ tunnel <servicename> [--port] Create a local tunnel to a service
67
+ tunnel <servicename> <clientcmd> Create a local tunnel to a service and start a local client
67
68
 
68
69
  Administration
69
70
  user Display user account information
@@ -76,6 +77,15 @@ MIT license, please see the LICENSE file. All rights reserved._
76
77
  runtimes Display the supported runtimes of the target system
77
78
  frameworks Display the recognized frameworks of the target system
78
79
 
80
+ Micro Cloud Foundry
81
+ micro status Display Micro Cloud Foundry VM status
82
+ mciro offline Configure Micro Cloud Foundry VM for offline mode
83
+ micro online Configure Micro Cloud Foundry VM for online mode
84
+ [--vmx file] Path to micro.vmx
85
+ [--vmrun executable] Path to vmrun executable
86
+ [--password cleartext] Cleartext password for guest VM vcap user
87
+ [--save] Save cleartext password in ~/.vmc_micro
88
+
79
89
  Misc
80
90
  aliases List aliases
81
91
  alias <alias[=]command> Create an alias for a command
data/Rakefile CHANGED
@@ -30,6 +30,8 @@ TESTS_TO_BUILD = ["#{TESTS_PATH}/java_web/java_tiny_app",
30
30
  "#{TESTS_PATH}/lift/hello_lift",
31
31
  "#{TESTS_PATH}/spring/roo-guestbook",
32
32
  "#{TESTS_PATH}/spring/spring-osgi-hello",
33
+ "#{TESTS_PATH}/standalone/java_app",
34
+ "#{TESTS_PATH}/standalone/python_app"
33
35
  ]
34
36
 
35
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]'"
@@ -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 CHANGED
@@ -4,6 +4,18 @@ WINDOWS = !!(RUBY_PLATFORM =~ /mingw|mswin32|cygwin/)
4
4
 
5
5
  module VMC
6
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
7
19
 
8
20
  module Cli
9
21
  autoload :Config, "#{ROOT}/cli/config"
@@ -11,14 +23,19 @@ module VMC
11
23
  autoload :Runner, "#{ROOT}/cli/runner"
12
24
  autoload :ZipUtil, "#{ROOT}/cli/zip_util"
13
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"
14
29
 
15
30
  module Command
16
31
  autoload :Base, "#{ROOT}/cli/commands/base"
17
32
  autoload :Admin, "#{ROOT}/cli/commands/admin"
18
33
  autoload :Apps, "#{ROOT}/cli/commands/apps"
34
+ autoload :Micro, "#{ROOT}/cli/commands/micro"
19
35
  autoload :Misc, "#{ROOT}/cli/commands/misc"
20
36
  autoload :Services, "#{ROOT}/cli/commands/services"
21
37
  autoload :User, "#{ROOT}/cli/commands/user"
38
+ autoload :Manifest, "#{ROOT}/cli/commands/manifest"
22
39
  end
23
40
 
24
41
  end
@@ -59,8 +59,8 @@ module VMC::Cli::Command
59
59
  )
60
60
  err "Aborted" unless proceed
61
61
  end
62
- cmd = Apps.new(@options)
63
- apps.each { |app| cmd.delete_app(app[:name], true) }
62
+ cmd = Apps.new(@options.merge({ :force => true }))
63
+ apps.each { |app| cmd.delete(app[:name]) }
64
64
  end
65
65
 
66
66
  services = client.services
@@ -1,13 +1,19 @@
1
1
  require 'digest/sha1'
2
2
  require 'fileutils'
3
+ require 'pathname'
3
4
  require 'tempfile'
4
5
  require 'tmpdir'
5
6
  require 'set'
7
+ require "uuidtools"
8
+ require 'socket'
6
9
 
7
10
  module VMC::Cli::Command
8
11
 
9
12
  class Apps < Base
10
13
  include VMC::Cli::ServicesHelper
14
+ include VMC::Cli::ManifestHelper
15
+ include VMC::Cli::TunnelHelper
16
+ include VMC::Cli::ConsoleHelper
11
17
 
12
18
  def list
13
19
  apps = client.apps
@@ -36,117 +42,87 @@ module VMC::Cli::Command
36
42
  HEALTH_TICKS = 5/SLEEP_TIME
37
43
  TAIL_TICKS = 45/SLEEP_TIME
38
44
  GIVEUP_TICKS = 120/SLEEP_TIME
39
- YES_SET = Set.new(["y", "Y", "yes", "YES"])
40
45
 
41
- def start(appname, push = false)
42
- app = client.app_info(appname)
43
-
44
- return display "Application '#{appname}' could not be found".red if app.nil?
45
- return display "Application '#{appname}' already started".yellow if app[:state] == 'STARTED'
46
+ def info(what, default=nil)
47
+ @options[what] || (@app_info && @app_info[what.to_s]) || default
48
+ end
46
49
 
47
- if @options[:debug]
48
- runtimes = client.runtimes_info
49
- return display "Cannot get runtime information." unless runtimes
50
+ def console(appname, interactive=true)
51
+ unless defined? Caldecott
52
+ display "To use `vmc rails-console', you must first install Caldecott:"
53
+ display ""
54
+ display "\tgem install caldecott"
55
+ display ""
56
+ display "Note that you'll need a C compiler. If you're on OS X, Xcode"
57
+ display "will provide one. If you're on Windows, try DevKit."
58
+ display ""
59
+ display "This manual step will be removed in the future."
60
+ display ""
61
+ err "Caldecott is not installed."
62
+ end
50
63
 
51
- runtime = runtimes[app[:staging][:stack].to_sym]
52
- return display "Unknown runtime." unless runtime
64
+ #Make sure there is a console we can connect to first
65
+ conn_info = console_connection_info appname
53
66
 
54
- unless runtime[:debug_modes] and runtime[:debug_modes].include? @options[:debug]
55
- modes = runtime[:debug_modes] || []
67
+ port = pick_tunnel_port(@options[:port] || 20000)
56
68
 
57
- display "\nApplication '#{appname}' cannot start in '#{@options[:debug]}' mode"
69
+ raise VMC::Client::AuthError unless client.logged_in?
58
70
 
59
- if push
60
- display "Try `vmc start' with one of the following modes: #{modes.inspect}"
61
- else
62
- display "Available modes: #{modes.inspect}"
63
- end
71
+ if not tunnel_pushed?
72
+ display "Deploying tunnel application '#{tunnel_appname}'."
73
+ auth = UUIDTools::UUID.random_create.to_s
74
+ push_caldecott(auth)
75
+ start_caldecott
76
+ else
77
+ auth = tunnel_auth
78
+ end
64
79
 
65
- return
66
- end
80
+ if not tunnel_healthy?(auth)
81
+ display "Redeploying tunnel application '#{tunnel_appname}'."
82
+ # We don't expect caldecott not to be running, so take the
83
+ # most aggressive restart method.. delete/re-push
84
+ client.delete_app(tunnel_appname)
85
+ invalidate_tunnel_app_info
86
+ push_caldecott(auth)
87
+ start_caldecott
67
88
  end
68
89
 
69
- banner = 'Staging Application: '
70
- display banner, false
90
+ start_tunnel(port, conn_info, auth)
91
+ wait_for_tunnel_start(port)
92
+ start_local_console(port, appname) if interactive
93
+ port
94
+ end
71
95
 
72
- t = Thread.new do
73
- count = 0
74
- while count < TAIL_TICKS do
75
- display '.', false
76
- sleep SLEEP_TIME
77
- count += 1
96
+ def start(appname=nil, push=false)
97
+ if appname
98
+ do_start(appname, push)
99
+ else
100
+ each_app do |name|
101
+ do_start(name, push)
78
102
  end
79
103
  end
104
+ end
80
105
 
81
- app[:state] = 'STARTED'
82
- app[:debug] = @options[:debug]
83
- client.update_app(appname, app)
84
-
85
- Thread.kill(t)
86
- clear(LINE_LENGTH)
87
- display "#{banner}#{'OK'.green}"
88
-
89
- banner = 'Starting Application: '
90
- display banner, false
91
-
92
- count = log_lines_displayed = 0
93
- failed = false
94
- start_time = Time.now.to_i
95
-
96
- loop do
97
- display '.', false unless count > TICKER_TICKS
98
- sleep SLEEP_TIME
99
- begin
100
- break if app_started_properly(appname, count > HEALTH_TICKS)
101
- if !crashes(appname, false, start_time).empty?
102
- # Check for the existance of crashes
103
- display "\nError: Application [#{appname}] failed to start, logs information below.\n".red
104
- grab_crash_logs(appname, '0', true)
105
- if push and !no_prompt
106
- display "\n"
107
- delete_app(appname, false) if ask "Delete the application?", :default => true
108
- end
109
- failed = true
110
- break
111
- elsif count > TAIL_TICKS
112
- log_lines_displayed = grab_startup_tail(appname, log_lines_displayed)
113
- end
114
- rescue => e
115
- err(e.message, '')
106
+ def stop(appname=nil)
107
+ if appname
108
+ do_stop(appname)
109
+ else
110
+ reversed = []
111
+ each_app do |name|
112
+ reversed.unshift name
116
113
  end
117
- count += 1
118
- if count > GIVEUP_TICKS # 2 minutes
119
- display "\nApplication is taking too long to start, check your logs".yellow
120
- break
114
+
115
+ reversed.each do |name|
116
+ do_stop(name)
121
117
  end
122
118
  end
123
- exit(false) if failed
124
- clear(LINE_LENGTH)
125
- display "#{banner}#{'OK'.green}"
126
- end
127
-
128
- def stop(appname)
129
- app = client.app_info(appname)
130
- return display "Application '#{appname}' already stopped".yellow if app[:state] == 'STOPPED'
131
- display 'Stopping Application: ', false
132
- app[:state] = 'STOPPED'
133
- client.update_app(appname, app)
134
- display 'OK'.green
135
119
  end
136
120
 
137
- def restart(appname)
121
+ def restart(appname=nil)
138
122
  stop(appname)
139
123
  start(appname)
140
124
  end
141
125
 
142
- def rename(appname, newname)
143
- app = client.app_info(appname)
144
- app[:name] = newname
145
- display 'Renaming Appliction: '
146
- client.update_app(newname, app)
147
- display 'OK'.green
148
- end
149
-
150
126
  def mem(appname, memsize=nil)
151
127
  app = client.app_info(appname)
152
128
  mem = current_mem = mem_quota_to_choice(app[:resources][:memory])
@@ -185,7 +161,7 @@ module VMC::Cli::Command
185
161
  uris << url
186
162
  app[:uris] = uris
187
163
  client.update_app(appname, app)
188
- display "Succesfully mapped url".green
164
+ display "Successfully mapped url".green
189
165
  end
190
166
 
191
167
  def unmap(appname, url)
@@ -196,14 +172,13 @@ module VMC::Cli::Command
196
172
  err "Invalid url" unless deleted
197
173
  app[:uris] = uris
198
174
  client.update_app(appname, app)
199
- display "Succesfully unmapped url".green
200
-
175
+ display "Successfully unmapped url".green
201
176
  end
202
177
 
203
178
  def delete(appname=nil)
204
179
  force = @options[:force]
205
180
  if @options[:all]
206
- if no_prompt || force || ask("Delete ALL applications and services?", :default => false)
181
+ if no_prompt || force || ask("Delete ALL applications?", :default => false)
207
182
  apps = client.apps
208
183
  apps.each { |app| delete_app(app[:name], force) }
209
184
  end
@@ -213,61 +188,18 @@ module VMC::Cli::Command
213
188
  end
214
189
  end
215
190
 
216
- def delete_app(appname, force)
217
- app = client.app_info(appname)
218
- services_to_delete = []
219
- app_services = app[:services]
220
- services_apps_hash = provisioned_services_apps_hash
221
- app_services.each { |service|
222
- del_service = force && no_prompt
223
- unless no_prompt || force
224
- del_service = ask(
225
- "Provisioned service [#{service}] detected, would you like to delete it?",
226
- :default => false
227
- )
228
-
229
- if del_service
230
- apps_using_service = services_apps_hash[service].reject!{ |app| app == appname}
231
- if apps_using_service.size > 0
232
- del_service = ask(
233
- "Provisioned service [#{service}] is also used by #{apps_using_service.size == 1 ? "app" : "apps"} #{apps_using_service.entries}, are you sure you want to delete it?",
234
- :default => false
235
- )
236
- end
237
- end
238
- end
239
- services_to_delete << service if del_service
240
- }
241
-
242
- display "Deleting application [#{appname}]: ", false
243
- client.delete_app(appname)
244
- display 'OK'.green
245
-
246
- services_to_delete.each do |s|
247
- delete_service_banner(s)
248
- end
249
- end
250
-
251
- def all_files(appname, path)
252
- instances_info_envelope = client.app_instances(appname)
253
- return if instances_info_envelope.is_a?(Array)
254
- instances_info = instances_info_envelope[:instances] || []
255
- instances_info.each do |entry|
256
- content = client.app_files(appname, path, entry[:index])
257
- display_logfile(path, content, entry[:index], "====> [#{entry[:index]}: #{path}] <====\n".bold)
258
- end
259
- end
260
-
261
191
  def files(appname, path='/')
262
192
  return all_files(appname, path) if @options[:all] && !@options[:instance]
263
193
  instance = @options[:instance] || '0'
264
194
  content = client.app_files(appname, path, instance)
265
195
  display content
266
- rescue VMC::Client::NotFound => e
196
+ rescue VMC::Client::NotFound, VMC::Client::TargetError
267
197
  err 'No such file or directory'
268
198
  end
269
199
 
270
200
  def logs(appname)
201
+ # Check if we have an app before progressing further
202
+ client.app_info(appname)
271
203
  return grab_all_logs(appname) if @options[:all] && !@options[:instance]
272
204
  instance = @options[:instance] || '0'
273
205
  grab_logs(appname, instance)
@@ -314,195 +246,67 @@ module VMC::Cli::Command
314
246
  end
315
247
 
316
248
  def instances(appname, num=nil)
317
- if (num)
249
+ if num
318
250
  change_instances(appname, num)
319
251
  else
320
252
  get_instances(appname)
321
253
  end
322
254
  end
323
255
 
324
- def stats(appname)
325
- stats = client.app_stats(appname)
326
- return display JSON.pretty_generate(stats) if @options[:json]
327
-
328
- stats_table = table do |t|
329
- t.headings = 'Instance', 'CPU (Cores)', 'Memory (limit)', 'Disk (limit)', 'Uptime'
330
- stats.each do |entry|
331
- index = entry[:instance]
332
- stat = entry[:stats]
333
- hp = "#{stat[:host]}:#{stat[:port]}"
334
- uptime = uptime_string(stat[:uptime])
335
- usage = stat[:usage]
336
- if usage
337
- cpu = usage[:cpu]
338
- mem = (usage[:mem] * 1024) # mem comes in K's
339
- disk = usage[:disk]
340
- end
341
- mem_quota = stat[:mem_quota]
342
- disk_quota = stat[:disk_quota]
343
- mem = "#{pretty_size(mem)} (#{pretty_size(mem_quota, 0)})"
344
- disk = "#{pretty_size(disk)} (#{pretty_size(disk_quota, 0)})"
345
- cpu = cpu ? cpu.to_s : 'NA'
346
- cpu = "#{cpu}% (#{stat[:cores]})"
347
- t << [index, cpu, mem, disk, uptime]
348
- end
349
- end
350
- display "\n"
351
- if stats.empty?
352
- display "No running instances for [#{appname}]".yellow
256
+ def stats(appname=nil)
257
+ if appname
258
+ display "\n", false
259
+ do_stats(appname)
353
260
  else
354
- display stats_table
355
- end
356
- end
357
-
358
- def update(appname)
359
- app = client.app_info(appname)
360
- if @options[:canary]
361
- display "[--canary] is deprecated and will be removed in a future version".yellow
261
+ each_app do |n|
262
+ display "\n#{n}:"
263
+ do_stats(n)
264
+ end
362
265
  end
363
- path = @options[:path] || '.'
364
- upload_app_bits(appname, path)
365
- restart appname if app[:state] == 'STARTED'
366
266
  end
367
267
 
368
- def push(appname=nil)
369
- instances = @options[:instances] || 1
370
- exec = @options[:exec] || 'thin start'
371
- ignore_framework = @options[:noframework]
372
- no_start = @options[:nostart]
373
-
374
- path = @options[:path] || '.'
375
- appname ||= @options[:name]
376
- mem, memswitch = nil, @options[:mem]
377
- memswitch = normalize_mem(memswitch) if memswitch
378
- url = @options[:url]
379
-
380
- # Check app existing upfront if we have appname
381
- app_checked = false
268
+ def update(appname=nil)
382
269
  if appname
383
- err "Application '#{appname}' already exists, use update" if app_exists?(appname)
384
- app_checked = true
270
+ app = client.app_info(appname)
271
+ if @options[:canary]
272
+ display "[--canary] is deprecated and will be removed in a future version".yellow
273
+ end
274
+ upload_app_bits(appname, @path)
275
+ restart appname if app[:state] == 'STARTED'
385
276
  else
386
- raise VMC::Client::AuthError unless client.logged_in?
387
- end
388
-
389
- # check if we have hit our app limit
390
- check_app_limit
391
-
392
- # check memsize here for capacity
393
- if memswitch && !no_start
394
- check_has_capacity_for(mem_choice_to_quota(memswitch) * instances)
395
- end
277
+ each_app do |name|
278
+ display "Updating application '#{name}'..."
396
279
 
397
- unless no_prompt || @options[:path]
398
- unless ask('Would you like to deploy from the current directory?', :default => true)
399
- path = ask('Please enter in the deployment path')
280
+ app = client.app_info(name)
281
+ upload_app_bits(name, @application)
282
+ restart name if app[:state] == 'STARTED'
400
283
  end
401
284
  end
285
+ end
402
286
 
403
- path = File.expand_path(path)
404
- check_deploy_directory(path)
405
-
406
- appname ||= ask("Application Name") unless no_prompt
407
- err "Application Name required." if appname.nil? || appname.empty?
408
-
409
- if !app_checked and app_exists?(appname)
410
- err "Application '#{appname}' already exists, use update or delete."
411
- end
412
-
413
- default_url = "#{appname}.#{VMC::Cli::Config.suggest_url}"
414
-
415
- unless no_prompt || url
416
- url = ask(
417
- "Application Deployed URL",
418
- :default => default_url
287
+ def push(appname=nil)
288
+ unless no_prompt || @options[:path]
289
+ proceed = ask(
290
+ 'Would you like to deploy from the current directory?',
291
+ :default => true
419
292
  )
420
293
 
421
- # common error case is for prompted users to answer y or Y or yes or
422
- # YES to this ask() resulting in an unintended URL of y. Special case
423
- # this common error
424
- url = nil if YES_SET.member? url
425
- end
426
-
427
- url ||= default_url
428
-
429
- # Detect the appropriate framework.
430
- framework = nil
431
- unless ignore_framework
432
- framework = VMC::Cli::Framework.detect(path)
433
-
434
- if prompt_ok and framework
435
- framework_correct =
436
- ask("Detected a #{framework}, is this correct?", :default => true)
437
- end
438
-
439
- if prompt_ok && (framework.nil? || !framework_correct)
440
- display "#{"[WARNING]".yellow} Can't determine the Application Type." unless framework
441
- framework = VMC::Cli::Framework.lookup(
442
- ask(
443
- "Select Application Type",
444
- { :indexed => true,
445
- :choices => VMC::Cli::Framework.known_frameworks
446
- }
447
- )
448
- )
449
- display "Selected #{framework}"
294
+ unless proceed
295
+ @path = ask('Deployment path')
450
296
  end
451
- # Framework override, deprecated
452
- exec = framework.exec if framework && framework.exec
453
- else
454
- framework = VMC::Cli::Framework.new
455
297
  end
456
298
 
457
- err "Application Type undetermined for path '#{path}'" unless framework
458
-
459
- if memswitch
460
- mem = memswitch
461
- elsif prompt_ok
462
- mem = ask("Memory Reservation",
463
- :default => framework.memory, :choices => mem_choices)
464
- else
465
- mem = framework.memory
299
+ pushed = false
300
+ each_app(false) do |name|
301
+ display "Pushing application '#{name}'..." if name
302
+ do_push(name)
303
+ pushed = true
466
304
  end
467
305
 
468
- # Set to MB number
469
- mem_quota = mem_choice_to_quota(mem)
470
-
471
- # check memsize here for capacity
472
- check_has_capacity_for(mem_quota * instances) unless no_start
473
-
474
- display 'Creating Application: ', false
475
-
476
- manifest = {
477
- :name => "#{appname}",
478
- :staging => {
479
- :framework => framework.name,
480
- :runtime => @options[:runtime]
481
- },
482
- :uris => [url],
483
- :instances => instances,
484
- :resources => {
485
- :memory => mem_quota
486
- },
487
- }
488
-
489
- # Send the manifest to the cloud controller
490
- client.create_app(appname, manifest)
491
- display 'OK'.green
492
-
493
- # Services check
494
- unless no_prompt || @options[:noservices]
495
- services = client.services_info
496
- unless services.empty?
497
- proceed = ask("Would you like to bind any services to '#{appname}'?", :default => false)
498
- bind_services(appname, services) if proceed
499
- end
306
+ unless pushed
307
+ @application = @path
308
+ do_push(appname)
500
309
  end
501
-
502
- # Stage and upload the app bits.
503
- upload_app_bits(appname, path)
504
-
505
- start(appname, true) unless no_start
506
310
  end
507
311
 
508
312
  def environment(appname)
@@ -567,11 +371,35 @@ module VMC::Cli::Command
567
371
 
568
372
  def check_deploy_directory(path)
569
373
  err 'Deployment path does not exist' unless File.exists? path
570
- err 'Deployment path is not a directory' unless File.directory? path
571
374
  return if File.expand_path(Dir.tmpdir) != File.expand_path(path)
572
375
  err "Can't deploy applications from staging directory: [#{Dir.tmpdir}]"
573
376
  end
574
377
 
378
+ def check_unreachable_links(path)
379
+ files = Dir.glob("#{path}/**/*", File::FNM_DOTMATCH)
380
+
381
+ pwd = Pathname.pwd
382
+
383
+ abspath = File.expand_path(path)
384
+ unreachable = []
385
+ files.each do |f|
386
+ file = Pathname.new(f)
387
+ if file.symlink? && !file.realpath.to_s.start_with?(abspath)
388
+ unreachable << file.relative_path_from(pwd)
389
+ end
390
+ end
391
+
392
+ unless unreachable.empty?
393
+ root = Pathname.new(path).relative_path_from(pwd)
394
+ err "Can't deploy application containing links '#{unreachable}' that reach outside its root '#{root}'"
395
+ end
396
+ end
397
+
398
+ def find_sockets(path)
399
+ files = Dir.glob("#{path}/**/*", File::FNM_DOTMATCH)
400
+ files && files.select { |f| File.socket? f }
401
+ end
402
+
575
403
  def upload_app_bits(appname, path)
576
404
  display 'Uploading Application:'
577
405
 
@@ -581,165 +409,112 @@ module VMC::Cli::Command
581
409
  explode_dir = "#{Dir.tmpdir}/.vmc_#{appname}_files"
582
410
  FileUtils.rm_rf(explode_dir) # Make sure we didn't have anything left over..
583
411
 
584
- Dir.chdir(path) do
585
- # Stage the app appropriately and do the appropriate fingerprinting, etc.
586
- if war_file = Dir.glob('*.war').first
587
- VMC::Cli::ZipUtil.unpack(war_file, explode_dir)
588
- else
589
- FileUtils.mkdir(explode_dir)
590
- files = Dir.glob('{*,.[^\.]*}')
591
- # Do not process .git files
592
- files.delete('.git') if files
593
- FileUtils.cp_r(files, explode_dir)
594
- end
595
-
596
- # Send the resource list to the cloudcontroller, the response will tell us what it already has..
597
- unless @options[:noresources]
598
- display ' Checking for available resources: ', false
599
- fingerprints = []
600
- total_size = 0
601
- resource_files = Dir.glob("#{explode_dir}/**/*", File::FNM_DOTMATCH)
602
- resource_files.each do |filename|
603
- next if (File.directory?(filename) || !File.exists?(filename))
604
- fingerprints << {
605
- :size => File.size(filename),
606
- :sha1 => Digest::SHA1.file(filename).hexdigest,
607
- :fn => filename
608
- }
609
- total_size += File.size(filename)
610
- end
412
+ if path =~ /\.(war|zip)$/
413
+ #single file that needs unpacking
414
+ VMC::Cli::ZipUtil.unpack(path, explode_dir)
415
+ elsif !File.directory? path
416
+ #single file that doesn't need unpacking
417
+ FileUtils.mkdir(explode_dir)
418
+ FileUtils.cp(path,explode_dir)
419
+ else
420
+ Dir.chdir(path) do
421
+ # Stage the app appropriately and do the appropriate fingerprinting, etc.
422
+ if war_file = Dir.glob('*.war').first
423
+ VMC::Cli::ZipUtil.unpack(war_file, explode_dir)
424
+ elsif zip_file = Dir.glob('*.zip').first
425
+ VMC::Cli::ZipUtil.unpack(zip_file, explode_dir)
426
+ else
427
+ check_unreachable_links(path)
428
+ FileUtils.mkdir(explode_dir)
611
429
 
612
- # Check to see if the resource check is worth the round trip
613
- if (total_size > (64*1024)) # 64k for now
614
- # Send resource fingerprints to the cloud controller
615
- appcloud_resources = client.check_resources(fingerprints)
616
- end
617
- display 'OK'.green
430
+ files = Dir.glob('{*,.[^\.]*}')
431
+
432
+ # Do not process .git files
433
+ files.delete('.git') if files
434
+
435
+ FileUtils.cp_r(files, explode_dir)
618
436
 
619
- if appcloud_resources
620
- display ' Processing resources: ', false
621
- # We can then delete what we do not need to send.
622
- appcloud_resources.each do |resource|
623
- FileUtils.rm_f resource[:fn]
624
- # adjust filenames sans the explode_dir prefix
625
- resource[:fn].sub!("#{explode_dir}/", '')
437
+ find_sockets(explode_dir).each do |s|
438
+ File.delete s
626
439
  end
627
- display 'OK'.green
628
440
  end
441
+ end
442
+ end
629
443
 
444
+ # Send the resource list to the cloudcontroller, the response will tell us what it already has..
445
+ unless @options[:noresources]
446
+ display ' Checking for available resources: ', false
447
+ fingerprints = []
448
+ total_size = 0
449
+ resource_files = Dir.glob("#{explode_dir}/**/*", File::FNM_DOTMATCH)
450
+ resource_files.each do |filename|
451
+ next if (File.directory?(filename) || !File.exists?(filename))
452
+ fingerprints << {
453
+ :size => File.size(filename),
454
+ :sha1 => Digest::SHA1.file(filename).hexdigest,
455
+ :fn => filename
456
+ }
457
+ total_size += File.size(filename)
630
458
  end
631
459
 
632
- # If no resource needs to be sent, add an empty file to ensure we have
633
- # a multi-part request that is expected by nginx fronting the CC.
634
- if VMC::Cli::ZipUtil.get_files_to_pack(explode_dir).empty?
635
- Dir.chdir(explode_dir) do
636
- File.new(".__empty__", "w")
637
- end
460
+ # Check to see if the resource check is worth the round trip
461
+ if (total_size > (64*1024)) # 64k for now
462
+ # Send resource fingerprints to the cloud controller
463
+ appcloud_resources = client.check_resources(fingerprints)
638
464
  end
639
- # Perform Packing of the upload bits here.
640
- display ' Packing application: ', false
641
- VMC::Cli::ZipUtil.pack(explode_dir, upload_file)
642
465
  display 'OK'.green
643
466
 
644
- upload_size = File.size(upload_file);
645
- if upload_size > 1024*1024
646
- upload_size = (upload_size/(1024.0*1024.0)).round.to_s + 'M'
647
- elsif upload_size > 0
648
- upload_size = (upload_size/1024.0).round.to_s + 'K'
649
- else
650
- upload_size = '0K'
467
+ if appcloud_resources
468
+ display ' Processing resources: ', false
469
+ # We can then delete what we do not need to send.
470
+ appcloud_resources.each do |resource|
471
+ FileUtils.rm_f resource[:fn]
472
+ # adjust filenames sans the explode_dir prefix
473
+ resource[:fn].sub!("#{explode_dir}/", '')
474
+ end
475
+ display 'OK'.green
651
476
  end
652
477
 
653
- upload_str = " Uploading (#{upload_size}): "
654
- display upload_str, false
655
-
656
- FileWithPercentOutput.display_str = upload_str
657
- FileWithPercentOutput.upload_size = File.size(upload_file);
658
- file = FileWithPercentOutput.open(upload_file, 'rb')
659
-
660
- client.upload_app(appname, file, appcloud_resources)
661
- display 'OK'.green if VMC::Cli::ZipUtil.get_files_to_pack(explode_dir).empty?
662
-
663
- display 'Push Status: ', false
664
- display 'OK'.green
665
478
  end
666
479
 
667
- ensure
668
- # Cleanup if we created an exploded directory.
669
- FileUtils.rm_f(upload_file) if upload_file
670
- FileUtils.rm_rf(explode_dir) if explode_dir
671
- end
672
-
673
- def choose_existing_service(appname, user_services)
674
- return unless prompt_ok
675
-
676
- display "The following provisioned services are available"
677
- name = ask(
678
- "Please select one you which to prevision",
679
- { :indexed => true,
680
- :choices => user_services.collect { |s| s[:name] }
681
- }
682
- )
683
-
684
- bind_service_banner(name, appname, false)
685
-
686
- true
687
- end
688
-
689
- def choose_new_service(appname, services)
690
- return unless prompt_ok
691
-
692
- display "The following system services are available"
693
-
694
- vendor = ask(
695
- "Please select one you wish to provision",
696
- { :indexed => true,
697
- :choices =>
698
- services.values.collect { |type|
699
- type.keys.collect(&:to_s)
700
- }.flatten.sort!
701
- }
702
- )
480
+ # If no resource needs to be sent, add an empty file to ensure we have
481
+ # a multi-part request that is expected by nginx fronting the CC.
482
+ if VMC::Cli::ZipUtil.get_files_to_pack(explode_dir).empty?
483
+ Dir.chdir(explode_dir) do
484
+ File.new(".__empty__", "w")
485
+ end
486
+ end
487
+ # Perform Packing of the upload bits here.
488
+ display ' Packing application: ', false
489
+ VMC::Cli::ZipUtil.pack(explode_dir, upload_file)
490
+ display 'OK'.green
703
491
 
704
- default_name = random_service_name(vendor)
705
- service_name = ask("Specify the name of the service",
706
- :default => default_name)
492
+ upload_size = File.size(upload_file);
493
+ if upload_size > 1024*1024
494
+ upload_size = (upload_size/(1024.0*1024.0)).round.to_s + 'M'
495
+ elsif upload_size > 0
496
+ upload_size = (upload_size/1024.0).round.to_s + 'K'
497
+ else
498
+ upload_size = '0K'
499
+ end
707
500
 
708
- create_service_banner(vendor, service_name)
709
- bind_service_banner(service_name, appname)
710
- end
501
+ upload_str = " Uploading (#{upload_size}): "
502
+ display upload_str, false
711
503
 
712
- def bind_services(appname, services)
713
- user_services = client.services
504
+ FileWithPercentOutput.display_str = upload_str
505
+ FileWithPercentOutput.upload_size = File.size(upload_file);
506
+ file = FileWithPercentOutput.open(upload_file, 'rb')
714
507
 
715
- selected_existing = false
716
- unless no_prompt || user_services.empty?
717
- if ask("Would you like to use an existing provisioned service?",
718
- :default => false)
719
- selected_existing = choose_existing_service(appname, user_services)
720
- end
721
- end
508
+ client.upload_app(appname, file, appcloud_resources)
509
+ display 'OK'.green if VMC::Cli::ZipUtil.get_files_to_pack(explode_dir).empty?
722
510
 
723
- # Create a new service and bind it here
724
- unless selected_existing
725
- choose_new_service(appname, services)
726
- end
727
- end
511
+ display 'Push Status: ', false
512
+ display 'OK'.green
728
513
 
729
- def provisioned_services_apps_hash
730
- apps = client.apps
731
- services_apps_hash = {}
732
- apps.each {|app|
733
- app[:services].each { |svc|
734
- svc_apps = services_apps_hash[svc]
735
- unless svc_apps
736
- svc_apps = Set.new
737
- services_apps_hash[svc] = svc_apps
738
- end
739
- svc_apps.add(app[:name])
740
- } unless app[:services] == nil
741
- }
742
- services_apps_hash
514
+ ensure
515
+ # Cleanup if we created an exploded directory.
516
+ FileUtils.rm_f(upload_file) if upload_file
517
+ FileUtils.rm_rf(explode_dir) if explode_dir
743
518
  end
744
519
 
745
520
  def check_app_limit
@@ -896,7 +671,8 @@ module VMC::Cli::Command
896
671
 
897
672
  def display_logfile(path, content, instance='0', banner=nil)
898
673
  banner ||= "====> #{path} <====\n\n"
899
- if content && !content.empty?
674
+
675
+ unless content.empty?
900
676
  display banner
901
677
  prefix = "[#{instance}: #{path}] -".bold if @options[:prefixlogs]
902
678
  unless prefix
@@ -909,10 +685,6 @@ module VMC::Cli::Command
909
685
  end
910
686
  end
911
687
 
912
- def log_file_paths
913
- %w[logs/stderr.log logs/stdout.log logs/startup.log]
914
- end
915
-
916
688
  def grab_all_logs(appname)
917
689
  instances_info_envelope = client.app_instances(appname)
918
690
  return if instances_info_envelope.is_a?(Array)
@@ -923,15 +695,23 @@ module VMC::Cli::Command
923
695
  end
924
696
 
925
697
  def grab_logs(appname, instance)
926
- log_file_paths.each do |path|
698
+ files_under(appname, instance, "/logs").each do |path|
927
699
  begin
928
700
  content = client.app_files(appname, path, instance)
929
- rescue
701
+ display_logfile(path, content, instance)
702
+ rescue VMC::Client::NotFound, VMC::Client::TargetError
930
703
  end
931
- display_logfile(path, content, instance)
932
704
  end
933
705
  end
934
706
 
707
+ def files_under(appname, instance, path)
708
+ client.app_files(appname, path, instance).split("\n").collect do |l|
709
+ "#{path}/#{l.split[0]}"
710
+ end
711
+ rescue VMC::Client::NotFound, VMC::Client::TargetError
712
+ []
713
+ end
714
+
935
715
  def grab_crash_logs(appname, instance, was_staged=false)
936
716
  # stage crash info
937
717
  crashes(appname, false) unless was_staged
@@ -940,11 +720,10 @@ module VMC::Cli::Command
940
720
  map = VMC::Cli::Config.instances
941
721
  instance = map[instance] if map[instance]
942
722
 
943
- ['/logs/err.log', '/logs/staging.log', 'logs/stderr.log', 'logs/stdout.log', 'logs/startup.log'].each do |path|
944
- begin
945
- content = client.app_files(appname, path, instance)
946
- rescue
947
- end
723
+ (files_under(appname, instance, "/logs") +
724
+ files_under(appname, instance, "/app/logs") +
725
+ files_under(appname, instance, "/app/log")).each do |path|
726
+ content = client.app_files(appname, path, instance)
948
727
  display_logfile(path, content, instance)
949
728
  end
950
729
  end
@@ -962,8 +741,355 @@ module VMC::Cli::Command
962
741
  display tail.join("\n") if new_lines > 0
963
742
  end
964
743
  since + new_lines
744
+ rescue VMC::Client::NotFound, VMC::Client::TargetError
745
+ 0
746
+ end
747
+
748
+ def provisioned_services_apps_hash
749
+ apps = client.apps
750
+ services_apps_hash = {}
751
+ apps.each {|app|
752
+ app[:services].each { |svc|
753
+ svc_apps = services_apps_hash[svc]
754
+ unless svc_apps
755
+ svc_apps = Set.new
756
+ services_apps_hash[svc] = svc_apps
757
+ end
758
+ svc_apps.add(app[:name])
759
+ } unless app[:services] == nil
760
+ }
761
+ services_apps_hash
762
+ end
763
+
764
+ def delete_app(appname, force)
765
+ app = client.app_info(appname)
766
+ services_to_delete = []
767
+ app_services = app[:services]
768
+ services_apps_hash = provisioned_services_apps_hash
769
+ app_services.each { |service|
770
+ del_service = force && no_prompt
771
+ unless no_prompt || force
772
+ del_service = ask(
773
+ "Provisioned service [#{service}] detected, would you like to delete it?",
774
+ :default => false
775
+ )
776
+
777
+ if del_service
778
+ apps_using_service = services_apps_hash[service].reject!{ |app| app == appname}
779
+ if apps_using_service.size > 0
780
+ del_service = ask(
781
+ "Provisioned service [#{service}] is also used by #{apps_using_service.size == 1 ? "app" : "apps"} #{apps_using_service.entries}, are you sure you want to delete it?",
782
+ :default => false
783
+ )
784
+ end
785
+ end
786
+ end
787
+ services_to_delete << service if del_service
788
+ }
789
+
790
+ display "Deleting application [#{appname}]: ", false
791
+ client.delete_app(appname)
792
+ display 'OK'.green
793
+
794
+ services_to_delete.each do |s|
795
+ delete_service_banner(s)
796
+ end
797
+ end
798
+
799
+ def do_start(appname, push=false)
800
+ app = client.app_info(appname)
801
+ return display "Application '#{appname}' could not be found".red if app.nil?
802
+ return display "Application '#{appname}' already started".yellow if app[:state] == 'STARTED'
803
+
804
+
805
+
806
+ if @options[:debug]
807
+ runtimes = client.runtimes_info
808
+ return display "Cannot get runtime information." unless runtimes
809
+
810
+ runtime = runtimes[app[:staging][:stack].to_sym]
811
+ return display "Unknown runtime." unless runtime
812
+
813
+ unless runtime[:debug_modes] and runtime[:debug_modes].include? @options[:debug]
814
+ modes = runtime[:debug_modes] || []
815
+
816
+ display "\nApplication '#{appname}' cannot start in '#{@options[:debug]}' mode"
817
+
818
+ if push
819
+ display "Try 'vmc start' with one of the following modes: #{modes.inspect}"
820
+ else
821
+ display "Available modes: #{modes.inspect}"
822
+ end
823
+
824
+ return
825
+ end
826
+ end
827
+
828
+ banner = "Staging Application '#{appname}': "
829
+ display banner, false
830
+
831
+ t = Thread.new do
832
+ count = 0
833
+ while count < TAIL_TICKS do
834
+ display '.', false
835
+ sleep SLEEP_TIME
836
+ count += 1
837
+ end
838
+ end
839
+
840
+ app[:state] = 'STARTED'
841
+ app[:debug] = @options[:debug]
842
+ app[:console] = VMC::Cli::Framework.lookup_by_framework(app[:staging][:model]).console
843
+ client.update_app(appname, app)
844
+
845
+ Thread.kill(t)
846
+ clear(LINE_LENGTH)
847
+ display "#{banner}#{'OK'.green}"
848
+
849
+ banner = "Starting Application '#{appname}': "
850
+ display banner, false
851
+
852
+ count = log_lines_displayed = 0
853
+ failed = false
854
+ start_time = Time.now.to_i
855
+
856
+ loop do
857
+ display '.', false unless count > TICKER_TICKS
858
+ sleep SLEEP_TIME
859
+
860
+ break if app_started_properly(appname, count > HEALTH_TICKS)
861
+
862
+ if !crashes(appname, false, start_time).empty?
863
+ # Check for the existance of crashes
864
+ display "\nError: Application [#{appname}] failed to start, logs information below.\n".red
865
+ grab_crash_logs(appname, '0', true)
866
+ if push and !no_prompt
867
+ display "\n"
868
+ delete_app(appname, false) if ask "Delete the application?", :default => true
869
+ end
870
+ failed = true
871
+ break
872
+ elsif count > TAIL_TICKS
873
+ log_lines_displayed = grab_startup_tail(appname, log_lines_displayed)
874
+ end
875
+
876
+ count += 1
877
+ if count > GIVEUP_TICKS # 2 minutes
878
+ display "\nApplication is taking too long to start, check your logs".yellow
879
+ break
880
+ end
881
+ end
882
+ exit(false) if failed
883
+ clear(LINE_LENGTH)
884
+ display "#{banner}#{'OK'.green}"
885
+ end
886
+
887
+ def do_stop(appname)
888
+ app = client.app_info(appname)
889
+ return display "Application '#{appname}' already stopped".yellow if app[:state] == 'STOPPED'
890
+ display "Stopping Application '#{appname}': ", false
891
+ app[:state] = 'STOPPED'
892
+ client.update_app(appname, app)
893
+ display 'OK'.green
894
+ end
895
+
896
+ def do_push(appname=nil)
897
+ unless @app_info || no_prompt
898
+ @manifest = { "applications" => { @path => { "name" => appname } } }
899
+
900
+ interact
901
+
902
+ if ask("Would you like to save this configuration?", :default => false)
903
+ save_manifest
904
+ end
905
+
906
+ resolve_manifest(@manifest)
907
+
908
+ @app_info = @manifest["applications"][@path]
909
+ end
910
+
911
+ instances = info(:instances, 1)
912
+ exec = info(:exec, 'thin start')
913
+
914
+ ignore_framework = @options[:noframework]
915
+ no_start = @options[:nostart]
916
+
917
+ appname ||= info(:name)
918
+ url = info(:url) || info(:urls)
919
+ mem, memswitch = nil, info(:mem)
920
+ memswitch = normalize_mem(memswitch) if memswitch
921
+ command = info(:command)
922
+ runtime = info(:runtime)
923
+
924
+ # Check app existing upfront if we have appname
925
+ app_checked = false
926
+ if appname
927
+ err "Application '#{appname}' already exists, use update" if app_exists?(appname)
928
+ app_checked = true
929
+ else
930
+ raise VMC::Client::AuthError unless client.logged_in?
931
+ end
932
+
933
+ # check if we have hit our app limit
934
+ check_app_limit
935
+ # check memsize here for capacity
936
+ if memswitch && !no_start
937
+ check_has_capacity_for(mem_choice_to_quota(memswitch) * instances)
938
+ end
939
+
940
+ appname ||= ask("Application Name") unless no_prompt
941
+ err "Application Name required." if appname.nil? || appname.empty?
942
+
943
+ check_deploy_directory(@application)
944
+
945
+ if !app_checked and app_exists?(appname)
946
+ err "Application '#{appname}' already exists, use update or delete."
947
+ end
948
+
949
+ if ignore_framework
950
+ framework = VMC::Cli::Framework.new
951
+ elsif f = info(:framework)
952
+ info = Hash[f["info"].collect { |k, v| [k.to_sym, v] }]
953
+
954
+ framework = VMC::Cli::Framework.create(f["name"], info)
955
+ exec = framework.exec if framework && framework.exec
956
+ else
957
+ framework = detect_framework(prompt_ok)
958
+ end
959
+
960
+ err "Application Type undetermined for path '#{@application}'" unless framework
961
+
962
+ if not runtime
963
+ default_runtime = framework.default_runtime @application
964
+ runtime = detect_runtime(default_runtime, !no_prompt) if framework.prompt_for_runtime?
965
+ end
966
+ command = ask("Start Command") if !command && framework.require_start_command?
967
+
968
+ default_url = "None"
969
+ default_url = "#{appname}.#{VMC::Cli::Config.suggest_url}" if framework.require_url?
970
+
971
+
972
+ unless no_prompt || url || !framework.require_url?
973
+ url = ask(
974
+ "Application Deployed URL",
975
+ :default => default_url
976
+ )
977
+
978
+ # common error case is for prompted users to answer y or Y or yes or
979
+ # YES to this ask() resulting in an unintended URL of y. Special case
980
+ # this common error
981
+ url = nil if YES_SET.member? url
982
+ end
983
+ url = nil if url == "None"
984
+ default_url = nil if default_url == "None"
985
+ url ||= default_url
986
+
987
+ if memswitch
988
+ mem = memswitch
989
+ elsif prompt_ok
990
+ mem = ask("Memory Reservation",
991
+ :default => framework.memory(runtime),
992
+ :choices => mem_choices)
993
+ else
994
+ mem = framework.memory runtime
995
+ end
996
+
997
+ # Set to MB number
998
+ mem_quota = mem_choice_to_quota(mem)
999
+
1000
+ # check memsize here for capacity
1001
+ check_has_capacity_for(mem_quota * instances) unless no_start
1002
+
1003
+ display 'Creating Application: ', false
1004
+
1005
+ manifest = {
1006
+ :name => "#{appname}",
1007
+ :staging => {
1008
+ :framework => framework.name,
1009
+ :runtime => runtime
1010
+ },
1011
+ :uris => Array(url),
1012
+ :instances => instances,
1013
+ :resources => {
1014
+ :memory => mem_quota
1015
+ }
1016
+ }
1017
+ manifest[:staging][:command] = command if command
1018
+
1019
+ # Send the manifest to the cloud controller
1020
+ client.create_app(appname, manifest)
1021
+ display 'OK'.green
1022
+
1023
+
1024
+ existing = Set.new(client.services.collect { |s| s[:name] })
1025
+
1026
+ if @app_info && services = @app_info["services"]
1027
+ services.each do |name, info|
1028
+ unless existing.include? name
1029
+ create_service_banner(info["type"], name, true)
1030
+ end
1031
+
1032
+ bind_service_banner(name, appname)
1033
+ end
1034
+ end
1035
+
1036
+ # Stage and upload the app bits.
1037
+ upload_app_bits(appname, @application)
1038
+
1039
+ start(appname, true) unless no_start
1040
+ end
1041
+
1042
+ def do_stats(appname)
1043
+ stats = client.app_stats(appname)
1044
+ return display JSON.pretty_generate(stats) if @options[:json]
1045
+
1046
+ stats_table = table do |t|
1047
+ t.headings = 'Instance', 'CPU (Cores)', 'Memory (limit)', 'Disk (limit)', 'Uptime'
1048
+ stats.each do |entry|
1049
+ index = entry[:instance]
1050
+ stat = entry[:stats]
1051
+ hp = "#{stat[:host]}:#{stat[:port]}"
1052
+ uptime = uptime_string(stat[:uptime])
1053
+ usage = stat[:usage]
1054
+ if usage
1055
+ cpu = usage[:cpu]
1056
+ mem = (usage[:mem] * 1024) # mem comes in K's
1057
+ disk = usage[:disk]
1058
+ end
1059
+ mem_quota = stat[:mem_quota]
1060
+ disk_quota = stat[:disk_quota]
1061
+ mem = "#{pretty_size(mem)} (#{pretty_size(mem_quota, 0)})"
1062
+ disk = "#{pretty_size(disk)} (#{pretty_size(disk_quota, 0)})"
1063
+ cpu = cpu ? cpu.to_s : 'NA'
1064
+ cpu = "#{cpu}% (#{stat[:cores]})"
1065
+ t << [index, cpu, mem, disk, uptime]
1066
+ end
1067
+ end
1068
+
1069
+ if stats.empty?
1070
+ display "No running instances for [#{appname}]".yellow
1071
+ else
1072
+ display stats_table
1073
+ end
1074
+ end
1075
+
1076
+ def all_files(appname, path)
1077
+ instances_info_envelope = client.app_instances(appname)
1078
+ return if instances_info_envelope.is_a?(Array)
1079
+ instances_info = instances_info_envelope[:instances] || []
1080
+ instances_info.each do |entry|
1081
+ begin
1082
+ content = client.app_files(appname, path, entry[:index])
1083
+ display_logfile(
1084
+ path,
1085
+ content,
1086
+ entry[:index],
1087
+ "====> [#{entry[:index]}: #{path}] <====\n".bold
1088
+ )
1089
+ rescue VMC::Client::NotFound, VMC::Client::TargetError
1090
+ end
1091
+ end
965
1092
  end
966
- rescue
967
1093
  end
968
1094
 
969
1095
  class FileWithPercentOutput < ::File