af 0.3.13.beta.5 → 0.3.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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