trucker-cli 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE +1277 -0
  3. data/Rakefile +13 -0
  4. data/bin/truck +18 -0
  5. data/lib/admin/README.md +30 -0
  6. data/lib/admin/curl.rb +59 -0
  7. data/lib/admin/guid.rb +89 -0
  8. data/lib/admin/plugin.rb +8 -0
  9. data/lib/admin/service_auth_token.rb +93 -0
  10. data/lib/admin/service_broker/add.rb +54 -0
  11. data/lib/admin/service_broker/remove.rb +33 -0
  12. data/lib/admin/service_broker/service_brokers.rb +29 -0
  13. data/lib/admin/service_broker/update.rb +60 -0
  14. data/lib/admin/set_quota.rb +44 -0
  15. data/lib/cf.rb +14 -0
  16. data/lib/cf/cli.rb +495 -0
  17. data/lib/cf/cli/app/app.rb +43 -0
  18. data/lib/cf/cli/app/apps.rb +87 -0
  19. data/lib/cf/cli/app/base.rb +72 -0
  20. data/lib/cf/cli/app/delete.rb +95 -0
  21. data/lib/cf/cli/app/deprecated.rb +11 -0
  22. data/lib/cf/cli/app/env.rb +99 -0
  23. data/lib/cf/cli/app/events.rb +45 -0
  24. data/lib/cf/cli/app/files.rb +137 -0
  25. data/lib/cf/cli/app/health.rb +26 -0
  26. data/lib/cf/cli/app/instances.rb +53 -0
  27. data/lib/cf/cli/app/logs.rb +76 -0
  28. data/lib/cf/cli/app/push.rb +104 -0
  29. data/lib/cf/cli/app/push/create.rb +108 -0
  30. data/lib/cf/cli/app/push/interactions.rb +90 -0
  31. data/lib/cf/cli/app/push/sync.rb +57 -0
  32. data/lib/cf/cli/app/rename.rb +35 -0
  33. data/lib/cf/cli/app/restart.rb +31 -0
  34. data/lib/cf/cli/app/scale.rb +63 -0
  35. data/lib/cf/cli/app/start.rb +175 -0
  36. data/lib/cf/cli/app/stats.rb +66 -0
  37. data/lib/cf/cli/app/stop.rb +27 -0
  38. data/lib/cf/cli/domain/base.rb +9 -0
  39. data/lib/cf/cli/domain/domains.rb +40 -0
  40. data/lib/cf/cli/domain/map.rb +55 -0
  41. data/lib/cf/cli/domain/unmap.rb +56 -0
  42. data/lib/cf/cli/help.rb +15 -0
  43. data/lib/cf/cli/interactive.rb +104 -0
  44. data/lib/cf/cli/login_requirements.rb +13 -0
  45. data/lib/cf/cli/organization/base.rb +12 -0
  46. data/lib/cf/cli/organization/create.rb +36 -0
  47. data/lib/cf/cli/organization/delete.rb +61 -0
  48. data/lib/cf/cli/organization/org.rb +45 -0
  49. data/lib/cf/cli/organization/orgs.rb +30 -0
  50. data/lib/cf/cli/organization/rename.rb +36 -0
  51. data/lib/cf/cli/populators/base.rb +16 -0
  52. data/lib/cf/cli/populators/organization.rb +32 -0
  53. data/lib/cf/cli/populators/populator_methods.rb +64 -0
  54. data/lib/cf/cli/populators/space.rb +33 -0
  55. data/lib/cf/cli/populators/target.rb +14 -0
  56. data/lib/cf/cli/route/base.rb +9 -0
  57. data/lib/cf/cli/route/delete.rb +28 -0
  58. data/lib/cf/cli/route/map.rb +68 -0
  59. data/lib/cf/cli/route/routes.rb +26 -0
  60. data/lib/cf/cli/route/unmap.rb +56 -0
  61. data/lib/cf/cli/service/base.rb +9 -0
  62. data/lib/cf/cli/service/bind.rb +43 -0
  63. data/lib/cf/cli/service/create.rb +158 -0
  64. data/lib/cf/cli/service/delete.rb +82 -0
  65. data/lib/cf/cli/service/rename.rb +35 -0
  66. data/lib/cf/cli/service/service.rb +40 -0
  67. data/lib/cf/cli/service/service_helper.rb +25 -0
  68. data/lib/cf/cli/service/service_instance_helper.rb +100 -0
  69. data/lib/cf/cli/service/services.rb +110 -0
  70. data/lib/cf/cli/service/unbind.rb +36 -0
  71. data/lib/cf/cli/space/base.rb +27 -0
  72. data/lib/cf/cli/space/create.rb +66 -0
  73. data/lib/cf/cli/space/delete.rb +55 -0
  74. data/lib/cf/cli/space/rename.rb +38 -0
  75. data/lib/cf/cli/space/space.rb +66 -0
  76. data/lib/cf/cli/space/spaces.rb +57 -0
  77. data/lib/cf/cli/space/switch.rb +18 -0
  78. data/lib/cf/cli/start/base.rb +35 -0
  79. data/lib/cf/cli/start/colors.rb +13 -0
  80. data/lib/cf/cli/start/login.rb +104 -0
  81. data/lib/cf/cli/start/logout.rb +17 -0
  82. data/lib/cf/cli/start/target.rb +50 -0
  83. data/lib/cf/cli/start/target_prettifier.rb +35 -0
  84. data/lib/cf/cli/start/targets.rb +16 -0
  85. data/lib/cf/cli/user/base.rb +29 -0
  86. data/lib/cf/cli/user/create.rb +51 -0
  87. data/lib/cf/cli/user/passwd.rb +36 -0
  88. data/lib/cf/cli/user/register.rb +42 -0
  89. data/lib/cf/cli/user/users.rb +32 -0
  90. data/lib/cf/constants.rb +10 -0
  91. data/lib/cf/errors.rb +19 -0
  92. data/lib/cf/plugin.rb +56 -0
  93. data/lib/cf/spacing.rb +89 -0
  94. data/lib/cf/spec_helper.rb +1 -0
  95. data/lib/cf/test_support.rb +6 -0
  96. data/lib/cf/version.rb +3 -0
  97. data/lib/console/README.md +16 -0
  98. data/lib/console/console.rb +187 -0
  99. data/lib/console/plugin.rb +32 -0
  100. data/lib/manifests/errors.rb +35 -0
  101. data/lib/manifests/loader.rb +31 -0
  102. data/lib/manifests/loader/builder.rb +39 -0
  103. data/lib/manifests/loader/normalizer.rb +145 -0
  104. data/lib/manifests/loader/resolver.rb +79 -0
  105. data/lib/manifests/manifests.rb +343 -0
  106. data/lib/manifests/plugin.rb +140 -0
  107. data/lib/micro/README.md +25 -0
  108. data/lib/micro/errors.rb +4 -0
  109. data/lib/micro/micro.rb +56 -0
  110. data/lib/micro/plugin.rb +197 -0
  111. data/lib/micro/switcher/base.rb +79 -0
  112. data/lib/micro/switcher/darwin.rb +21 -0
  113. data/lib/micro/switcher/dummy.rb +15 -0
  114. data/lib/micro/switcher/linux.rb +16 -0
  115. data/lib/micro/switcher/windows.rb +31 -0
  116. data/lib/micro/vmrun.rb +175 -0
  117. data/lib/tasks/gem_release.rake +56 -0
  118. data/lib/tasks/windows_build.rake +14 -0
  119. data/lib/tunnel/README.md +29 -0
  120. data/lib/tunnel/config/clients.yml +17 -0
  121. data/lib/tunnel/helper-app/Gemfile +10 -0
  122. data/lib/tunnel/helper-app/Gemfile.lock +48 -0
  123. data/lib/tunnel/helper-app/server.rb +43 -0
  124. data/lib/tunnel/plugin.rb +183 -0
  125. data/lib/tunnel/tunnel.rb +295 -0
  126. data/spec/admin/curl_spec.rb +52 -0
  127. data/spec/admin/guid_spec.rb +85 -0
  128. data/spec/admin/service_broker/add_spec.rb +64 -0
  129. data/spec/admin/service_broker/remove_spec.rb +46 -0
  130. data/spec/admin/service_broker/service_brokers_spec.rb +34 -0
  131. data/spec/admin/service_broker/update_spec.rb +51 -0
  132. data/spec/admin/set_quota_spec.rb +89 -0
  133. data/spec/assets/env/Gemfile +4 -0
  134. data/spec/assets/env/Gemfile.lock +20 -0
  135. data/spec/assets/env/env_test.rb +58 -0
  136. data/spec/assets/hello-sinatra/Gemfile +3 -0
  137. data/spec/assets/hello-sinatra/Gemfile.lock +17 -0
  138. data/spec/assets/hello-sinatra/config.ru +3 -0
  139. data/spec/assets/hello-sinatra/fat-cat-makes-app-larger.png +0 -0
  140. data/spec/assets/hello-sinatra/main.rb +8 -0
  141. data/spec/assets/rails328_ruby187_app/Gemfile +39 -0
  142. data/spec/assets/rails328_ruby187_app/README.rdoc +261 -0
  143. data/spec/assets/rails328_ruby187_app/Rakefile +7 -0
  144. data/spec/assets/rails328_ruby187_app/app/assets/images/rails.png +0 -0
  145. data/spec/assets/rails328_ruby187_app/app/assets/javascripts/application.js +15 -0
  146. data/spec/assets/rails328_ruby187_app/app/assets/stylesheets/application.css +13 -0
  147. data/spec/assets/rails328_ruby187_app/app/controllers/application_controller.rb +3 -0
  148. data/spec/assets/rails328_ruby187_app/app/helpers/application_helper.rb +2 -0
  149. data/spec/assets/rails328_ruby187_app/app/views/layouts/application.html.erb +14 -0
  150. data/spec/assets/rails328_ruby187_app/config.ru +4 -0
  151. data/spec/assets/rails328_ruby187_app/config/application.rb +62 -0
  152. data/spec/assets/rails328_ruby187_app/config/boot.rb +6 -0
  153. data/spec/assets/rails328_ruby187_app/config/database.yml +25 -0
  154. data/spec/assets/rails328_ruby187_app/config/environment.rb +5 -0
  155. data/spec/assets/rails328_ruby187_app/config/environments/development.rb +37 -0
  156. data/spec/assets/rails328_ruby187_app/config/environments/production.rb +67 -0
  157. data/spec/assets/rails328_ruby187_app/config/environments/test.rb +37 -0
  158. data/spec/assets/rails328_ruby187_app/config/initializers/backtrace_silencers.rb +7 -0
  159. data/spec/assets/rails328_ruby187_app/config/initializers/inflections.rb +15 -0
  160. data/spec/assets/rails328_ruby187_app/config/initializers/mime_types.rb +5 -0
  161. data/spec/assets/rails328_ruby187_app/config/initializers/secret_token.rb +7 -0
  162. data/spec/assets/rails328_ruby187_app/config/initializers/session_store.rb +8 -0
  163. data/spec/assets/rails328_ruby187_app/config/initializers/wrap_parameters.rb +14 -0
  164. data/spec/assets/rails328_ruby187_app/config/locales/en.yml +5 -0
  165. data/spec/assets/rails328_ruby187_app/config/routes.rb +58 -0
  166. data/spec/assets/rails328_ruby187_app/db/seeds.rb +7 -0
  167. data/spec/assets/rails328_ruby187_app/doc/README_FOR_APP +2 -0
  168. data/spec/assets/rails328_ruby187_app/manifest.yml +7 -0
  169. data/spec/assets/rails328_ruby187_app/public/404.html +26 -0
  170. data/spec/assets/rails328_ruby187_app/public/422.html +26 -0
  171. data/spec/assets/rails328_ruby187_app/public/500.html +25 -0
  172. data/spec/assets/rails328_ruby187_app/public/assets/application-7270767b2a9e9fff880aa5de378ca791.css +0 -0
  173. data/spec/assets/rails328_ruby187_app/public/assets/application-7270767b2a9e9fff880aa5de378ca791.css.gz +0 -0
  174. data/spec/assets/rails328_ruby187_app/public/assets/application-ccab98dc1abdf097c0af693e20aed861.js +17 -0
  175. data/spec/assets/rails328_ruby187_app/public/assets/application-ccab98dc1abdf097c0af693e20aed861.js.gz +0 -0
  176. data/spec/assets/rails328_ruby187_app/public/assets/application.css +0 -0
  177. data/spec/assets/rails328_ruby187_app/public/assets/application.css.gz +0 -0
  178. data/spec/assets/rails328_ruby187_app/public/assets/application.js +17 -0
  179. data/spec/assets/rails328_ruby187_app/public/assets/application.js.gz +0 -0
  180. data/spec/assets/rails328_ruby187_app/public/assets/manifest.yml +4 -0
  181. data/spec/assets/rails328_ruby187_app/public/assets/rails-be8732dac73d845ac5b142c8fb5f9fb0.png +0 -0
  182. data/spec/assets/rails328_ruby187_app/public/assets/rails.png +0 -0
  183. data/spec/assets/rails328_ruby187_app/public/favicon.ico +0 -0
  184. data/spec/assets/rails328_ruby187_app/public/index.html +241 -0
  185. data/spec/assets/rails328_ruby187_app/public/robots.txt +5 -0
  186. data/spec/assets/rails328_ruby187_app/script/rails +6 -0
  187. data/spec/assets/rails328_ruby187_app/test/performance/browsing_test.rb +12 -0
  188. data/spec/assets/rails328_ruby187_app/test/test_helper.rb +13 -0
  189. data/spec/cf/cli/app/base_spec.rb +17 -0
  190. data/spec/cf/cli/app/delete_spec.rb +197 -0
  191. data/spec/cf/cli/app/env_spec.rb +261 -0
  192. data/spec/cf/cli/app/events_spec.rb +72 -0
  193. data/spec/cf/cli/app/help_spec.rb +39 -0
  194. data/spec/cf/cli/app/instances_spec.rb +69 -0
  195. data/spec/cf/cli/app/push/create_spec.rb +444 -0
  196. data/spec/cf/cli/app/push/interactions_spec.rb +32 -0
  197. data/spec/cf/cli/app/push_spec.rb +332 -0
  198. data/spec/cf/cli/app/rename_spec.rb +108 -0
  199. data/spec/cf/cli/app/restart_spec.rb +47 -0
  200. data/spec/cf/cli/app/scale_spec.rb +63 -0
  201. data/spec/cf/cli/app/start_spec.rb +255 -0
  202. data/spec/cf/cli/app/stats_spec.rb +66 -0
  203. data/spec/cf/cli/domain/help_spec.rb +39 -0
  204. data/spec/cf/cli/domain/map_spec.rb +140 -0
  205. data/spec/cf/cli/domain/unmap_spec.rb +77 -0
  206. data/spec/cf/cli/help_spec.rb +21 -0
  207. data/spec/cf/cli/organization/create_spec.rb +121 -0
  208. data/spec/cf/cli/organization/delete_spec.rb +105 -0
  209. data/spec/cf/cli/organization/help_spec.rb +39 -0
  210. data/spec/cf/cli/organization/orgs_spec.rb +116 -0
  211. data/spec/cf/cli/organization/rename_spec.rb +116 -0
  212. data/spec/cf/cli/populators/organization_spec.rb +179 -0
  213. data/spec/cf/cli/populators/space_spec.rb +156 -0
  214. data/spec/cf/cli/populators/target_spec.rb +39 -0
  215. data/spec/cf/cli/route/delete_spec.rb +92 -0
  216. data/spec/cf/cli/route/help_spec.rb +32 -0
  217. data/spec/cf/cli/route/map_spec.rb +148 -0
  218. data/spec/cf/cli/route/unmap_spec.rb +114 -0
  219. data/spec/cf/cli/service/bind_spec.rb +25 -0
  220. data/spec/cf/cli/service/create_spec.rb +147 -0
  221. data/spec/cf/cli/service/delete_spec.rb +22 -0
  222. data/spec/cf/cli/service/help_spec.rb +39 -0
  223. data/spec/cf/cli/service/rename_spec.rb +103 -0
  224. data/spec/cf/cli/service/service_helper_spec.rb +66 -0
  225. data/spec/cf/cli/service/service_instance_helper_spec.rb +155 -0
  226. data/spec/cf/cli/service/service_spec.rb +23 -0
  227. data/spec/cf/cli/service/services_spec.rb +156 -0
  228. data/spec/cf/cli/service/unbind_spec.rb +25 -0
  229. data/spec/cf/cli/space/base_spec.rb +49 -0
  230. data/spec/cf/cli/space/create_spec.rb +144 -0
  231. data/spec/cf/cli/space/delete_spec.rb +109 -0
  232. data/spec/cf/cli/space/help_spec.rb +39 -0
  233. data/spec/cf/cli/space/rename_spec.rb +110 -0
  234. data/spec/cf/cli/space/space_spec.rb +80 -0
  235. data/spec/cf/cli/space/spaces_spec.rb +107 -0
  236. data/spec/cf/cli/space/switch_space_spec.rb +57 -0
  237. data/spec/cf/cli/start/help_spec.rb +39 -0
  238. data/spec/cf/cli/start/login_spec.rb +142 -0
  239. data/spec/cf/cli/start/logout_spec.rb +49 -0
  240. data/spec/cf/cli/start/target_prettifier_spec.rb +78 -0
  241. data/spec/cf/cli/start/target_spec.rb +123 -0
  242. data/spec/cf/cli/user/create_spec.rb +98 -0
  243. data/spec/cf/cli/user/help_spec.rb +32 -0
  244. data/spec/cf/cli/user/passwd_spec.rb +94 -0
  245. data/spec/cf/cli/user/register_spec.rb +145 -0
  246. data/spec/cf/cli_spec.rb +474 -0
  247. data/spec/console/console_spec.rb +189 -0
  248. data/spec/factories/cfoundry/v2/apps_factory.rb +12 -0
  249. data/spec/factories/cfoundry/v2/clients_factory.rb +7 -0
  250. data/spec/factories/cfoundry/v2/domains_factory.rb +8 -0
  251. data/spec/factories/cfoundry/v2/managed_service_instances_factory.rb +13 -0
  252. data/spec/factories/cfoundry/v2/organizations_factory.rb +14 -0
  253. data/spec/factories/cfoundry/v2/quota_definitions.rb +13 -0
  254. data/spec/factories/cfoundry/v2/routes_factory.rb +8 -0
  255. data/spec/factories/cfoundry/v2/service_bindings_factory.rb +11 -0
  256. data/spec/factories/cfoundry/v2/service_brokers_factory.rb +11 -0
  257. data/spec/factories/cfoundry/v2/service_plans_factory.rb +17 -0
  258. data/spec/factories/cfoundry/v2/services_factory.rb +14 -0
  259. data/spec/factories/cfoundry/v2/spaces_factory.rb +13 -0
  260. data/spec/factories/cfoundry/v2/stacks_factory.rb +11 -0
  261. data/spec/factories/cfoundry/v2/user_provided_service_instances_factory.rb +12 -0
  262. data/spec/factories/cfoundry/v2/users_factory.rb +7 -0
  263. data/spec/features/backspace_spec.rb +46 -0
  264. data/spec/features/create_user_spec.rb +74 -0
  265. data/spec/features/delete_orphaned_service_spec.rb +64 -0
  266. data/spec/features/login_spec.rb +65 -0
  267. data/spec/features/manifests_spec.rb +86 -0
  268. data/spec/features/org_spec.rb +50 -0
  269. data/spec/features/push_flow_spec.rb +169 -0
  270. data/spec/features/service_brokers_spec.rb +173 -0
  271. data/spec/features/services_spec.rb +122 -0
  272. data/spec/features/space_spec.rb +107 -0
  273. data/spec/features/switching_targets_spec.rb +70 -0
  274. data/spec/manifests/errors_spec.rb +43 -0
  275. data/spec/manifests/loader/builder_spec.rb +80 -0
  276. data/spec/manifests/loader/normalizer_spec.rb +158 -0
  277. data/spec/manifests/manifests_spec.rb +335 -0
  278. data/spec/manifests/plugin_spec.rb +410 -0
  279. data/spec/micro/plugin_spec.rb +64 -0
  280. data/spec/spec_helper.rb +69 -0
  281. data/spec/support/cli_helper.rb +87 -0
  282. data/spec/support/config_helper.rb +15 -0
  283. data/spec/support/factory_girl.rb +6 -0
  284. data/spec/support/fake_home_dir.rb +55 -0
  285. data/spec/support/features_helper.rb +99 -0
  286. data/spec/support/interact_helper.rb +27 -0
  287. data/spec/support/matchers.rb +16 -0
  288. data/spec/support/mock_commands/mock_restart.rb +16 -0
  289. data/spec/support/mock_commands/mock_start.rb +17 -0
  290. data/spec/support/shared_examples/errors.rb +40 -0
  291. data/spec/support/shared_examples/input.rb +14 -0
  292. data/spec/tunnel/plugin_spec.rb +31 -0
  293. data/spec/tunnel/tunnel_spec.rb +54 -0
  294. metadata +814 -0
@@ -0,0 +1,25 @@
1
+ class ServiceHelper
2
+ def initialize(service)
3
+ @service = service
4
+ end
5
+
6
+ def label
7
+ @service.label
8
+ end
9
+
10
+ def provider
11
+ @service.provider || 'n/a'
12
+ end
13
+
14
+ def version
15
+ @service.version || 'n/a'
16
+ end
17
+
18
+ def service_plans
19
+ @service.service_plans.map(&:name).join(', ')
20
+ end
21
+
22
+ def description
23
+ @service.description
24
+ end
25
+ end
@@ -0,0 +1,100 @@
1
+ class ServiceInstanceHelper
2
+ def self.new(instance)
3
+ "#{instance.class.name.demodulize}Helper".constantize.new(instance)
4
+ end
5
+ end
6
+
7
+ class UserProvidedServiceInstanceHelper
8
+ def initialize(instance)
9
+ @instance = instance
10
+ end
11
+
12
+ def service_label
13
+ "user-provided"
14
+ end
15
+
16
+ def service_provider
17
+ "n/a"
18
+ end
19
+
20
+ def version
21
+ "n/a"
22
+ end
23
+
24
+ def plan_name
25
+ "n/a"
26
+ end
27
+
28
+ def matches(opts = {})
29
+ label = opts[:service]
30
+ if label
31
+ return label == service_label
32
+ end
33
+
34
+ true
35
+ end
36
+
37
+ def name
38
+ @instance.name
39
+ end
40
+
41
+ def service_bindings
42
+ @instance.service_bindings
43
+ end
44
+ end
45
+
46
+ class ManagedServiceInstanceHelper
47
+ def initialize(service_instance)
48
+ @instance = service_instance
49
+ @service_helper = ServiceHelper.new(service_instance.service_plan.service)
50
+ end
51
+
52
+ def service_label
53
+ @service_helper.label
54
+ end
55
+
56
+ def service_provider
57
+ @service_helper.provider
58
+ end
59
+
60
+ def version
61
+ @service_helper.version
62
+ end
63
+
64
+ def plan_name
65
+ @instance.service_plan.name
66
+ end
67
+
68
+ def service_bindings
69
+ @instance.service_bindings
70
+ end
71
+
72
+ def name
73
+ @instance.name
74
+ end
75
+
76
+ def matches(opts = {})
77
+ service = opts[:service]
78
+ plan = opts[:plan]
79
+ provider = opts[:provider]
80
+ version = opts[:version]
81
+
82
+ if service
83
+ return false unless File.fnmatch(service, service_label)
84
+ end
85
+
86
+ if plan
87
+ return false unless File.fnmatch(plan.upcase, plan_name.upcase)
88
+ end
89
+
90
+ if provider
91
+ return false unless File.fnmatch(provider, service_provider)
92
+ end
93
+
94
+ if version
95
+ return false unless File.fnmatch(version, self.version)
96
+ end
97
+
98
+ true
99
+ end
100
+ end
@@ -0,0 +1,110 @@
1
+ require "cf/cli/service/base"
2
+
3
+ module CF::Service
4
+ class Services < Base
5
+ desc "List your services"
6
+ group :services
7
+ input :space, :desc => "Show services in given space",
8
+ :from_given => by_name(:space),
9
+ :default => proc { client.current_space }
10
+ input :name, :desc => "Filter by name"
11
+ input :service, :desc => "Filter by service type"
12
+ input :plan, :desc => "Filter by service plan"
13
+ input :provider, :desc => "Filter by service provider"
14
+ input :version, :desc => "Filter by service version"
15
+ input :app, :desc => "Limit to application's service bindings",
16
+ :from_given => by_name(:app)
17
+ input :full, :desc => "Verbose output format", :default => false
18
+ input :marketplace, :desc => "List supported services", :default => false, :alias => "-m"
19
+
20
+ def services
21
+ return show_marketplace if input[:marketplace]
22
+
23
+ set_services
24
+ return show_full if input[:full]
25
+ return show_services_table
26
+ end
27
+
28
+ private
29
+
30
+ def set_services
31
+ @services =
32
+ with_progress(services_msg) do
33
+ client.service_instances(:depth => 2)
34
+ end
35
+
36
+ line unless quiet?
37
+
38
+ if @services.empty? and !quiet?
39
+ line "No services."
40
+ return
41
+ end
42
+
43
+ @services.reject! do |i|
44
+ !service_matches(i, input)
45
+ end
46
+ end
47
+
48
+ def show_marketplace
49
+ services = with_progress("Getting services") { client.services }
50
+
51
+ line unless quiet?
52
+
53
+ table(
54
+ ["service", "version", "provider", "plans", "description"],
55
+ services.sort_by(&:label).collect { |s|
56
+ presenter = ServiceHelper.new(s)
57
+ [c(presenter.label, :name),
58
+ presenter.version,
59
+ presenter.provider,
60
+ presenter.service_plans,
61
+ presenter.description
62
+ ]
63
+ })
64
+ end
65
+
66
+ def show_full
67
+ spaced(@services) do |s|
68
+ invoke :service, :service => s
69
+ end
70
+ end
71
+
72
+ def show_services_table
73
+ table(
74
+ ["name", "service", "provider", "version", "plan", "bound apps"],
75
+ @services.collect { |instance|
76
+ presenter = ServiceInstanceHelper.new(instance)
77
+ apps = name_list(presenter.service_bindings.collect(&:app))
78
+
79
+ label = presenter.service_label
80
+ provider = presenter.service_provider
81
+ version = presenter.version
82
+ plan_name = presenter.plan_name
83
+
84
+ [ c(presenter.name, :name), label, provider, version, plan_name, apps]
85
+ })
86
+
87
+ end
88
+
89
+ def services_msg
90
+ if space = input[:space]
91
+ "Getting services in #{c(space.name, :name)}"
92
+ else
93
+ "Getting services"
94
+ end
95
+ end
96
+
97
+ def service_matches(i, options)
98
+ if app = options[:app]
99
+ return false unless app.services.include? i
100
+ end
101
+
102
+ if name = options[:name]
103
+ return false unless File.fnmatch(name, i.name)
104
+ end
105
+
106
+ helper = ServiceInstanceHelper.new(i)
107
+ return helper.matches(options)
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,36 @@
1
+ require "cf/cli/service/base"
2
+
3
+ module CF::Service
4
+ class Unbind < Base
5
+ desc "Unbind a service from an application"
6
+ group :services, :manage
7
+ input :service, :desc => "Service to unbind", :argument => :optional,
8
+ :from_given => by_name(:service_instance, :service)
9
+ input :app, :desc => "Application to unbind from", :argument => :optional,
10
+ :from_given => by_name(:app)
11
+ def unbind_service
12
+ app = input[:app]
13
+ service = input[:service, app]
14
+
15
+ with_progress(
16
+ "Unbinding #{c(service.name, :name)} from #{c(app.name, :name)}") do
17
+ app.unbind(service)
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def ask_service(app)
24
+ services = app.services
25
+ fail "No bound services." if services.empty?
26
+
27
+ ask "Which service?", :choices => services,
28
+ :display => proc(&:name)
29
+ end
30
+
31
+ def ask_app
32
+ ask "Which application?", :choices => client.apps,
33
+ :display => proc(&:name)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,27 @@
1
+ require "cf/cli"
2
+ require "cf/cli/populators/organization"
3
+
4
+ module CF
5
+ module Space
6
+ class Base < CLI
7
+ attr_reader :org
8
+
9
+ def precondition
10
+ check_target
11
+ check_logged_in
12
+ end
13
+
14
+ def run(name)
15
+ @org = CF::Populators::Organization.new(input).populate_and_save!
16
+ super(name)
17
+ end
18
+
19
+ def self.space_by_name
20
+ proc { |name, org, *_|
21
+ org.space_by_name(name) ||
22
+ fail("Unknown space '#{name}'.")
23
+ }
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,66 @@
1
+ require "cf/cli/space/base"
2
+
3
+ module CF
4
+ module Space
5
+ class Create < Base
6
+ desc "Create a space in an organization"
7
+ group :spaces
8
+ input :name, :desc => "Space name", :argument => :optional
9
+ input :organization, :desc => "Parent organization",
10
+ :argument => :optional, :aliases => ["--org", "-o"],
11
+ :from_given => by_name(:organization),
12
+ :default => proc { client.current_organization }
13
+ input :target, :desc => "Switch to the space after creation",
14
+ :alias => "-t", :default => false
15
+ input :manager, :desc => "Add yourself as manager", :default => true
16
+ input :developer, :desc => "Add yourself as developer", :default => true
17
+ input :auditor, :desc => "Add yourself as auditor", :default => false
18
+ input :find_if_exists, :desc => "Use an existing space if one already exists with the given name", :default => false
19
+ def create_space
20
+ space = client.space
21
+ space.organization = org
22
+ space.name = input[:name]
23
+
24
+ begin
25
+ with_progress("Creating space #{c(space.name, :name)}") { space.create! }
26
+ rescue CFoundry::SpaceNameTaken
27
+ raise unless input[:find_if_exists]
28
+ space = client.space_by_name(input[:name])
29
+ already_exists = true
30
+ end
31
+
32
+ if input[:manager]
33
+ with_progress("Adding you as a manager") { space.add_manager client.current_user }
34
+ end
35
+
36
+ if input[:developer]
37
+ with_progress("Adding you as a developer") { space.add_developer client.current_user }
38
+ end
39
+
40
+ if input[:auditor]
41
+ with_progress("Adding you as an auditor") { space.add_auditor client.current_user }
42
+ end
43
+
44
+ if input[:target]
45
+ invoke :target, :organization => org, :space => space
46
+ else
47
+ if already_exists
48
+ line c("Space already exists!", :good)
49
+ line
50
+ line "#{b("cf switch-space #{space.name}")} # targets existing space"
51
+ else
52
+ line c("Space created!", :good)
53
+ line
54
+ line "#{b("cf switch-space #{space.name}")} # targets new space"
55
+ end
56
+ end
57
+ end
58
+
59
+ private
60
+
61
+ def ask_name
62
+ ask("Name")
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,55 @@
1
+ require "cf/cli/space/base"
2
+
3
+ module CF::Space
4
+ class Delete < Base
5
+ desc "Delete a space and its contents"
6
+ group :spaces
7
+ input :organization, :desc => "Space's organization",
8
+ :aliases => ["--org", "-o"], :from_given => by_name(:organization),
9
+ :default => proc { client.current_organization }
10
+ input :space, :desc => "Space to delete", :argument => true,
11
+ :from_given => space_by_name
12
+ input :recursive, :desc => "Delete recursively", :alias => "-r",
13
+ :default => false, :forget => true
14
+ input :warn, :desc => "Show warning if it was the last space",
15
+ :default => true
16
+ input :really, :type => :boolean, :forget => true, :hidden => true,
17
+ :default => proc { force? || interact }
18
+
19
+ def delete_space
20
+ space = input[:space, org]
21
+
22
+ return unless input[:really, space]
23
+
24
+ deleting_current_space = (space == client.current_space)
25
+
26
+ with_progress("Deleting space #{c(space.name, :name)}") do
27
+ if input[:recursive]
28
+ space.delete!(:recursive => true)
29
+ else
30
+ space.delete!
31
+ end
32
+ end
33
+
34
+ if deleting_current_space
35
+ line
36
+ line c("The space that you were targeting has now been deleted. Please use #{b("`cf target -s SPACE_NAME`")} to target a different one.", :warning)
37
+ end
38
+ rescue CFoundry::AssociationNotEmpty => boom
39
+ line
40
+ line c(boom.description, :bad)
41
+ line c("If you want to delete the space along with all dependent objects, rerun the command with the #{b("'--recursive'")} flag.", :bad)
42
+ exit_status(1)
43
+ end
44
+
45
+ private
46
+
47
+ def ask_really(space)
48
+ ask("Really delete #{c(space.name, :name)}?", :default => false)
49
+ end
50
+
51
+ def ask_recursive
52
+ ask "Delete #{c("EVERYTHING", :bad)}?", :default => false
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,38 @@
1
+ require "cf/cli/space/base"
2
+
3
+ module CF::Space
4
+ class Rename < Base
5
+ desc "Rename a space"
6
+ group :spaces
7
+ input :organization, :desc => "Space's organization",
8
+ :aliases => ["--org", "-o"], :from_given => by_name(:organization),
9
+ :default => proc { client.current_organization }
10
+ input :space, :desc => "Space to rename", :argument => :optional,
11
+ :from_given => by_name(:space)
12
+ input :name, :desc => "New space name", :argument => :optional
13
+ def rename_space
14
+ space = input[:space, org]
15
+ name = input[:name]
16
+
17
+ space.name = name
18
+
19
+ with_progress("Renaming to #{c(name, :name)}") do
20
+ space.update!
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def ask_space(org)
27
+ spaces = org.spaces
28
+ fail "No spaces." if spaces.empty?
29
+
30
+ ask("Rename which space?", :choices => spaces.sort_by(&:name),
31
+ :display => proc(&:name))
32
+ end
33
+
34
+ def ask_name
35
+ ask("New name")
36
+ end
37
+ end
38
+ end