cf 3.0.1.rc1 → 3.1.0.rc1
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.
- data/lib/cf/cli/app/events.rb +45 -0
- data/lib/cf/cli/app/restart.rb +11 -0
- data/lib/cf/version.rb +1 -1
- data/lib/manifests/manifests.rb +2 -1
- data/lib/manifests/plugin.rb +1 -1
- data/spec/cf/cli/app/events_spec.rb +72 -0
- data/spec/cf/cli/app/restart_spec.rb +47 -0
- data/spec/manifests/manifests_spec.rb +5 -2
- metadata +10 -8
@@ -0,0 +1,45 @@
|
|
1
|
+
require "cf/cli/app/base"
|
2
|
+
|
3
|
+
module CF::App
|
4
|
+
class Events < Base
|
5
|
+
desc "Display application events"
|
6
|
+
group :apps, :info, :hidden => true
|
7
|
+
input :app, :desc => "Application to get the events for",
|
8
|
+
:argument => true, :from_given => by_name(:app)
|
9
|
+
def events
|
10
|
+
app = input[:app]
|
11
|
+
|
12
|
+
events =
|
13
|
+
with_progress("Getting events for #{c(app.name, :name)}") do
|
14
|
+
format_events(app.events)
|
15
|
+
end
|
16
|
+
|
17
|
+
line unless quiet?
|
18
|
+
table(%w{time instance\ index description exit\ status}, events)
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def sort_events(events)
|
25
|
+
events.sort_by { |event| DateTime.parse(event.timestamp) }
|
26
|
+
end
|
27
|
+
|
28
|
+
def format_events(events)
|
29
|
+
sort_events(events).map do |event|
|
30
|
+
[event.timestamp,
|
31
|
+
c(event.instance_index.to_s, :warning),
|
32
|
+
event.exit_description,
|
33
|
+
format_status(event)]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def format_status(event)
|
38
|
+
if event.exit_status == 0
|
39
|
+
c("Success (#{event.exit_status})", :good)
|
40
|
+
else
|
41
|
+
c("Failure (#{event.exit_status})", :bad)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/cf/cli/app/restart.rb
CHANGED
@@ -8,11 +8,22 @@ module CF::App
|
|
8
8
|
:singular => :app, :from_given => by_name(:app)
|
9
9
|
input :debug_mode, :desc => "Debug mode to start in", :aliases => "-d"
|
10
10
|
input :all, :desc => "Restart all applications", :default => false
|
11
|
+
|
12
|
+
############# Uncomment to complete 50543607
|
13
|
+
#input :command, :desc => "Command to restart application", :default => nil
|
14
|
+
|
11
15
|
def restart
|
12
16
|
invoke :stop, :all => input[:all], :apps => input[:apps]
|
13
17
|
|
14
18
|
line unless quiet?
|
15
19
|
|
20
|
+
input[:apps].each do |app|
|
21
|
+
unless input[:command].nil?
|
22
|
+
app.command = input[:command]
|
23
|
+
end
|
24
|
+
app.update!
|
25
|
+
end
|
26
|
+
|
16
27
|
invoke :start, :all => input[:all], :apps => input[:apps],
|
17
28
|
:debug_mode => input[:debug_mode]
|
18
29
|
end
|
data/lib/cf/version.rb
CHANGED
data/lib/manifests/manifests.rb
CHANGED
@@ -149,7 +149,8 @@ module CFManifests
|
|
149
149
|
"name" => app.name,
|
150
150
|
"memory" => human_size(app.memory * 1024 * 1024, 0),
|
151
151
|
"instances" => app.total_instances,
|
152
|
-
"
|
152
|
+
"host" => app.host,
|
153
|
+
"domain" => app.domain,
|
153
154
|
"path" => path
|
154
155
|
}
|
155
156
|
|
data/lib/manifests/plugin.rb
CHANGED
@@ -10,7 +10,7 @@ class ManifestsPlugin < CF::App::Base
|
|
10
10
|
|
11
11
|
|
12
12
|
[ :start, :restart, :instances, :logs, :env, :health, :stats,
|
13
|
-
:scale, :app, :stop, :delete
|
13
|
+
:scale, :app, :stop, :delete, :events
|
14
14
|
].each do |wrap|
|
15
15
|
name_made_optional = change_argument(wrap, :app, :optional)
|
16
16
|
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module CF
|
4
|
+
module App
|
5
|
+
describe Events do
|
6
|
+
let(:global) { {} }
|
7
|
+
let(:given) { {} }
|
8
|
+
let(:inputs) { {:app => apps[0]} }
|
9
|
+
let(:apps) { [build(:app)] }
|
10
|
+
|
11
|
+
before do
|
12
|
+
inputs[:app].stub(:events) do
|
13
|
+
[double("AppEvent", {
|
14
|
+
:instance_guid => "some_guid",
|
15
|
+
:instance_index => 1,
|
16
|
+
:exit_status => -1,
|
17
|
+
:exit_description => "Something very interesting",
|
18
|
+
:timestamp => "2013-05-15 18:52:17 +0000" }),
|
19
|
+
double("AppEvent", {
|
20
|
+
:instance_guid => "some_other_guid",
|
21
|
+
:instance_index => 0,
|
22
|
+
:exit_status => 0,
|
23
|
+
:exit_description => "Something less interesting",
|
24
|
+
:timestamp => "2013-05-15 18:52:15 +0000" })]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
subject do
|
29
|
+
capture_output { Mothership.new.invoke(:events, inputs, given, global) }
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "metadata" do
|
33
|
+
let(:command) { Mothership.commands[:events] }
|
34
|
+
|
35
|
+
describe "command" do
|
36
|
+
subject { command }
|
37
|
+
its(:description) { should eq "Display application events" }
|
38
|
+
it { expect(Mothership::Help.group(:apps, :info)).to include(subject) }
|
39
|
+
end
|
40
|
+
|
41
|
+
include_examples "inputs must have descriptions"
|
42
|
+
|
43
|
+
describe "arguments" do
|
44
|
+
subject { command.arguments }
|
45
|
+
it "has arguments that are not needed with a manifest" do
|
46
|
+
should eq([:name => :app, :type => :optional, :value => nil])
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it "prints out progress" do
|
52
|
+
subject
|
53
|
+
stdout.rewind
|
54
|
+
expect(stdout.readlines.first).to match /Getting events for #{apps.first.name}/
|
55
|
+
end
|
56
|
+
|
57
|
+
it "prints out headers" do
|
58
|
+
subject
|
59
|
+
stdout.rewind
|
60
|
+
expect(stdout.readlines[2]).to match /time\s+instance\s+index\s+description\s+exit\s+status/
|
61
|
+
end
|
62
|
+
|
63
|
+
it "prints out the events in order" do
|
64
|
+
subject
|
65
|
+
stdout.rewind
|
66
|
+
expect(stdout.readlines[3]).to match /.*2013-05-15 18:52:15 \+0000\s+0\s+Something less interesting\s+Success \(0\).*/
|
67
|
+
stdout.rewind
|
68
|
+
expect(stdout.readlines[4]).to match /.*2013-05-15 18:52:17 \+0000\s+1\s+Something very interesting\s+Failure \(-1\).*/
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module CF
|
4
|
+
module App
|
5
|
+
describe Restart do
|
6
|
+
let(:restart_command) { CF::App::Restart.new(Mothership.commands[:restart]) }
|
7
|
+
let(:inputs) { {:apps => [app]} }
|
8
|
+
let(:app) { build(:app, :command => "rails s") }
|
9
|
+
|
10
|
+
before do
|
11
|
+
restart_command.input = Mothership::Inputs.new(nil, restart_command, inputs, {}, {})
|
12
|
+
app.stub(:update!)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "restarts the application" do
|
16
|
+
restart_command.should_receive(:invoke).with(:stop, anything) do
|
17
|
+
restart_command.should_receive(:invoke).with(:start, anything)
|
18
|
+
end
|
19
|
+
restart_command.restart
|
20
|
+
end
|
21
|
+
|
22
|
+
it "does not change the command if we do not pass the command argument" do
|
23
|
+
restart_command.stub(:invoke).with(:start, anything)
|
24
|
+
restart_command.stub(:invoke).with(:stop, anything)
|
25
|
+
restart_command.restart
|
26
|
+
app.command.should == "rails s"
|
27
|
+
end
|
28
|
+
|
29
|
+
context "when passing in a new start command" do
|
30
|
+
let(:inputs) { {:apps => [app], :command => 'rake db:migrate'} }
|
31
|
+
|
32
|
+
before do
|
33
|
+
restart_command.stub(:invoke).with(:stop, anything)
|
34
|
+
restart_command.input = Mothership::Inputs.new(nil, restart_command, inputs, {}, {})
|
35
|
+
end
|
36
|
+
|
37
|
+
it "updates the start command" do
|
38
|
+
app.should_receive(:update!) do
|
39
|
+
restart_command.should_receive(:invoke).with(:start, anything)
|
40
|
+
end
|
41
|
+
restart_command.restart
|
42
|
+
app.command.should == "rake db:migrate"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -76,7 +76,9 @@ describe CFManifests do
|
|
76
76
|
its(["memory"]) { should eq "2G" }
|
77
77
|
its(["instances"]) { should eq 2 }
|
78
78
|
its(["path"]) { should eq "some-path" }
|
79
|
-
its(["url"]) { should eq "some-app-name.${target-base}" }
|
79
|
+
#its(["url"]) { should eq "some-app-name.${target-base}" }
|
80
|
+
its(["host"]) { should eq "some-app-name" }
|
81
|
+
its(["domain"]) { should eq "${target-base}" }
|
80
82
|
its(["command"]) { should eq "ruby main.rb" }
|
81
83
|
its(["buildpack"]) { should eq "git://example.com/foo.git" }
|
82
84
|
|
@@ -114,7 +116,8 @@ describe CFManifests do
|
|
114
116
|
:service_bindings => []
|
115
117
|
}
|
116
118
|
|
117
|
-
its(["
|
119
|
+
its(["host"]) { should eq "none" }
|
120
|
+
its(["domain"]) { should eq "none" }
|
118
121
|
it { should_not include "command" }
|
119
122
|
it { should_not include "services" }
|
120
123
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.1.0.rc1
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-06-
|
13
|
+
date: 2013-06-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: addressable
|
@@ -51,7 +51,7 @@ dependencies:
|
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 2.
|
54
|
+
version: 2.2.0.rc1
|
55
55
|
- - <
|
56
56
|
- !ruby/object:Gem::Version
|
57
57
|
version: '3.0'
|
@@ -62,7 +62,7 @@ dependencies:
|
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: 2.
|
65
|
+
version: 2.2.0.rc1
|
66
66
|
- - <
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.0'
|
@@ -329,6 +329,7 @@ files:
|
|
329
329
|
- lib/cf/cli/app/delete.rb
|
330
330
|
- lib/cf/cli/app/deprecated.rb
|
331
331
|
- lib/cf/cli/app/env.rb
|
332
|
+
- lib/cf/cli/app/events.rb
|
332
333
|
- lib/cf/cli/app/files.rb
|
333
334
|
- lib/cf/cli/app/health.rb
|
334
335
|
- lib/cf/cli/app/instances.rb
|
@@ -474,11 +475,13 @@ files:
|
|
474
475
|
- spec/assets/rails328_ruby187_app/test/test_helper.rb
|
475
476
|
- spec/cf/cli/app/base_spec.rb
|
476
477
|
- spec/cf/cli/app/delete_spec.rb
|
478
|
+
- spec/cf/cli/app/events_spec.rb
|
477
479
|
- spec/cf/cli/app/instances_spec.rb
|
478
480
|
- spec/cf/cli/app/push/create_spec.rb
|
479
481
|
- spec/cf/cli/app/push/interactions_spec.rb
|
480
482
|
- spec/cf/cli/app/push_spec.rb
|
481
483
|
- spec/cf/cli/app/rename_spec.rb
|
484
|
+
- spec/cf/cli/app/restart_spec.rb
|
482
485
|
- spec/cf/cli/app/scale_spec.rb
|
483
486
|
- spec/cf/cli/app/start_spec.rb
|
484
487
|
- spec/cf/cli/app/stats_spec.rb
|
@@ -566,9 +569,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
566
569
|
- - ! '>='
|
567
570
|
- !ruby/object:Gem::Version
|
568
571
|
version: '0'
|
569
|
-
segments:
|
570
|
-
- 0
|
571
|
-
hash: 428685765814888758
|
572
572
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
573
573
|
none: false
|
574
574
|
requirements:
|
@@ -577,7 +577,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
577
577
|
version: 1.3.1
|
578
578
|
requirements: []
|
579
579
|
rubyforge_project: cf
|
580
|
-
rubygems_version: 1.8.
|
580
|
+
rubygems_version: 1.8.24
|
581
581
|
signing_key:
|
582
582
|
specification_version: 3
|
583
583
|
summary: Friendly command-line interface for Cloud Foundry.
|
@@ -637,11 +637,13 @@ test_files:
|
|
637
637
|
- spec/assets/rails328_ruby187_app/test/test_helper.rb
|
638
638
|
- spec/cf/cli/app/base_spec.rb
|
639
639
|
- spec/cf/cli/app/delete_spec.rb
|
640
|
+
- spec/cf/cli/app/events_spec.rb
|
640
641
|
- spec/cf/cli/app/instances_spec.rb
|
641
642
|
- spec/cf/cli/app/push/create_spec.rb
|
642
643
|
- spec/cf/cli/app/push/interactions_spec.rb
|
643
644
|
- spec/cf/cli/app/push_spec.rb
|
644
645
|
- spec/cf/cli/app/rename_spec.rb
|
646
|
+
- spec/cf/cli/app/restart_spec.rb
|
645
647
|
- spec/cf/cli/app/scale_spec.rb
|
646
648
|
- spec/cf/cli/app/start_spec.rb
|
647
649
|
- spec/cf/cli/app/stats_spec.rb
|