cf 4.0.0rc1 → 4.0.0rc2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c7ac8300f500d579495c13617780f1ca367d94c0
4
+ data.tar.gz: 39e853208b4280438d21ed9d814af02199b49d63
5
+ SHA512:
6
+ metadata.gz: ee59533293c4075671a028ad563ba43139873c6a7db437232b988a33d9b835d7392703d96b76c57e194ddba908e1a6e1effe26e202c3c573b284159c55b1dfe7
7
+ data.tar.gz: 2aa939fe6949367e65bc5ff855db8daae78701bfe715df8deabfd413d8674bf04c7b82e44682f34d03d0194f615537b5602d75f5c0fa0177135cdb98f338b164
@@ -0,0 +1,30 @@
1
+ [![Build Status](https://travis-ci.org/cloudfoundry/admin-cf-plugin.png)](https://travis-ci.org/cloudfoundry/admin-cf-plugin)
2
+ [![Gem Version](https://badge.fury.io/rb/admin-cf-plugin.png)](http://badge.fury.io/rb/admin-cf-plugin)
3
+
4
+ ## Admin
5
+ ### Info
6
+ This plugin allows you to make manual HTTP requests to the Cloud Foundry REST API.
7
+
8
+ ### Installation
9
+
10
+ If you have installed CF via gem install, use:
11
+ ```
12
+ gem install admin-cf-plugin
13
+ ```
14
+
15
+ If you have installed CF through bundler and the Gemfile, add the following to your Gemfile:
16
+ ```
17
+ gem "admin-cf-plugin"
18
+ ```
19
+
20
+ ### Usage
21
+
22
+ ```
23
+ curl MODE PATH HEADERS... Execute a raw request
24
+ guid TYPE [NAME] Obtain guid of an object(s)
25
+ set-quota [QUOTA_DEFINITION] [ORGANIZATION] Change the quota definition for the given (or current) organization.
26
+ service-auth-tokens List service auth tokens
27
+ create-service-auth-token [LABEL] [PROVIDER] Create a service auth token
28
+ update-service-auth-token [SERVICE_AUTH_TOKEN] Update a service auth token
29
+ delete-service-auth-token [SERVICE_AUTH_TOKEN] Delete a service auth token
30
+ ```
data/lib/admin/curl.rb ADDED
@@ -0,0 +1,59 @@
1
+ require "multi_json"
2
+
3
+ require "cf/cli"
4
+
5
+ module CFAdmin
6
+ class Curl < CF::CLI
7
+ def precondition
8
+ check_target
9
+ end
10
+
11
+ desc "Execute a raw request"
12
+ group :admin
13
+ input :mode, :argument => :required, :desc => "Request mode (Get/Put/etc.)"
14
+ input :path, :argument => :required, :desc => "Request path"
15
+ input :headers, :argument => :splat, :desc => "Headers (i.e. Foo: bar)"
16
+ input :body, :alias => "-b", :desc => "Request body"
17
+ def curl
18
+ mode = input[:mode].upcase
19
+ path = input[:path]
20
+ body = input[:body]
21
+
22
+ headers = {}
23
+ input[:headers].each do |h|
24
+ k, v = h.split(/\s*:\s*/, 2)
25
+ headers[k.downcase] = v
26
+ end
27
+
28
+ content = headers["content-type"]
29
+ accept = headers["accept"]
30
+
31
+ content ||= :json if body
32
+ accept ||= :json unless %w(DELETE HEAD).include?(mode)
33
+
34
+ req, res =
35
+ client.base.rest_client.request(
36
+ mode,
37
+ remove_leading_slash(path),
38
+ :headers => headers,
39
+ :accept => accept,
40
+ :payload => body,
41
+ :content => body && content)
42
+
43
+ body = res[:body]
44
+
45
+ type = res[:headers]["content-type"]
46
+
47
+ if type && type.include?("application/json")
48
+ json = MultiJson.load(body)
49
+ puts MultiJson.dump(json, :pretty => true)
50
+ else
51
+ puts body
52
+ end
53
+ end
54
+
55
+ def remove_leading_slash(path)
56
+ path.sub(%r{^/}, '')
57
+ end
58
+ end
59
+ end
data/lib/admin/guid.rb ADDED
@@ -0,0 +1,89 @@
1
+ require "cf/cli"
2
+
3
+ module CFAdmin
4
+ class Guid < CF::CLI
5
+ def precondition
6
+ check_target
7
+ end
8
+
9
+ desc "Obtain guid of an object(s)"
10
+ group :admin
11
+ input :type, :argument => :required, :desc => "Object type (e.g. org, space, app, domain, ...)"
12
+ input :name, :argument => :optional, :desc => "Object name (e.g. some-app, ...)"
13
+ def guid
14
+ type = expand_type(input[:type])
15
+ name = input[:name]
16
+
17
+ _, res = client.base.rest_client.request("GET", api_path(type, name))
18
+
19
+ puts "Listing #{type} for '#{name}'...\n\n"
20
+ puts_response(res[:body])
21
+ end
22
+
23
+ private
24
+
25
+ def api_path(type, name)
26
+ "".tap do |url|
27
+ url << "v2/#{type}?"
28
+ url << "q=name:#{name}" if name
29
+ end
30
+ end
31
+
32
+ EXPANDED_TYPES = %w(
33
+ organizations
34
+ spaces
35
+ domains
36
+ routes
37
+ apps
38
+ services
39
+ service_instances
40
+ users
41
+ )
42
+
43
+ def expand_type(type)
44
+ EXPANDED_TYPES.detect do |expanded_type|
45
+ expanded_type.start_with?(type)
46
+ end || type
47
+ end
48
+
49
+ def puts_response(body)
50
+ # passing nil to load causes segfault
51
+ hash = MultiJson.load(body || "{}") rescue {}
52
+
53
+ puts_pagination(*hash.values_at("total_results", "total_pages"))
54
+ puts_resources(hash["resources"])
55
+ end
56
+
57
+ def puts_pagination(results, pages)
58
+ if results.nil?
59
+ puts "Unexpected response."
60
+ elsif results == 0
61
+ puts "No results."
62
+ else
63
+ puts "Found #{results} results on #{pages} pages. First page:"
64
+ end
65
+ end
66
+
67
+ def puts_resources(resources)
68
+ resources ||= []
69
+
70
+ sorted_resources = \
71
+ resources.sort_by { |r| [r["entity"]["name"].downcase] }
72
+
73
+ max_name_size = \
74
+ resources.map { |r| r["entity"]["name"].size }.max
75
+
76
+ sorted_resources.each_with_index do |resource, i|
77
+ puts_resource(resource, :max_name_size => max_name_size)
78
+ puts "---" if i % 3 == 2
79
+ end
80
+ end
81
+
82
+ def puts_resource(resource, opts={})
83
+ puts [
84
+ resource["entity"]["name"].ljust(opts[:max_name_size] + 2),
85
+ resource["metadata"]["guid"],
86
+ ].join
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,4 @@
1
+ require "admin/curl"
2
+ require "admin/guid"
3
+ require "admin/set_quota"
4
+ require "admin/service_auth_token"
@@ -0,0 +1,93 @@
1
+ require "cf/cli"
2
+
3
+ module CFAdmin
4
+ class ServiceAuthToken < CF::CLI
5
+ def precondition
6
+ unless File.exists? target_file
7
+ fail "Please select a target with 'cf target'."
8
+ end
9
+
10
+ unless client.logged_in?
11
+ fail "Please log in with 'cf login'."
12
+ end
13
+ end
14
+
15
+
16
+ desc "List service auth tokens"
17
+ group :admin
18
+ def service_auth_tokens
19
+ spaced(client.service_auth_tokens) do |t|
20
+ line "#{c(t.label, :name)}:"
21
+
22
+ indented do
23
+ line "guid: #{t.guid}"
24
+ line "provider: #{t.provider}"
25
+ end
26
+ end
27
+ end
28
+
29
+
30
+ desc "Create a service auth token"
31
+ group :admin
32
+ input(:label, :argument => :optional, :desc => "Auth token label") {
33
+ ask("Label")
34
+ }
35
+ input :provider, :argument => :optional, :default => "core",
36
+ :desc => "Auth token provider"
37
+ input(:token, :desc => "Auth token value") {
38
+ ask("Token")
39
+ }
40
+ def create_service_auth_token
41
+ sat = client.service_auth_token
42
+ sat.label = input[:label]
43
+ sat.provider = input[:provider]
44
+ sat.token = input[:token]
45
+
46
+ with_progress("Creating service auth token") do
47
+ sat.create!
48
+ end
49
+ end
50
+
51
+
52
+ desc "Update a service auth token"
53
+ group :admin
54
+ input(:service_auth_token, :argument => :optional,
55
+ :from_given => proc { |guid| client.service_auth_token(guid) },
56
+ :desc => "Auth token to delete") {
57
+ tokens = client.service_auth_tokens
58
+ fail "No tokens!" if tokens.empty?
59
+
60
+ ask("Which token?", :choices => tokens, :display => proc(&:label))
61
+ }
62
+ input(:token, :desc => "Auth token value") {
63
+ ask("Token")
64
+ }
65
+ def update_service_auth_token
66
+ sat = input[:service_auth_token]
67
+ sat.token = input[:token]
68
+
69
+ with_progress("Updating token #{c(sat.label, :name)}") do
70
+ sat.update!
71
+ end
72
+ end
73
+
74
+
75
+ desc "Delete a service auth token"
76
+ group :admin
77
+ input(:service_auth_token, :argument => :optional,
78
+ :from_given => proc { |guid| client.service_auth_token(guid) },
79
+ :desc => "Auth token to delete") {
80
+ tokens = client.service_auth_tokens
81
+ fail "No tokens!" if tokens.empty?
82
+
83
+ ask("Which token?", :choices => tokens, :display => proc(&:label))
84
+ }
85
+ def delete_service_auth_token
86
+ sat = input[:service_auth_token]
87
+
88
+ with_progress("Deleting token #{c(sat.label, :name)}") do
89
+ sat.delete!
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,44 @@
1
+ require "cf/cli"
2
+
3
+ module CFAdmin
4
+ class SetQuota < CF::CLI
5
+ def precondition
6
+ check_target
7
+ end
8
+
9
+ desc "Change the quota definition for the given (or current) organization."
10
+ group :admin
11
+ input :quota_definition, :argument => :optional,
12
+ :from_given => by_name(:quota_definition),
13
+ :desc => "Quota definition to set on the organization"
14
+ input :organization, :aliases => %w(org o), :argument => :optional,
15
+ :from_given => by_name(:organization),
16
+ :default => proc { client.current_organization || interact },
17
+ :desc => "Organization to update"
18
+ def set_quota
19
+ org = input[:organization]
20
+ quota = input[:quota_definition]
21
+
22
+ with_progress(<<MESSAGE.chomp) do
23
+ Setting quota of #{c(org.name, :name)} to #{c(quota.name, :name)}
24
+ MESSAGE
25
+ org.quota_definition = quota
26
+ org.update!
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def ask_quota_definition
33
+ ask("Quota",
34
+ :choices => client.quota_definitions,
35
+ :display => proc(&:name))
36
+ end
37
+
38
+ def ask_organization
39
+ ask("Organization",
40
+ :choices => client.organizations,
41
+ :display => proc(&:name))
42
+ end
43
+ end
44
+ end
data/lib/cf.rb CHANGED
@@ -7,6 +7,7 @@ Dir[File.expand_path(command_files, __FILE__)].each do |file|
7
7
  require file unless File.basename(file) == 'base.rb'
8
8
  end
9
9
 
10
- require "tunnel/plugin"
10
+ require "admin/plugin"
11
11
  require "console/plugin"
12
+ require "tunnel/plugin"
12
13
  require "manifests/plugin"
data/lib/cf/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module CF
2
- VERSION = "4.0.0rc1".freeze
2
+ VERSION = "4.0.0rc2".freeze
3
3
  end
@@ -7,6 +7,18 @@ module CFManifests
7
7
  MANIFEST_FILE = "manifest.yml"
8
8
 
9
9
  @@showed_manifest_usage = false
10
+
11
+ class BadManifestError < StandardError
12
+
13
+ def initialize(attr)
14
+ @attr = attr
15
+ end
16
+
17
+ def to_s
18
+ "#{@attr} is not a valid attribute, please visit the Manifest " +
19
+ "Documentation for a list of valid attributes."
20
+ end
21
+ end
10
22
 
11
23
  def manifest
12
24
  return @manifest if @manifest
@@ -50,7 +62,24 @@ module CFManifests
50
62
 
51
63
  # load and resolve a given manifest file
52
64
  def load_manifest(file)
53
- Loader.new(file, self).manifest
65
+ check_manifest! Loader.new(file, self).manifest
66
+ end
67
+
68
+ def check_manifest!(manifest_hash)
69
+ manifest_hash[:applications].each{|app| check_attributes! app}
70
+ manifest_hash
71
+ end
72
+
73
+ def check_attributes!(app)
74
+ app.each do |k, v|
75
+ raise BadManifestError.new(k) unless known_manifest_attributes.include? k
76
+ end
77
+ end
78
+
79
+ def known_manifest_attributes
80
+ [:path, :name, :memory, :instances, :host, :domain,
81
+ :command, :buildpack, :services, :env, :properties,
82
+ :inherit, :mem, :disk, :runtime, :applications]
54
83
  end
55
84
 
56
85
  # dynamic symbol resolution
@@ -0,0 +1,52 @@
1
+ require "spec_helper"
2
+
3
+ describe CFAdmin::Curl do
4
+ let(:fake_home_dir) { "#{SPEC_ROOT}/fixtures/fake_admin_dir" }
5
+
6
+ stub_home_dir_with { fake_home_dir }
7
+
8
+ let(:client) { fake_client }
9
+
10
+ context "when the response is JSON" do
11
+ it "pretty-prints the response" do
12
+ stub_request(:get, "https://api.some-target-for-cf-curl.com/foo").to_return(
13
+ :headers => {
14
+ "content-type" => "application/json; charset=utf8"
15
+ },
16
+ :status => 200,
17
+ :body => '{"foo":"bar"}'
18
+ )
19
+
20
+ cf %W[curl GET /foo]
21
+ expect(output).to say(<<OUT)
22
+ {
23
+ "foo": "bar"
24
+ }
25
+ OUT
26
+ end
27
+ end
28
+
29
+ context "with an implicit target" do
30
+ it "makes a request to the current target" do
31
+ stub_request(:get, "https://api.some-target-for-cf-curl.com/apps/5/instances").to_return(
32
+ :status => 200,
33
+ :body => 'some-body'
34
+ )
35
+
36
+ cf %W[curl GET /apps/5/instances]
37
+ expect(output).to say("some-body")
38
+ end
39
+ end
40
+
41
+ context "with an explicit target" do
42
+ it "makes a request to the given target" do
43
+ stub_request(:get, "https://some-other-domain.com/apps/5/instances").to_return(
44
+ :status => 200,
45
+ :body => 'some-other-body'
46
+ )
47
+
48
+ cf %W[curl GET https://some-other-domain.com/apps/5/instances]
49
+ expect(output).to say("some-other-body")
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,85 @@
1
+ require "spec_helper"
2
+
3
+ describe CFAdmin::Guid do
4
+ let(:fake_home_dir) { "#{SPEC_ROOT}/fixtures/fake_admin_dir" }
5
+ stub_home_dir_with { fake_home_dir }
6
+
7
+ before do
8
+ CFoundry::Client.any_instance.stub(:info) { { :version => 2 } }
9
+ end
10
+
11
+ let(:api_response) {{
12
+ :total_results => 1,
13
+ :total_pages => 1,
14
+ :resources => [
15
+ :metadata => {
16
+ :guid => "guid",
17
+ },
18
+ :entity => {
19
+ :name => "name",
20
+ },
21
+ ]
22
+ }}
23
+
24
+ def stub_api(path, response, opts={})
25
+ stub = stub_request(:get, "https://api.some-target-for-cf-curl.com#{path}")
26
+ response = MultiJson.dump(response) unless opts[:not_json]
27
+ stub.to_return(:status => 200, :body => response)
28
+ end
29
+
30
+ context "when api returns >0 resources" do
31
+ context "with known type" do
32
+ let(:args) { ["guid", "--type", "organizations"] }
33
+
34
+ it "shows results" do
35
+ stub_api("/v2/organizations?", api_response)
36
+ cf(args)
37
+ expect(stdout.string).to match(/name.*guid/)
38
+ end
39
+ end
40
+
41
+ context "with short known type" do
42
+ let(:args) { ["guid", "--type", "or"] }
43
+
44
+ it "shows results" do
45
+ stub_api("/v2/organizations?", api_response)
46
+ cf(args)
47
+ expect(stdout.string).to match(/name.*guid/)
48
+ end
49
+ end
50
+
51
+ context "with unknown type" do
52
+ let(:args) { ["guid", "--type", "some-unknown-type"] }
53
+
54
+ it "makes a request with unknown type" do
55
+ stub_api("/v2/some-unknown-type?", api_response)
56
+ cf(args)
57
+ expect(stdout.string).to match(/name.*guid/)
58
+ end
59
+ end
60
+ end
61
+
62
+ context "when api returns 0 resources" do
63
+ before do
64
+ api_response[:total_results] = 0
65
+ api_response[:total_pages] = 0
66
+ api_response[:resources] = []
67
+ end
68
+
69
+ it "shows 0 results" do
70
+ stub_api("/v2/organizations?", api_response)
71
+ cf(["guid", "--type", "organizations"])
72
+ expect(stdout.string).to match(/No results/)
73
+ end
74
+ end
75
+
76
+ context "when api does not return resources (errors, etc.)" do
77
+ ["", "not-json"].each do |response|
78
+ it "shows unexpected response for api resonse '#{response}'" do
79
+ stub_api("/v2/organizations?", response, :not_json => true)
80
+ cf(["guid", "--type", "organizations"])
81
+ expect(stdout.string).to match(/Unexpected response/)
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,89 @@
1
+ require "spec_helper"
2
+
3
+ describe CFAdmin::SetQuota do
4
+ let(:fake_home_dir) { "#{SPEC_ROOT}/fixtures/fake_admin_dir" }
5
+
6
+ stub_home_dir_with { fake_home_dir }
7
+
8
+ let(:paid_quota) { build :quota_definition, :name => "paid" }
9
+ let(:free_quota) { build :quota_definition, :name => "free" }
10
+
11
+ let(:organization) do
12
+ build :organization, :name => "some-org-name",
13
+ :quota_definition => free_quota
14
+ end
15
+
16
+ let(:client) do
17
+ build(:client).tap do |client|
18
+ client.stub(
19
+ :organizations => [organization],
20
+ :quota_definitions => [paid_quota, free_quota])
21
+ end
22
+ end
23
+
24
+ before do
25
+ CF::CLI.any_instance.stub(:client) { client }
26
+ organization.stub(:update!)
27
+ end
28
+
29
+ context "when given an organization and a quota definition" do
30
+ it "promotes the organization to the given quota definition" do
31
+ expect {
32
+ cf %W[set-quota paid some-org-name]
33
+ }.to change {
34
+ organization.quota_definition
35
+ }.from(free_quota).to(paid_quota)
36
+ end
37
+
38
+ it "shows progress to the user" do
39
+ cf %W[set-quota paid some-org-name]
40
+ expect(output).to say("Setting quota of some-org-name to paid... OK")
41
+ end
42
+
43
+ it "saves the changes made to the organization" do
44
+ organization.should_receive(:update!)
45
+ cf %W[set-quota paid some-org-name]
46
+ end
47
+ end
48
+
49
+ context "when NOT given a quota definition" do
50
+ it "prompts for the quota definition" do
51
+ should_ask("Quota", hash_including(:choices => client.quota_definitions)) do
52
+ paid_quota
53
+ end
54
+
55
+ cf %W[set-quota --organization some-org-name]
56
+ end
57
+ end
58
+
59
+ context "when NOT given an organization" do
60
+ context "and the user has a current organization" do
61
+ before { client.current_organization = organization }
62
+
63
+ it "promotes the current to the given quota definition" do
64
+ expect {
65
+ cf %W[set-quota paid]
66
+ }.to change {
67
+ organization.quota_definition
68
+ }.from(free_quota).to(paid_quota)
69
+ end
70
+
71
+ it "saves the changes made to the organization" do
72
+ organization.should_receive(:update!)
73
+ cf %W[set-quota paid]
74
+ end
75
+ end
76
+
77
+ context "and the user does NOT have a current organization" do
78
+ before { client.current_organization = nil }
79
+
80
+ it "prompts for the organization" do
81
+ should_ask("Organization", hash_including(:choices => client.organizations)) do
82
+ organization
83
+ end
84
+
85
+ cf %W[set-quota paid]
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,13 @@
1
+ module CFoundry
2
+ FactoryGirl.define do
3
+ factory :quota_definition, class: CFoundry::V2::QuotaDefinition do
4
+ sequence(:guid) { |n| "quota-definition-guid-#{n}" }
5
+
6
+ ignore do
7
+ client { FactoryGirl.build(:client) }
8
+ end
9
+
10
+ initialize_with { new(guid, client) }
11
+ end
12
+ end
13
+ end
@@ -289,4 +289,21 @@ describe CFManifests do
289
289
  expect(subject).to eq [{ :name => "foo", :path => "/abc"}, { :name => "bar", :path => "/abc" }]
290
290
  end
291
291
  end
292
+
293
+ describe "#check_manifest!" do
294
+
295
+ it "raise if there is some unknown attribute" do
296
+ wrong_manifest_hash = {:applications => [ {:bad_attr => 'boom'}]}
297
+ msg = "bad_attr is not a valid attribute, please visit the Manifest " +
298
+ "Documentation for a list of valid attributes."
299
+ expect{cmd.check_manifest!(wrong_manifest_hash)}.to raise_error(CFManifests::BadManifestError, msg)
300
+ end
301
+
302
+ it "not raise if there are no unknown attributes" do
303
+ good_manifest_hash = {:path => '/here', :name => 'good_manifest', :memory => '256M',
304
+ :instances => 1, :host => 'good-manifest', :domain => 'testing',
305
+ :buildpack => 'buildy', :services => {} }
306
+ expect{cmd.check_manifest!(good_manifest_hash)}.to_not raise_error(CFManifests::BadManifestError)
307
+ end
308
+ end
292
309
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cf
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0rc1
5
- prerelease: 5
4
+ version: 4.0.0rc2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Cloud Foundry Team
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-06-25 00:00:00.000000000 Z
12
+ date: 2013-06-26 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: addressable
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - ~>
21
19
  - !ruby/object:Gem::Version
@@ -23,7 +21,6 @@ dependencies:
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - ~>
29
26
  - !ruby/object:Gem::Version
@@ -31,7 +28,6 @@ dependencies:
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: caldecott-client
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
32
  - - ~>
37
33
  - !ruby/object:Gem::Version
@@ -39,7 +35,6 @@ dependencies:
39
35
  type: :runtime
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
39
  - - ~>
45
40
  - !ruby/object:Gem::Version
@@ -47,7 +42,6 @@ dependencies:
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: cfoundry
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
46
  - - ! '>='
53
47
  - !ruby/object:Gem::Version
@@ -58,7 +52,6 @@ dependencies:
58
52
  type: :runtime
59
53
  prerelease: false
60
54
  version_requirements: !ruby/object:Gem::Requirement
61
- none: false
62
55
  requirements:
63
56
  - - ! '>='
64
57
  - !ruby/object:Gem::Version
@@ -69,7 +62,6 @@ dependencies:
69
62
  - !ruby/object:Gem::Dependency
70
63
  name: interact
71
64
  requirement: !ruby/object:Gem::Requirement
72
- none: false
73
65
  requirements:
74
66
  - - ~>
75
67
  - !ruby/object:Gem::Version
@@ -77,7 +69,6 @@ dependencies:
77
69
  type: :runtime
78
70
  prerelease: false
79
71
  version_requirements: !ruby/object:Gem::Requirement
80
- none: false
81
72
  requirements:
82
73
  - - ~>
83
74
  - !ruby/object:Gem::Version
@@ -85,7 +76,6 @@ dependencies:
85
76
  - !ruby/object:Gem::Dependency
86
77
  name: json_pure
87
78
  requirement: !ruby/object:Gem::Requirement
88
- none: false
89
79
  requirements:
90
80
  - - ~>
91
81
  - !ruby/object:Gem::Version
@@ -93,7 +83,6 @@ dependencies:
93
83
  type: :runtime
94
84
  prerelease: false
95
85
  version_requirements: !ruby/object:Gem::Requirement
96
- none: false
97
86
  requirements:
98
87
  - - ~>
99
88
  - !ruby/object:Gem::Version
@@ -101,7 +90,6 @@ dependencies:
101
90
  - !ruby/object:Gem::Dependency
102
91
  name: mothership
103
92
  requirement: !ruby/object:Gem::Requirement
104
- none: false
105
93
  requirements:
106
94
  - - ! '>='
107
95
  - !ruby/object:Gem::Version
@@ -112,7 +100,6 @@ dependencies:
112
100
  type: :runtime
113
101
  prerelease: false
114
102
  version_requirements: !ruby/object:Gem::Requirement
115
- none: false
116
103
  requirements:
117
104
  - - ! '>='
118
105
  - !ruby/object:Gem::Version
@@ -123,7 +110,6 @@ dependencies:
123
110
  - !ruby/object:Gem::Dependency
124
111
  name: multi_json
125
112
  requirement: !ruby/object:Gem::Requirement
126
- none: false
127
113
  requirements:
128
114
  - - ~>
129
115
  - !ruby/object:Gem::Version
@@ -131,7 +117,6 @@ dependencies:
131
117
  type: :runtime
132
118
  prerelease: false
133
119
  version_requirements: !ruby/object:Gem::Requirement
134
- none: false
135
120
  requirements:
136
121
  - - ~>
137
122
  - !ruby/object:Gem::Version
@@ -139,7 +124,6 @@ dependencies:
139
124
  - !ruby/object:Gem::Dependency
140
125
  name: rest-client
141
126
  requirement: !ruby/object:Gem::Requirement
142
- none: false
143
127
  requirements:
144
128
  - - ~>
145
129
  - !ruby/object:Gem::Version
@@ -147,7 +131,6 @@ dependencies:
147
131
  type: :runtime
148
132
  prerelease: false
149
133
  version_requirements: !ruby/object:Gem::Requirement
150
- none: false
151
134
  requirements:
152
135
  - - ~>
153
136
  - !ruby/object:Gem::Version
@@ -155,7 +138,6 @@ dependencies:
155
138
  - !ruby/object:Gem::Dependency
156
139
  name: uuidtools
157
140
  requirement: !ruby/object:Gem::Requirement
158
- none: false
159
141
  requirements:
160
142
  - - ~>
161
143
  - !ruby/object:Gem::Version
@@ -163,7 +145,6 @@ dependencies:
163
145
  type: :runtime
164
146
  prerelease: false
165
147
  version_requirements: !ruby/object:Gem::Requirement
166
- none: false
167
148
  requirements:
168
149
  - - ~>
169
150
  - !ruby/object:Gem::Version
@@ -171,7 +152,6 @@ dependencies:
171
152
  - !ruby/object:Gem::Dependency
172
153
  name: anchorman
173
154
  requirement: !ruby/object:Gem::Requirement
174
- none: false
175
155
  requirements:
176
156
  - - ! '>='
177
157
  - !ruby/object:Gem::Version
@@ -179,7 +159,6 @@ dependencies:
179
159
  type: :development
180
160
  prerelease: false
181
161
  version_requirements: !ruby/object:Gem::Requirement
182
- none: false
183
162
  requirements:
184
163
  - - ! '>='
185
164
  - !ruby/object:Gem::Version
@@ -187,7 +166,6 @@ dependencies:
187
166
  - !ruby/object:Gem::Dependency
188
167
  name: blue-shell
189
168
  requirement: !ruby/object:Gem::Requirement
190
- none: false
191
169
  requirements:
192
170
  - - ! '>='
193
171
  - !ruby/object:Gem::Version
@@ -195,7 +173,6 @@ dependencies:
195
173
  type: :development
196
174
  prerelease: false
197
175
  version_requirements: !ruby/object:Gem::Requirement
198
- none: false
199
176
  requirements:
200
177
  - - ! '>='
201
178
  - !ruby/object:Gem::Version
@@ -203,7 +180,6 @@ dependencies:
203
180
  - !ruby/object:Gem::Dependency
204
181
  name: factory_girl
205
182
  requirement: !ruby/object:Gem::Requirement
206
- none: false
207
183
  requirements:
208
184
  - - ! '>='
209
185
  - !ruby/object:Gem::Version
@@ -211,7 +187,6 @@ dependencies:
211
187
  type: :development
212
188
  prerelease: false
213
189
  version_requirements: !ruby/object:Gem::Requirement
214
- none: false
215
190
  requirements:
216
191
  - - ! '>='
217
192
  - !ruby/object:Gem::Version
@@ -219,7 +194,6 @@ dependencies:
219
194
  - !ruby/object:Gem::Dependency
220
195
  name: fakefs
221
196
  requirement: !ruby/object:Gem::Requirement
222
- none: false
223
197
  requirements:
224
198
  - - ~>
225
199
  - !ruby/object:Gem::Version
@@ -227,7 +201,6 @@ dependencies:
227
201
  type: :development
228
202
  prerelease: false
229
203
  version_requirements: !ruby/object:Gem::Requirement
230
- none: false
231
204
  requirements:
232
205
  - - ~>
233
206
  - !ruby/object:Gem::Version
@@ -235,7 +208,6 @@ dependencies:
235
208
  - !ruby/object:Gem::Dependency
236
209
  name: ffaker
237
210
  requirement: !ruby/object:Gem::Requirement
238
- none: false
239
211
  requirements:
240
212
  - - '='
241
213
  - !ruby/object:Gem::Version
@@ -243,7 +215,6 @@ dependencies:
243
215
  type: :development
244
216
  prerelease: false
245
217
  version_requirements: !ruby/object:Gem::Requirement
246
- none: false
247
218
  requirements:
248
219
  - - '='
249
220
  - !ruby/object:Gem::Version
@@ -251,7 +222,6 @@ dependencies:
251
222
  - !ruby/object:Gem::Dependency
252
223
  name: rake
253
224
  requirement: !ruby/object:Gem::Requirement
254
- none: false
255
225
  requirements:
256
226
  - - ~>
257
227
  - !ruby/object:Gem::Version
@@ -259,7 +229,6 @@ dependencies:
259
229
  type: :development
260
230
  prerelease: false
261
231
  version_requirements: !ruby/object:Gem::Requirement
262
- none: false
263
232
  requirements:
264
233
  - - ~>
265
234
  - !ruby/object:Gem::Version
@@ -267,7 +236,6 @@ dependencies:
267
236
  - !ruby/object:Gem::Dependency
268
237
  name: rspec
269
238
  requirement: !ruby/object:Gem::Requirement
270
- none: false
271
239
  requirements:
272
240
  - - ~>
273
241
  - !ruby/object:Gem::Version
@@ -275,7 +243,6 @@ dependencies:
275
243
  type: :development
276
244
  prerelease: false
277
245
  version_requirements: !ruby/object:Gem::Requirement
278
- none: false
279
246
  requirements:
280
247
  - - ~>
281
248
  - !ruby/object:Gem::Version
@@ -283,7 +250,6 @@ dependencies:
283
250
  - !ruby/object:Gem::Dependency
284
251
  name: rspec-instafail
285
252
  requirement: !ruby/object:Gem::Requirement
286
- none: false
287
253
  requirements:
288
254
  - - ~>
289
255
  - !ruby/object:Gem::Version
@@ -291,7 +257,6 @@ dependencies:
291
257
  type: :development
292
258
  prerelease: false
293
259
  version_requirements: !ruby/object:Gem::Requirement
294
- none: false
295
260
  requirements:
296
261
  - - ~>
297
262
  - !ruby/object:Gem::Version
@@ -299,7 +264,6 @@ dependencies:
299
264
  - !ruby/object:Gem::Dependency
300
265
  name: webmock
301
266
  requirement: !ruby/object:Gem::Requirement
302
- none: false
303
267
  requirements:
304
268
  - - ~>
305
269
  - !ruby/object:Gem::Version
@@ -307,7 +271,6 @@ dependencies:
307
271
  type: :development
308
272
  prerelease: false
309
273
  version_requirements: !ruby/object:Gem::Requirement
310
- none: false
311
274
  requirements:
312
275
  - - ~>
313
276
  - !ruby/object:Gem::Version
@@ -322,6 +285,12 @@ extra_rdoc_files: []
322
285
  files:
323
286
  - LICENSE
324
287
  - Rakefile
288
+ - lib/admin/curl.rb
289
+ - lib/admin/guid.rb
290
+ - lib/admin/plugin.rb
291
+ - lib/admin/README.md
292
+ - lib/admin/service_auth_token.rb
293
+ - lib/admin/set_quota.rb
325
294
  - lib/cf/cli/app/app.rb
326
295
  - lib/cf/cli/app/apps.rb
327
296
  - lib/cf/cli/app/base.rb
@@ -419,6 +388,9 @@ files:
419
388
  - lib/tunnel/plugin.rb
420
389
  - lib/tunnel/README.md
421
390
  - lib/tunnel/tunnel.rb
391
+ - spec/admin/curl_spec.rb
392
+ - spec/admin/guid_spec.rb
393
+ - spec/admin/set_quota_spec.rb
422
394
  - spec/assets/hello-sinatra/config.ru
423
395
  - spec/assets/hello-sinatra/fat-cat-makes-app-larger.png
424
396
  - spec/assets/hello-sinatra/Gemfile
@@ -522,6 +494,7 @@ files:
522
494
  - spec/factories/cfoundry/v2/clients_factory.rb
523
495
  - spec/factories/cfoundry/v2/domains_factory.rb
524
496
  - spec/factories/cfoundry/v2/organizations_factory.rb
497
+ - spec/factories/cfoundry/v2/quota_definitions.rb
525
498
  - spec/factories/cfoundry/v2/routes_factory.rb
526
499
  - spec/factories/cfoundry/v2/service_bindings_factory.rb
527
500
  - spec/factories/cfoundry/v2/service_instances_factory.rb
@@ -558,29 +531,31 @@ files:
558
531
  - bin/cf
559
532
  homepage: http://github.com/cloudfoundry/cf
560
533
  licenses: []
534
+ metadata: {}
561
535
  post_install_message:
562
536
  rdoc_options: []
563
537
  require_paths:
564
538
  - lib
565
539
  required_ruby_version: !ruby/object:Gem::Requirement
566
- none: false
567
540
  requirements:
568
541
  - - ! '>='
569
542
  - !ruby/object:Gem::Version
570
543
  version: '0'
571
544
  required_rubygems_version: !ruby/object:Gem::Requirement
572
- none: false
573
545
  requirements:
574
546
  - - ! '>'
575
547
  - !ruby/object:Gem::Version
576
548
  version: 1.3.1
577
549
  requirements: []
578
550
  rubyforge_project: cf
579
- rubygems_version: 1.8.24
551
+ rubygems_version: 2.0.3
580
552
  signing_key:
581
- specification_version: 3
553
+ specification_version: 4
582
554
  summary: Friendly command-line interface for Cloud Foundry.
583
555
  test_files:
556
+ - spec/admin/curl_spec.rb
557
+ - spec/admin/guid_spec.rb
558
+ - spec/admin/set_quota_spec.rb
584
559
  - spec/assets/hello-sinatra/config.ru
585
560
  - spec/assets/hello-sinatra/fat-cat-makes-app-larger.png
586
561
  - spec/assets/hello-sinatra/Gemfile
@@ -684,6 +659,7 @@ test_files:
684
659
  - spec/factories/cfoundry/v2/clients_factory.rb
685
660
  - spec/factories/cfoundry/v2/domains_factory.rb
686
661
  - spec/factories/cfoundry/v2/organizations_factory.rb
662
+ - spec/factories/cfoundry/v2/quota_definitions.rb
687
663
  - spec/factories/cfoundry/v2/routes_factory.rb
688
664
  - spec/factories/cfoundry/v2/service_bindings_factory.rb
689
665
  - spec/factories/cfoundry/v2/service_instances_factory.rb