pocketknife 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.
- data/.document +5 -0
- data/.yardopts +1 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +52 -0
- data/LICENSE.txt +23 -0
- data/README.md +115 -0
- data/Rakefile +56 -0
- data/bin/pocketknife +15 -0
- data/lib/pocketknife.rb +252 -0
- data/lib/pocketknife/errors.rb +85 -0
- data/lib/pocketknife/node.rb +355 -0
- data/lib/pocketknife/node_manager.rb +93 -0
- data/lib/pocketknife/version.rb +13 -0
- data/pocketknife.gemspec +82 -0
- data/spec/pocketknife_execution_error_spec.rb +61 -0
- data/spec/pocketknife_node_manager_spec.rb +37 -0
- data/spec/pocketknife_node_spec.rb +299 -0
- data/spec/pocketknife_spec.rb +94 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/support/libraries.rb +3 -0
- data/spec/support/mkproject.rb +32 -0
- metadata +214 -0
@@ -0,0 +1,94 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "Pocketknife" do
|
4
|
+
describe "new" do
|
5
|
+
before do
|
6
|
+
@pocketknife = Pocketknife.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should instantiate a Pocketknife" do
|
10
|
+
@pocketknife.should be_a_kind_of(Pocketknife)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should have normal verbosity" do
|
14
|
+
@pocketknife.verbosity.should be_nil
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should prompt for installation if needed" do
|
18
|
+
@pocketknife.can_install.should be_nil
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should have a NodeManager instance" do
|
22
|
+
@pocketknife.node_manager.should be_a_kind_of(Pocketknife::NodeManager)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should have a NodeManager instance that knows about it" do
|
26
|
+
@pocketknife.node_manager.pocketknife.should == @pocketknife
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "cli" do
|
31
|
+
describe "create" do
|
32
|
+
describe "without name" do
|
33
|
+
it "should raise an exception and not create anything" do
|
34
|
+
mktmpdircd do |dir|
|
35
|
+
lambda { Pocketknife.cli(['-c', '-q']) }.should raise_error(Errno::ENOENT)
|
36
|
+
Dir["#{Dir.pwd}/*"].should be_empty
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "create" do
|
44
|
+
it "should create a project" do
|
45
|
+
mktmpdircd do |dir|
|
46
|
+
project = 'myproject'
|
47
|
+
Pocketknife.new(:verbosity => false).create(project)
|
48
|
+
Dir["#{Dir.pwd}/#{project}/*"].should_not be_empty
|
49
|
+
Dir["#{Dir.pwd}/#{project}/cookbooks"].should_not be_empty
|
50
|
+
Dir["#{Dir.pwd}/#{project}/nodes"].should_not be_empty
|
51
|
+
Dir["#{Dir.pwd}/#{project}/roles"].should_not be_empty
|
52
|
+
Dir["#{Dir.pwd}/#{project}/site-cookbooks"].should_not be_empty
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "node" do
|
58
|
+
before(:each) do
|
59
|
+
@previous_dir = Dir.pwd
|
60
|
+
@dir = mkproject
|
61
|
+
end
|
62
|
+
|
63
|
+
after(:each) do
|
64
|
+
FileUtils.rm_rf(@dir) if @dir
|
65
|
+
Dir.chdir(@previous_dir)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should fail when asked to return an unknown node" do
|
69
|
+
node = "foo"
|
70
|
+
pocketknife = Pocketknife.new
|
71
|
+
begin
|
72
|
+
pocketknife.node(node)
|
73
|
+
rescue Pocketknife::NoSuchNode => e
|
74
|
+
e.node.should == node
|
75
|
+
else
|
76
|
+
fail "Exception wasn't thrown"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should return a known node, that has a name and pocketknife" do
|
81
|
+
name = "mynode"
|
82
|
+
path = Pathname.new("nodes/#{name}.json")
|
83
|
+
path.open("w") do |h|
|
84
|
+
h.write("{}")
|
85
|
+
end
|
86
|
+
|
87
|
+
pocketknife = Pocketknife.new
|
88
|
+
node = pocketknife.node(name)
|
89
|
+
|
90
|
+
node.name.should == name
|
91
|
+
node.pocketknife.should == pocketknife
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'rspec'
|
4
|
+
require 'pocketknife'
|
5
|
+
|
6
|
+
# Requires supporting files with custom matchers and macros, etc,
|
7
|
+
# in ./support/ and its subdirectories.
|
8
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# Creates temporary directory and cd's into it.
|
2
|
+
#
|
3
|
+
# If a block is supplied, it is executed within this directory, and when done, it cd's back and removes the directory.
|
4
|
+
#
|
5
|
+
# Without a block, it just creates the directory, cd's into it and returns the directory's path for you to cleanup yourself.
|
6
|
+
def mktmpdircd(&block)
|
7
|
+
if block
|
8
|
+
Dir.mktmpdir do |dir|
|
9
|
+
Dir.chdir(dir) do
|
10
|
+
yield(dir)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
else
|
14
|
+
dir = Dir.mktmpdir
|
15
|
+
Dir.chdir(dir)
|
16
|
+
return dir
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def mkproject(&block)
|
21
|
+
create = lambda { Pocketknife.new(:verbosity => false).create('.') }
|
22
|
+
if block
|
23
|
+
mktmpdircd do |dir|
|
24
|
+
create.call
|
25
|
+
yield(dir)
|
26
|
+
end
|
27
|
+
else
|
28
|
+
dir = mktmpdircd
|
29
|
+
create.call
|
30
|
+
return dir
|
31
|
+
end
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,214 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pocketknife
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Igal Koshevoy
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-05-16 00:00:00 -07:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
hash: 11
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
- 5
|
31
|
+
- 0
|
32
|
+
version: 0.5.0
|
33
|
+
requirement: *id001
|
34
|
+
prerelease: false
|
35
|
+
type: :runtime
|
36
|
+
name: archive-tar-minitar
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 59
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
- 9
|
47
|
+
- 0
|
48
|
+
version: 0.9.0
|
49
|
+
requirement: *id002
|
50
|
+
prerelease: false
|
51
|
+
type: :runtime
|
52
|
+
name: rye
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ~>
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 11
|
60
|
+
segments:
|
61
|
+
- 2
|
62
|
+
- 1
|
63
|
+
- 0
|
64
|
+
version: 2.1.0
|
65
|
+
requirement: *id003
|
66
|
+
prerelease: false
|
67
|
+
type: :development
|
68
|
+
name: bluecloth
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 3
|
76
|
+
segments:
|
77
|
+
- 2
|
78
|
+
- 3
|
79
|
+
- 0
|
80
|
+
version: 2.3.0
|
81
|
+
requirement: *id004
|
82
|
+
prerelease: false
|
83
|
+
type: :development
|
84
|
+
name: rspec
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ~>
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
hash: 7
|
92
|
+
segments:
|
93
|
+
- 0
|
94
|
+
- 6
|
95
|
+
- 0
|
96
|
+
version: 0.6.0
|
97
|
+
requirement: *id005
|
98
|
+
prerelease: false
|
99
|
+
type: :development
|
100
|
+
name: yard
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
104
|
+
requirements:
|
105
|
+
- - ~>
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
hash: 23
|
108
|
+
segments:
|
109
|
+
- 1
|
110
|
+
- 0
|
111
|
+
- 0
|
112
|
+
version: 1.0.0
|
113
|
+
requirement: *id006
|
114
|
+
prerelease: false
|
115
|
+
type: :development
|
116
|
+
name: bundler
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
121
|
+
- - ~>
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
hash: 15
|
124
|
+
segments:
|
125
|
+
- 1
|
126
|
+
- 6
|
127
|
+
- 0
|
128
|
+
version: 1.6.0
|
129
|
+
requirement: *id007
|
130
|
+
prerelease: false
|
131
|
+
type: :development
|
132
|
+
name: jeweler
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
135
|
+
none: false
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
hash: 3
|
140
|
+
segments:
|
141
|
+
- 0
|
142
|
+
version: "0"
|
143
|
+
requirement: *id008
|
144
|
+
prerelease: false
|
145
|
+
type: :development
|
146
|
+
name: rcov
|
147
|
+
description: pocketknife is a tool for managing chef-solo nodes.
|
148
|
+
email: igal+pocketknife@pragmaticraft.com
|
149
|
+
executables:
|
150
|
+
- pocketknife
|
151
|
+
- pocketknife
|
152
|
+
extensions: []
|
153
|
+
|
154
|
+
extra_rdoc_files:
|
155
|
+
- LICENSE.txt
|
156
|
+
- README.md
|
157
|
+
files:
|
158
|
+
- .document
|
159
|
+
- .yardopts
|
160
|
+
- Gemfile
|
161
|
+
- Gemfile.lock
|
162
|
+
- LICENSE.txt
|
163
|
+
- README.md
|
164
|
+
- Rakefile
|
165
|
+
- bin/pocketknife
|
166
|
+
- lib/pocketknife.rb
|
167
|
+
- lib/pocketknife/errors.rb
|
168
|
+
- lib/pocketknife/node.rb
|
169
|
+
- lib/pocketknife/node_manager.rb
|
170
|
+
- lib/pocketknife/version.rb
|
171
|
+
- pocketknife.gemspec
|
172
|
+
- spec/pocketknife_execution_error_spec.rb
|
173
|
+
- spec/pocketknife_node_manager_spec.rb
|
174
|
+
- spec/pocketknife_node_spec.rb
|
175
|
+
- spec/pocketknife_spec.rb
|
176
|
+
- spec/spec_helper.rb
|
177
|
+
- spec/support/libraries.rb
|
178
|
+
- spec/support/mkproject.rb
|
179
|
+
has_rdoc: true
|
180
|
+
homepage: http://github.com/igal/pocketknife
|
181
|
+
licenses:
|
182
|
+
- MIT
|
183
|
+
post_install_message:
|
184
|
+
rdoc_options: []
|
185
|
+
|
186
|
+
require_paths:
|
187
|
+
- lib
|
188
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
189
|
+
none: false
|
190
|
+
requirements:
|
191
|
+
- - ">="
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
hash: 3
|
194
|
+
segments:
|
195
|
+
- 0
|
196
|
+
version: "0"
|
197
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
|
+
none: false
|
199
|
+
requirements:
|
200
|
+
- - ">="
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
hash: 3
|
203
|
+
segments:
|
204
|
+
- 0
|
205
|
+
version: "0"
|
206
|
+
requirements: []
|
207
|
+
|
208
|
+
rubyforge_project:
|
209
|
+
rubygems_version: 1.3.7
|
210
|
+
signing_key:
|
211
|
+
specification_version: 3
|
212
|
+
summary: pocketknife is a tool for managing chef-solo nodes.
|
213
|
+
test_files: []
|
214
|
+
|