cf 4.2.8 → 4.2.9.rc2
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.
- checksums.yaml +7 -0
- data/lib/cf/cli/service/create.rb +68 -20
- data/lib/cf/cli/service/delete.rb +1 -1
- data/lib/cf/cli/service/services.rb +1 -1
- data/lib/cf/version.rb +1 -1
- data/lib/tasks/gem_release.rake +1 -1
- data/spec/assets/env/Gemfile +4 -0
- data/spec/assets/env/Gemfile.lock +17 -0
- data/spec/assets/env/env_test.rb +58 -0
- data/spec/cf/cli/service/create_spec.rb +31 -0
- data/spec/cf/cli/service/services_spec.rb +62 -33
- data/spec/features/services_spec.rb +97 -0
- data/spec/support/features_helper.rb +36 -3
- metadata +15 -69
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 658bb15baee12d49dedab15c3e842db99f8bdc81
|
4
|
+
data.tar.gz: 7c6bc93e7f5c8c381abc3cfee2736a53ea603f5f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7b99f6e8a7dcdb928ab74a390cb8011ce4b16ad58b215720e549c45c6d410297109d8ac250ece4828ebbcda73728bf7b3cd0240f65bc23ef0aac7869e03f179c
|
7
|
+
data.tar.gz: b9d1b5a8a9425fb8c7936fe51f5ce477a9f2ec100059b28217812f071a2e379abf21dc5138beea43183e77801b782ee72ffbc2d85106274355a3ea539a12bdf3
|
@@ -1,6 +1,16 @@
|
|
1
1
|
require "cf/cli/service/base"
|
2
2
|
|
3
3
|
module CF::Service
|
4
|
+
USER_PROVIDED_OFFERING = "user-provided" # I'd rather move this to CFoundry
|
5
|
+
|
6
|
+
class UPDummy
|
7
|
+
def label
|
8
|
+
"user-provided"
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :version, :provider
|
12
|
+
end
|
13
|
+
|
4
14
|
class Create < Base
|
5
15
|
offerings_from_label = proc { |label, offerings|
|
6
16
|
offerings.select { |s| s.label == label }
|
@@ -46,6 +56,8 @@ module CF::Service
|
|
46
56
|
end
|
47
57
|
finalize
|
48
58
|
|
59
|
+
offerings << UPDummy.new
|
60
|
+
|
49
61
|
selected_offerings = offerings.any? ? Array(input[:offering, offerings.sort_by(&:label)]) : []
|
50
62
|
finalize
|
51
63
|
|
@@ -55,48 +67,84 @@ module CF::Service
|
|
55
67
|
|
56
68
|
offering = selected_offerings.first
|
57
69
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
70
|
+
if offering.label == CF::Service::USER_PROVIDED_OFFERING
|
71
|
+
service_instance = client.user_provided_service_instance
|
72
|
+
service_instance.name = input[:name, offering]
|
73
|
+
finalize
|
74
|
+
|
75
|
+
service_instance.credentials = ask_credentials # input[:credentials]
|
76
|
+
else
|
77
|
+
service_instance = client.service_instance
|
78
|
+
service_instance.name = input[:name, offering]
|
79
|
+
finalize
|
80
|
+
|
81
|
+
plan = input[:plan, offering.service_plans]
|
82
|
+
finalize
|
83
|
+
service_instance.service_plan = if plan.is_a?(String)
|
84
|
+
offering.service_plans.find { |p| p.name.casecmp(plan) == 0 }
|
85
|
+
else
|
86
|
+
plan
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
service_instance.space = client.current_space
|
91
|
+
|
92
|
+
with_progress("Creating service #{c(service_instance.name, :name)}") do
|
93
|
+
service_instance.create!
|
72
94
|
end
|
73
95
|
|
74
96
|
app = input[:app]
|
75
97
|
finalize
|
76
98
|
|
77
99
|
if app
|
78
|
-
invoke :bind_service, :service =>
|
100
|
+
invoke :bind_service, :service => service_instance, :app => app
|
79
101
|
end
|
80
|
-
|
102
|
+
service_instance
|
81
103
|
end
|
82
104
|
|
83
105
|
private
|
84
106
|
|
107
|
+
def ask_credentials
|
108
|
+
credentials = {}
|
109
|
+
line("What credentials parameters should applications use to connect to this service instance? (e.g. key: uri, value: mysql://username:password@hostname:port/name)")
|
110
|
+
|
111
|
+
while keys = ask("Keys").split(/\s*,\s*/).map(&:strip)
|
112
|
+
if bad_key = keys.detect { |key| key !~ /^[-\w]+$/ }
|
113
|
+
line("'#{bad_key}' is not a valid key")
|
114
|
+
else
|
115
|
+
break
|
116
|
+
end
|
117
|
+
end
|
118
|
+
finalize
|
119
|
+
keys.each do |key|
|
120
|
+
value = ask(key)
|
121
|
+
finalize
|
122
|
+
credentials[key] = value
|
123
|
+
end
|
124
|
+
|
125
|
+
credentials
|
126
|
+
end
|
127
|
+
|
85
128
|
def ask_offering(offerings)
|
86
129
|
[ask("What kind?", :choices => offerings.sort_by(&:label),
|
87
|
-
:display => proc
|
130
|
+
:display => proc do |s|
|
88
131
|
str = "#{c(s.label, :name)} #{s.version}"
|
89
132
|
if s.provider != "core"
|
90
133
|
str << ", via #{s.provider}"
|
91
134
|
end
|
92
135
|
str
|
93
|
-
|
136
|
+
end,
|
94
137
|
:complete => proc { |s| "#{s.label} #{s.version}" })]
|
95
138
|
end
|
96
139
|
|
97
140
|
def ask_name(offering)
|
98
|
-
|
99
|
-
|
141
|
+
default = nil
|
142
|
+
unless offering == CF::Service::USER_PROVIDED_OFFERING
|
143
|
+
random = sprintf("%x", rand(1000000))
|
144
|
+
default = "#{offering.label}-#{random}"
|
145
|
+
end
|
146
|
+
|
147
|
+
ask "Name?", :default => default
|
100
148
|
end
|
101
149
|
|
102
150
|
def ask_plan(plans)
|
@@ -4,7 +4,7 @@ module CF::Service
|
|
4
4
|
class Delete < Base
|
5
5
|
desc "Delete a service"
|
6
6
|
group :services, :manage
|
7
|
-
input :service, :desc => "Service to
|
7
|
+
input :service, :desc => "Service to delete", :argument => :optional,
|
8
8
|
:from_given => by_name(:service_instance, :service)
|
9
9
|
input :unbind, :desc => "Unbind from applications before deleting?",
|
10
10
|
:type => :boolean, :default => proc { force? || interact }
|
data/lib/cf/version.rb
CHANGED
data/lib/tasks/gem_release.rake
CHANGED
@@ -20,7 +20,7 @@ namespace :gem do
|
|
20
20
|
def generate_release_notes(old_version)
|
21
21
|
print_with_purpose "Generating release notes..."
|
22
22
|
file_name = "release_#{gem_version}"
|
23
|
-
sh!("anchorman notes --name=#{file_name} --from=v#{old_version}")
|
23
|
+
#sh!("anchorman notes --name=#{file_name} --from=v#{old_version}")
|
24
24
|
sh!("git add release_notes")
|
25
25
|
end
|
26
26
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'sinatra'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
$stdout.sync = true
|
7
|
+
|
8
|
+
def dump_env(fmt)
|
9
|
+
if fmt == 'html' || fmt == nil
|
10
|
+
res = ''
|
11
|
+
ENV.each do |k, v|
|
12
|
+
res << "#{k}: #{v}<br/>"
|
13
|
+
end
|
14
|
+
res
|
15
|
+
elsif fmt == 'json'
|
16
|
+
res = {}
|
17
|
+
ENV.each do |k, v|
|
18
|
+
res[k] = v
|
19
|
+
end
|
20
|
+
puts res
|
21
|
+
res.to_json
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
get '/' do
|
26
|
+
dump_env('html')
|
27
|
+
end
|
28
|
+
|
29
|
+
get '/healthcheck' do
|
30
|
+
"OK"
|
31
|
+
end
|
32
|
+
|
33
|
+
get '/env' do
|
34
|
+
dump_env('json')
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
get '/services' do
|
39
|
+
app_instance = JSON.parse(ENV['VCAP_APPLICATION'])
|
40
|
+
services = JSON.parse(ENV['VCAP_SERVICES'])
|
41
|
+
|
42
|
+
valid_services = false
|
43
|
+
service_list = []
|
44
|
+
services.each do |k, v|
|
45
|
+
v.each do |i|
|
46
|
+
s = {}
|
47
|
+
s['vendor'] = k.split('-')[0]
|
48
|
+
s['name'] = i['name']
|
49
|
+
service_list << s
|
50
|
+
valid_services = true
|
51
|
+
end
|
52
|
+
end
|
53
|
+
response = "{\"status\":\"ok\", \"services\": #{service_list.to_json}}" if valid_services
|
54
|
+
response = "{\"status\":\"fail\", \"services\": []}" if !valid_services
|
55
|
+
|
56
|
+
puts "my response: #{response}"
|
57
|
+
response
|
58
|
+
end
|
@@ -94,6 +94,37 @@ module CF
|
|
94
94
|
capture_output { command }
|
95
95
|
end
|
96
96
|
end
|
97
|
+
|
98
|
+
describe "when selecting the user-provided service" do
|
99
|
+
let(:services) { [build(:service), build(:service)] }
|
100
|
+
let(:user_provided_service) { build(:service, label: "user-provided")}
|
101
|
+
|
102
|
+
before do
|
103
|
+
client.stub(:services).and_return(services)
|
104
|
+
end
|
105
|
+
|
106
|
+
it "asks for an instance name and credentials" do
|
107
|
+
should_ask("What kind?", hash_including(choices: include(has_label("user-provided")))) { user_provided_service }
|
108
|
+
should_ask("Name?", anything) { "user-provided-service-name-1" }
|
109
|
+
|
110
|
+
should_print("What credentials parameters should applications use to connect to this service instance? (e.g. key: uri, value: mysql://username:password@hostname:port/name)")
|
111
|
+
should_ask("Keys") { "host, port, user name" }
|
112
|
+
should_print("'user name' is not a valid key")
|
113
|
+
should_ask("Keys") { "host, port" }
|
114
|
+
should_ask("host") { "example.com" }
|
115
|
+
should_ask("port") { "8080" }
|
116
|
+
mock_with_progress("Creating service user-provided-service-name-1")
|
117
|
+
|
118
|
+
instance = client.user_provided_service_instance
|
119
|
+
client.should_receive(:user_provided_service_instance).and_return(instance)
|
120
|
+
instance.should_receive(:create!)
|
121
|
+
|
122
|
+
capture_output { command }
|
123
|
+
|
124
|
+
instance.credentials['host'].should == 'example.com'
|
125
|
+
instance.credentials['port'].should == '8080'
|
126
|
+
end
|
127
|
+
end
|
97
128
|
end
|
98
129
|
end
|
99
130
|
end
|
@@ -48,23 +48,28 @@ module CF
|
|
48
48
|
let(:current_space) { build(:space, :name => "the space") }
|
49
49
|
|
50
50
|
subject do
|
51
|
-
capture_output {
|
51
|
+
capture_output { CF::CLI.new.invoke(:services, inputs, given, global) }
|
52
52
|
end
|
53
53
|
|
54
54
|
before do
|
55
|
-
|
55
|
+
stub_client
|
56
56
|
client.stub(:service_bindings).and_return([service_binding])
|
57
57
|
end
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
59
|
+
context "when the user is targeted to a space" do
|
60
|
+
before do
|
61
|
+
stub_precondition
|
62
|
+
end
|
63
|
+
|
64
|
+
it "produces a table of services" do
|
65
|
+
subject
|
66
|
+
stdout.rewind
|
67
|
+
output = stdout.read
|
63
68
|
|
64
|
-
|
69
|
+
expect(output).to match /Getting services in the space.*OK/
|
65
70
|
|
66
|
-
|
67
|
-
|
71
|
+
expect(output).to match /name\s+service\s+provider\s+version\s+plan\s+bound apps/
|
72
|
+
expect(output).to match /service-instance-.+?\s+ # name
|
68
73
|
service-.*?\s+ # service
|
69
74
|
provider.*?\s+ # provider
|
70
75
|
service_version\s+ # version
|
@@ -72,45 +77,69 @@ module CF
|
|
72
77
|
app-name-\d+\s+ # bound apps
|
73
78
|
/x
|
74
79
|
|
75
|
-
|
80
|
+
end
|
76
81
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
it 'still produces a table of service' do
|
81
|
-
subject
|
82
|
-
stdout.rewind
|
83
|
-
output = stdout.read
|
82
|
+
context "when one of the services does not have a service plan" do
|
83
|
+
let(:service_instances) { [service1, service2]}
|
84
|
+
let(:service2) { build(:service_instance, :service_plan => nil, :service_bindings => [service_binding]) }
|
84
85
|
|
85
|
-
|
86
|
+
it 'still produces a table of service' do
|
87
|
+
subject
|
88
|
+
stdout.rewind
|
89
|
+
output = stdout.read
|
86
90
|
|
87
|
-
|
91
|
+
expect(output).to match /Getting services in the space.*OK/
|
88
92
|
|
89
|
-
|
93
|
+
expect(output).to match /name\s+service\s+provider\s+version\s+plan\s+bound apps/
|
94
|
+
|
95
|
+
expect(output).to match /service-instance-.+?\s+ # name
|
90
96
|
service-.*?\s+ # service
|
91
97
|
provider.*?\s+ # provider
|
92
98
|
service_version\s+ # version
|
93
99
|
service-plan-.*?\s+ # plan
|
94
|
-
app-name-\d+\s+
|
100
|
+
app-name-\d+\s+ # bound apps
|
95
101
|
/x
|
96
102
|
|
97
|
-
|
98
|
-
|
99
|
-
none\s+
|
100
|
-
none\s+
|
101
|
-
none\s+
|
102
|
-
app-name-\d+\s+
|
103
|
+
expect(output).to match /service-instance-.+?\s+ # name
|
104
|
+
user-provided\s+ # service
|
105
|
+
none\s+ # provider
|
106
|
+
none\s+ # version
|
107
|
+
none\s+ # plan
|
108
|
+
app-name-\d+\s+ # bound apps
|
103
109
|
/x
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
context 'when given --marketplace argument' do
|
114
|
+
it 'lists services on the target' do
|
115
|
+
client.stub(:services => Array.new(3) { build(:service) })
|
116
|
+
cf %W[services --marketplace]
|
117
|
+
expect(output).to say("Getting services... OK")
|
118
|
+
expect(output).to say(/service\s+version\s+provider\s+plans\s+description/)
|
119
|
+
end
|
104
120
|
end
|
105
121
|
end
|
106
122
|
|
123
|
+
context "when the user is not targeted to a space" do
|
124
|
+
before do
|
125
|
+
service_command.stub(:check_logged_in).and_return(true)
|
126
|
+
client.stub(:current_organization).and_return(true)
|
127
|
+
end
|
128
|
+
let(:service_command) { CF::Service::Services.new(nil, {}) }
|
129
|
+
let(:current_space) { nil }
|
130
|
+
|
131
|
+
subject do
|
132
|
+
capture_output { service_command.execute(:services, inputs, global) }
|
133
|
+
|
134
|
+
#capture_output { CF::CLI.new.invoke(:services, inputs, given, global) }
|
135
|
+
end
|
136
|
+
|
137
|
+
it "returns an error" do
|
138
|
+
subject
|
139
|
+
stdout.rewind
|
140
|
+
output = stderr.read
|
107
141
|
|
108
|
-
|
109
|
-
it 'lists services on the target' do
|
110
|
-
client.stub(:services => Array.new(3) { build(:service) })
|
111
|
-
cf %W[services --marketplace]
|
112
|
-
expect(output).to say("Getting services... OK")
|
113
|
-
expect(output).to say(/service\s+version\s+provider\s+plans\s+description/)
|
142
|
+
expect(output.to_s).to match "Please select a space with 'cf target --space SPACE_NAME'"
|
114
143
|
end
|
115
144
|
end
|
116
145
|
end
|
@@ -6,6 +6,25 @@ if ENV['CF_V2_RUN_INTEGRATION']
|
|
6
6
|
login
|
7
7
|
end
|
8
8
|
|
9
|
+
describe "listing services" do
|
10
|
+
let(:service1) { "some-provided-instance-#{Time.now.to_i}" }
|
11
|
+
let(:service2) { "cf-managed-instance-#{Time.now.to_i}" }
|
12
|
+
|
13
|
+
it "shows all service instances in the space" do
|
14
|
+
create_service_instance("user-provided", service1, credentials: { hostname: "myservice.com"} )
|
15
|
+
create_service_instance("dummy-dev", service2, plan: "small")
|
16
|
+
|
17
|
+
BlueShell::Runner.run("#{cf_bin} services") do |runner|
|
18
|
+
expect(runner).to say /#{service1}\s+user-provided\s+none\s+none\s+none\s+.*/
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
after do
|
23
|
+
delete_service(service1)
|
24
|
+
delete_service(service2)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
9
28
|
describe "creating a service" do
|
10
29
|
describe "when the user leaves the line blank for a plan" do
|
11
30
|
it "re-prompts for the plan" do
|
@@ -20,6 +39,84 @@ if ENV['CF_V2_RUN_INTEGRATION']
|
|
20
39
|
end
|
21
40
|
end
|
22
41
|
end
|
42
|
+
|
43
|
+
describe "when the service is a user-provided instance" do
|
44
|
+
let(:service_name) { "my-private-db-#{Random.rand(1000) + 1000}"}
|
45
|
+
|
46
|
+
it "can create a service instance" do
|
47
|
+
BlueShell::Runner.run("#{cf_bin} create-service") do |runner|
|
48
|
+
expect(runner).to say "What kind?"
|
49
|
+
runner.send_keys "user-provided"
|
50
|
+
|
51
|
+
expect(runner).to say "Name?"
|
52
|
+
runner.send_keys service_name
|
53
|
+
|
54
|
+
expect(runner).to say "What credentials parameters should applications use to connect to this service instance? (e.g. key: uri, value: mysql://username:password@hostname:port/name)
|
55
|
+
Keys"
|
56
|
+
runner.send_keys "hostname"
|
57
|
+
expect(runner).to say "hostname"
|
58
|
+
runner.send_keys "myserviceinstance.com"
|
59
|
+
|
60
|
+
expect(runner).to say /Creating service #{service_name}.+ OK/
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
after do
|
65
|
+
delete_service(service_name)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "binding to a service" do
|
71
|
+
let(:app_folder) { "env" }
|
72
|
+
let(:app_name) { "services_env_test_app-#{Time.now.to_i}" }
|
73
|
+
|
74
|
+
let(:service_name) { "some-provided-instance-#{Time.now.to_i}" }
|
75
|
+
|
76
|
+
it "can bind and unbind user-provided services to apps" do
|
77
|
+
push_app(app_folder, app_name, start_command: "'bundle exec ruby env_test.rb -p $PORT'", timeout: 90)
|
78
|
+
create_service_instance("user-provided", service_name, credentials: { hostname: "myservice.com"} )
|
79
|
+
|
80
|
+
BlueShell::Runner.run("#{cf_bin} bind-service") do |runner|
|
81
|
+
expect(runner).to say "Which application?>"
|
82
|
+
runner.send_keys app_name
|
83
|
+
|
84
|
+
expect(runner).to say "Which service?>"
|
85
|
+
runner.send_keys service_name
|
86
|
+
|
87
|
+
expect(runner).to say "Binding #{service_name} to #{app_name}... OK"
|
88
|
+
end
|
89
|
+
|
90
|
+
BlueShell::Runner.run("#{cf_bin} unbind-service") do |runner|
|
91
|
+
expect(runner).to say "Which application?"
|
92
|
+
runner.send_keys app_name
|
93
|
+
|
94
|
+
expect(runner).to say "Which service?>"
|
95
|
+
runner.send_keys service_name
|
96
|
+
|
97
|
+
expect(runner).to say "Unbinding #{service_name} from #{app_name}... OK"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
after do
|
102
|
+
delete_app(app_name)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def delete_service(service_name)
|
107
|
+
BlueShell::Runner.run("#{cf_bin} delete-service --service #{service_name} --force") do |runner|
|
108
|
+
expect(runner).to say "Deleting #{service_name}... OK"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def delete_app(app_name, routes=true)
|
113
|
+
delete_cmd = "#{cf_bin} delete #{app_name}"
|
114
|
+
delete_cmd + " --routes" if routes
|
115
|
+
BlueShell::Runner.run(delete_cmd) do |runner|
|
116
|
+
expect(runner).to say "Really delete #{app_name}?"
|
117
|
+
runner.send_keys "y"
|
118
|
+
expect(runner).to say "Deleting #{app_name}... OK"
|
119
|
+
end
|
23
120
|
end
|
24
121
|
end
|
25
122
|
end
|
@@ -28,9 +28,40 @@ module FeaturesHelper
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
def
|
31
|
+
def create_service_instance(service_name, instance_name, opts = {})
|
32
|
+
plan_name = opts[:plan]
|
33
|
+
credentials = opts[:credentials]
|
34
|
+
|
35
|
+
BlueShell::Runner.run("#{cf_bin} create-service") do |runner|
|
36
|
+
expect(runner).to say "What kind?>"
|
37
|
+
runner.send_keys service_name
|
38
|
+
|
39
|
+
expect(runner).to say "Name?>"
|
40
|
+
runner.send_keys instance_name
|
41
|
+
|
42
|
+
if service_name == "user-provided"
|
43
|
+
expect(runner).to say "Keys"
|
44
|
+
runner.send_keys credentials.keys.join(", ")
|
45
|
+
|
46
|
+
credentials.each do |key, value|
|
47
|
+
expect(runner).to say key.to_s
|
48
|
+
runner.send_keys value.to_s
|
49
|
+
end
|
50
|
+
else
|
51
|
+
expect(runner).to say "Which plan?"
|
52
|
+
runner.send_keys plan_name
|
53
|
+
end
|
54
|
+
|
55
|
+
expect(runner).to say "Creating service #{instance_name}... OK"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def push_app(app_folder, deployed_app_name, opts = {})
|
60
|
+
push_cmd = "#{cf_bin} push --no-manifest"
|
61
|
+
push_cmd += " --command #{opts[:start_command]}" if opts[:start_command]
|
62
|
+
|
32
63
|
Dir.chdir("#{SPEC_ROOT}/assets/#{app_folder}") do
|
33
|
-
BlueShell::Runner.run(
|
64
|
+
BlueShell::Runner.run(push_cmd) do |runner|
|
34
65
|
expect(runner).to say "Name>"
|
35
66
|
runner.send_keys deployed_app_name
|
36
67
|
|
@@ -59,7 +90,9 @@ module FeaturesHelper
|
|
59
90
|
runner.send_return
|
60
91
|
end
|
61
92
|
|
62
|
-
runner.
|
93
|
+
expect(runner).to say "Push successful!"
|
94
|
+
|
95
|
+
runner.wait_for_exit opts[:timeout] || 30
|
63
96
|
end
|
64
97
|
end
|
65
98
|
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.2.
|
5
|
-
prerelease:
|
4
|
+
version: 4.2.9.rc2
|
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-07-
|
12
|
+
date: 2013-07-30 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,23 +42,20 @@ 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
|
54
|
-
version: 4.0.
|
48
|
+
version: 4.0.4.rc1
|
55
49
|
type: :runtime
|
56
50
|
prerelease: false
|
57
51
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
52
|
requirements:
|
60
53
|
- - ~>
|
61
54
|
- !ruby/object:Gem::Version
|
62
|
-
version: 4.0.
|
55
|
+
version: 4.0.4.rc1
|
63
56
|
- !ruby/object:Gem::Dependency
|
64
57
|
name: interact
|
65
58
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
59
|
requirements:
|
68
60
|
- - ~>
|
69
61
|
- !ruby/object:Gem::Version
|
@@ -71,7 +63,6 @@ dependencies:
|
|
71
63
|
type: :runtime
|
72
64
|
prerelease: false
|
73
65
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
66
|
requirements:
|
76
67
|
- - ~>
|
77
68
|
- !ruby/object:Gem::Version
|
@@ -79,7 +70,6 @@ dependencies:
|
|
79
70
|
- !ruby/object:Gem::Dependency
|
80
71
|
name: json_pure
|
81
72
|
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
73
|
requirements:
|
84
74
|
- - ~>
|
85
75
|
- !ruby/object:Gem::Version
|
@@ -87,7 +77,6 @@ dependencies:
|
|
87
77
|
type: :runtime
|
88
78
|
prerelease: false
|
89
79
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
80
|
requirements:
|
92
81
|
- - ~>
|
93
82
|
- !ruby/object:Gem::Version
|
@@ -95,7 +84,6 @@ dependencies:
|
|
95
84
|
- !ruby/object:Gem::Dependency
|
96
85
|
name: mothership
|
97
86
|
requirement: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
87
|
requirements:
|
100
88
|
- - ! '>='
|
101
89
|
- !ruby/object:Gem::Version
|
@@ -106,7 +94,6 @@ dependencies:
|
|
106
94
|
type: :runtime
|
107
95
|
prerelease: false
|
108
96
|
version_requirements: !ruby/object:Gem::Requirement
|
109
|
-
none: false
|
110
97
|
requirements:
|
111
98
|
- - ! '>='
|
112
99
|
- !ruby/object:Gem::Version
|
@@ -117,7 +104,6 @@ dependencies:
|
|
117
104
|
- !ruby/object:Gem::Dependency
|
118
105
|
name: multi_json
|
119
106
|
requirement: !ruby/object:Gem::Requirement
|
120
|
-
none: false
|
121
107
|
requirements:
|
122
108
|
- - ~>
|
123
109
|
- !ruby/object:Gem::Version
|
@@ -125,7 +111,6 @@ dependencies:
|
|
125
111
|
type: :runtime
|
126
112
|
prerelease: false
|
127
113
|
version_requirements: !ruby/object:Gem::Requirement
|
128
|
-
none: false
|
129
114
|
requirements:
|
130
115
|
- - ~>
|
131
116
|
- !ruby/object:Gem::Version
|
@@ -133,7 +118,6 @@ dependencies:
|
|
133
118
|
- !ruby/object:Gem::Dependency
|
134
119
|
name: rest-client
|
135
120
|
requirement: !ruby/object:Gem::Requirement
|
136
|
-
none: false
|
137
121
|
requirements:
|
138
122
|
- - ~>
|
139
123
|
- !ruby/object:Gem::Version
|
@@ -141,7 +125,6 @@ dependencies:
|
|
141
125
|
type: :runtime
|
142
126
|
prerelease: false
|
143
127
|
version_requirements: !ruby/object:Gem::Requirement
|
144
|
-
none: false
|
145
128
|
requirements:
|
146
129
|
- - ~>
|
147
130
|
- !ruby/object:Gem::Version
|
@@ -149,7 +132,6 @@ dependencies:
|
|
149
132
|
- !ruby/object:Gem::Dependency
|
150
133
|
name: uuidtools
|
151
134
|
requirement: !ruby/object:Gem::Requirement
|
152
|
-
none: false
|
153
135
|
requirements:
|
154
136
|
- - ~>
|
155
137
|
- !ruby/object:Gem::Version
|
@@ -157,31 +139,13 @@ dependencies:
|
|
157
139
|
type: :runtime
|
158
140
|
prerelease: false
|
159
141
|
version_requirements: !ruby/object:Gem::Requirement
|
160
|
-
none: false
|
161
142
|
requirements:
|
162
143
|
- - ~>
|
163
144
|
- !ruby/object:Gem::Version
|
164
145
|
version: '2.1'
|
165
|
-
- !ruby/object:Gem::Dependency
|
166
|
-
name: anchorman
|
167
|
-
requirement: !ruby/object:Gem::Requirement
|
168
|
-
none: false
|
169
|
-
requirements:
|
170
|
-
- - ! '>='
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
version: '0'
|
173
|
-
type: :development
|
174
|
-
prerelease: false
|
175
|
-
version_requirements: !ruby/object:Gem::Requirement
|
176
|
-
none: false
|
177
|
-
requirements:
|
178
|
-
- - ! '>='
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0'
|
181
146
|
- !ruby/object:Gem::Dependency
|
182
147
|
name: blue-shell
|
183
148
|
requirement: !ruby/object:Gem::Requirement
|
184
|
-
none: false
|
185
149
|
requirements:
|
186
150
|
- - ! '>='
|
187
151
|
- !ruby/object:Gem::Version
|
@@ -189,7 +153,6 @@ dependencies:
|
|
189
153
|
type: :development
|
190
154
|
prerelease: false
|
191
155
|
version_requirements: !ruby/object:Gem::Requirement
|
192
|
-
none: false
|
193
156
|
requirements:
|
194
157
|
- - ! '>='
|
195
158
|
- !ruby/object:Gem::Version
|
@@ -197,7 +160,6 @@ dependencies:
|
|
197
160
|
- !ruby/object:Gem::Dependency
|
198
161
|
name: factory_girl
|
199
162
|
requirement: !ruby/object:Gem::Requirement
|
200
|
-
none: false
|
201
163
|
requirements:
|
202
164
|
- - ! '>='
|
203
165
|
- !ruby/object:Gem::Version
|
@@ -205,7 +167,6 @@ dependencies:
|
|
205
167
|
type: :development
|
206
168
|
prerelease: false
|
207
169
|
version_requirements: !ruby/object:Gem::Requirement
|
208
|
-
none: false
|
209
170
|
requirements:
|
210
171
|
- - ! '>='
|
211
172
|
- !ruby/object:Gem::Version
|
@@ -213,7 +174,6 @@ dependencies:
|
|
213
174
|
- !ruby/object:Gem::Dependency
|
214
175
|
name: fakefs
|
215
176
|
requirement: !ruby/object:Gem::Requirement
|
216
|
-
none: false
|
217
177
|
requirements:
|
218
178
|
- - ~>
|
219
179
|
- !ruby/object:Gem::Version
|
@@ -221,7 +181,6 @@ dependencies:
|
|
221
181
|
type: :development
|
222
182
|
prerelease: false
|
223
183
|
version_requirements: !ruby/object:Gem::Requirement
|
224
|
-
none: false
|
225
184
|
requirements:
|
226
185
|
- - ~>
|
227
186
|
- !ruby/object:Gem::Version
|
@@ -229,7 +188,6 @@ dependencies:
|
|
229
188
|
- !ruby/object:Gem::Dependency
|
230
189
|
name: ffaker
|
231
190
|
requirement: !ruby/object:Gem::Requirement
|
232
|
-
none: false
|
233
191
|
requirements:
|
234
192
|
- - '='
|
235
193
|
- !ruby/object:Gem::Version
|
@@ -237,7 +195,6 @@ dependencies:
|
|
237
195
|
type: :development
|
238
196
|
prerelease: false
|
239
197
|
version_requirements: !ruby/object:Gem::Requirement
|
240
|
-
none: false
|
241
198
|
requirements:
|
242
199
|
- - '='
|
243
200
|
- !ruby/object:Gem::Version
|
@@ -245,7 +202,6 @@ dependencies:
|
|
245
202
|
- !ruby/object:Gem::Dependency
|
246
203
|
name: gem-release
|
247
204
|
requirement: !ruby/object:Gem::Requirement
|
248
|
-
none: false
|
249
205
|
requirements:
|
250
206
|
- - ! '>='
|
251
207
|
- !ruby/object:Gem::Version
|
@@ -253,7 +209,6 @@ dependencies:
|
|
253
209
|
type: :development
|
254
210
|
prerelease: false
|
255
211
|
version_requirements: !ruby/object:Gem::Requirement
|
256
|
-
none: false
|
257
212
|
requirements:
|
258
213
|
- - ! '>='
|
259
214
|
- !ruby/object:Gem::Version
|
@@ -261,7 +216,6 @@ dependencies:
|
|
261
216
|
- !ruby/object:Gem::Dependency
|
262
217
|
name: rake
|
263
218
|
requirement: !ruby/object:Gem::Requirement
|
264
|
-
none: false
|
265
219
|
requirements:
|
266
220
|
- - ~>
|
267
221
|
- !ruby/object:Gem::Version
|
@@ -269,7 +223,6 @@ dependencies:
|
|
269
223
|
type: :development
|
270
224
|
prerelease: false
|
271
225
|
version_requirements: !ruby/object:Gem::Requirement
|
272
|
-
none: false
|
273
226
|
requirements:
|
274
227
|
- - ~>
|
275
228
|
- !ruby/object:Gem::Version
|
@@ -277,7 +230,6 @@ dependencies:
|
|
277
230
|
- !ruby/object:Gem::Dependency
|
278
231
|
name: rspec
|
279
232
|
requirement: !ruby/object:Gem::Requirement
|
280
|
-
none: false
|
281
233
|
requirements:
|
282
234
|
- - ~>
|
283
235
|
- !ruby/object:Gem::Version
|
@@ -285,7 +237,6 @@ dependencies:
|
|
285
237
|
type: :development
|
286
238
|
prerelease: false
|
287
239
|
version_requirements: !ruby/object:Gem::Requirement
|
288
|
-
none: false
|
289
240
|
requirements:
|
290
241
|
- - ~>
|
291
242
|
- !ruby/object:Gem::Version
|
@@ -293,7 +244,6 @@ dependencies:
|
|
293
244
|
- !ruby/object:Gem::Dependency
|
294
245
|
name: rspec-instafail
|
295
246
|
requirement: !ruby/object:Gem::Requirement
|
296
|
-
none: false
|
297
247
|
requirements:
|
298
248
|
- - ~>
|
299
249
|
- !ruby/object:Gem::Version
|
@@ -301,7 +251,6 @@ dependencies:
|
|
301
251
|
type: :development
|
302
252
|
prerelease: false
|
303
253
|
version_requirements: !ruby/object:Gem::Requirement
|
304
|
-
none: false
|
305
254
|
requirements:
|
306
255
|
- - ~>
|
307
256
|
- !ruby/object:Gem::Version
|
@@ -309,7 +258,6 @@ dependencies:
|
|
309
258
|
- !ruby/object:Gem::Dependency
|
310
259
|
name: webmock
|
311
260
|
requirement: !ruby/object:Gem::Requirement
|
312
|
-
none: false
|
313
261
|
requirements:
|
314
262
|
- - ~>
|
315
263
|
- !ruby/object:Gem::Version
|
@@ -317,7 +265,6 @@ dependencies:
|
|
317
265
|
type: :development
|
318
266
|
prerelease: false
|
319
267
|
version_requirements: !ruby/object:Gem::Requirement
|
320
|
-
none: false
|
321
268
|
requirements:
|
322
269
|
- - ~>
|
323
270
|
- !ruby/object:Gem::Version
|
@@ -450,6 +397,9 @@ files:
|
|
450
397
|
- spec/admin/curl_spec.rb
|
451
398
|
- spec/admin/guid_spec.rb
|
452
399
|
- spec/admin/set_quota_spec.rb
|
400
|
+
- spec/assets/env/env_test.rb
|
401
|
+
- spec/assets/env/Gemfile
|
402
|
+
- spec/assets/env/Gemfile.lock
|
453
403
|
- spec/assets/hello-sinatra/config.ru
|
454
404
|
- spec/assets/hello-sinatra/fat-cat-makes-app-larger.png
|
455
405
|
- spec/assets/hello-sinatra/Gemfile
|
@@ -602,38 +552,34 @@ files:
|
|
602
552
|
homepage: http://github.com/cloudfoundry/cf
|
603
553
|
licenses:
|
604
554
|
- Apache 2.0
|
555
|
+
metadata: {}
|
605
556
|
post_install_message:
|
606
557
|
rdoc_options: []
|
607
558
|
require_paths:
|
608
559
|
- lib
|
609
560
|
required_ruby_version: !ruby/object:Gem::Requirement
|
610
|
-
none: false
|
611
561
|
requirements:
|
612
562
|
- - ! '>='
|
613
563
|
- !ruby/object:Gem::Version
|
614
564
|
version: '0'
|
615
|
-
segments:
|
616
|
-
- 0
|
617
|
-
hash: 1212679267713831030
|
618
565
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
619
|
-
none: false
|
620
566
|
requirements:
|
621
|
-
- - ! '
|
567
|
+
- - ! '>'
|
622
568
|
- !ruby/object:Gem::Version
|
623
|
-
version:
|
624
|
-
segments:
|
625
|
-
- 0
|
626
|
-
hash: 1212679267713831030
|
569
|
+
version: 1.3.1
|
627
570
|
requirements: []
|
628
571
|
rubyforge_project: cf
|
629
|
-
rubygems_version:
|
572
|
+
rubygems_version: 2.0.6
|
630
573
|
signing_key:
|
631
|
-
specification_version:
|
574
|
+
specification_version: 4
|
632
575
|
summary: Friendly command-line interface for Cloud Foundry.
|
633
576
|
test_files:
|
634
577
|
- spec/admin/curl_spec.rb
|
635
578
|
- spec/admin/guid_spec.rb
|
636
579
|
- spec/admin/set_quota_spec.rb
|
580
|
+
- spec/assets/env/env_test.rb
|
581
|
+
- spec/assets/env/Gemfile
|
582
|
+
- spec/assets/env/Gemfile.lock
|
637
583
|
- spec/assets/hello-sinatra/config.ru
|
638
584
|
- spec/assets/hello-sinatra/fat-cat-makes-app-larger.png
|
639
585
|
- spec/assets/hello-sinatra/Gemfile
|