automateit 0.71102 → 0.71103
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.tar.gz.sig +1 -2
- data/CHANGES.txt +14 -0
- data/Rakefile +27 -37
- data/bin/aissh +93 -0
- data/bin/aitag +7 -0
- data/lib/automateit.rb +2 -0
- data/lib/automateit/account_manager/etc.rb +3 -3
- data/lib/automateit/account_manager/nscd.rb +14 -11
- data/lib/automateit/address_manager/base.rb +2 -2
- data/lib/automateit/interpreter.rb +2 -19
- data/lib/automateit/package_manager.rb +2 -0
- data/lib/automateit/plugin/driver.rb +1 -1
- data/lib/automateit/plugin/manager.rb +1 -6
- data/lib/automateit/root.rb +1 -1
- data/lib/automateit/tag_manager/tag_parser.rb +14 -17
- data/lib/ext/shell_escape.rb +7 -0
- data/lib/nitpick.rb +29 -0
- data/spec/integration/account_manager_nscd_spec.rb +37 -0
- data/spec/integration/account_manager_spec.rb +39 -4
- data/spec/integration/shell_manager_spec.rb +135 -3
- data/spec/unit/address_manager_spec.rb +49 -0
- data/spec/unit/interpreter_spec.rb +32 -1
- data/spec/unit/nested_error_spec.rb +10 -0
- data/spec/unit/object_spec.rb +18 -0
- data/spec/unit/plugins_spec.rb +113 -0
- data/spec/unit/shell_escape_spec.rb +11 -0
- data/spec/unit/tag_manager_spec.rb +60 -15
- metadata +16 -3
- metadata.gz.sig +1 -2
- data/lib/automateit.rb.orig +0 -65
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.join(File.dirname(File.expand_path(__FILE__)), "/../spec_helper.rb")
|
2
|
+
|
3
|
+
describe Object, "with extensions" do
|
4
|
+
it "should have unique methods on an object" do
|
5
|
+
INTERPRETER.unique_methods.should include("preview")
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should have unique methods on a class" do
|
9
|
+
AutomateIt::Interpreter.unique_methods.should include("invoke")
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should parse arguments and options" do
|
13
|
+
args, opts = args_and_opts(:foo, :bar, :baz => :quux)
|
14
|
+
|
15
|
+
args.should == [:foo, :bar]
|
16
|
+
opts.should == {:baz => :quux}
|
17
|
+
end
|
18
|
+
end
|
data/spec/unit/plugins_spec.rb
CHANGED
@@ -2,12 +2,44 @@ require File.join(File.dirname(File.expand_path(__FILE__)), "/../spec_helper.rb"
|
|
2
2
|
|
3
3
|
#===[ stub classes ]====================================================# {{{
|
4
4
|
|
5
|
+
#---[ MyBrokenManager ]-------------------------------------------------
|
6
|
+
|
7
|
+
class MyBrokenManager < AutomateIt::Plugin::Manager
|
8
|
+
def mymethod(opts)
|
9
|
+
dispatch(opts)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class MyBrokenManager::BaseDriver < AutomateIt::Plugin::Driver
|
14
|
+
# Is abstract by default
|
15
|
+
end
|
16
|
+
|
17
|
+
class MyBrokenManager::MyBrokenDriver < MyBrokenManager::BaseDriver
|
18
|
+
def suitability(method, *args)
|
19
|
+
return {:omfg => :lol}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
#---[ MyDriverlessManager ]---------------------------------------------
|
24
|
+
|
25
|
+
class MyDriverlessManager < AutomateIt::Plugin::Manager
|
26
|
+
def mymethod(opts)
|
27
|
+
dispatch(opts)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
#---[ MyManager ]-------------------------------------------------------
|
32
|
+
|
5
33
|
class MyManager < AutomateIt::Plugin::Manager
|
6
34
|
alias_methods :mymethod
|
7
35
|
|
8
36
|
def mymethod(opts)
|
9
37
|
dispatch(opts)
|
10
38
|
end
|
39
|
+
|
40
|
+
def mynonexistentmethod(opts)
|
41
|
+
dispatch_safely(opts)
|
42
|
+
end
|
11
43
|
end
|
12
44
|
|
13
45
|
class MyManager::BaseDriver < AutomateIt::Plugin::Driver
|
@@ -43,6 +75,25 @@ class MyManager::MyUnimplementedDriver < MyManager::BaseDriver
|
|
43
75
|
# +mymethod+ method deliberately not implemented to test errors
|
44
76
|
end
|
45
77
|
|
78
|
+
class MyManager::MyInvalidDependsOnDriver < MyManager::BaseDriver
|
79
|
+
depends_on nil
|
80
|
+
end
|
81
|
+
|
82
|
+
class MyManager::MyInvalidDependencyTypeDriver < MyManager::BaseDriver
|
83
|
+
depends_on :omfg => :lol
|
84
|
+
end
|
85
|
+
|
86
|
+
class MyManager::MyNonexistentLibrariesDependencyDriver < MyManager::BaseDriver
|
87
|
+
depends_on :libraries => %w(qjkwerlkjqweluxovxuqwe)
|
88
|
+
end
|
89
|
+
|
90
|
+
class MyManager::MyNonexistentProgramsDependencyDriver < MyManager::BaseDriver
|
91
|
+
depends_on :programs => %(qlkjwesziuxkjlrjklqwel)
|
92
|
+
end
|
93
|
+
|
94
|
+
class MyManager::MyValidLibraryDependencyDriver < MyManager::BaseDriver
|
95
|
+
depends_on :requires => %w(set)
|
96
|
+
end
|
46
97
|
|
47
98
|
class MyManager::MyFirstDriver < MyManager::BaseDriver
|
48
99
|
depends_on :directories => ["/"]
|
@@ -169,6 +220,32 @@ describe "MyManager's drivers" do
|
|
169
220
|
raise_error(NotImplementedError, /non_existent/)
|
170
221
|
end
|
171
222
|
|
223
|
+
it "should not consider drivers that declare absurd dependencies to be available" do
|
224
|
+
@m[:my_invalid_depends_on_driver].should_not be_available
|
225
|
+
end
|
226
|
+
|
227
|
+
it "should not consider drivers that depend on non-existent library dependencies to be available" do
|
228
|
+
@m[:my_nonexistent_libraries_dependency_driver].should_not be_available
|
229
|
+
end
|
230
|
+
|
231
|
+
it "should not consider drivers that depend on non-existent program dependencies to be available" do
|
232
|
+
@m[:my_nonexistent_programs_dependency_driver].should_not be_available
|
233
|
+
end
|
234
|
+
|
235
|
+
it "should figure out why drivers aren't available" do
|
236
|
+
lambda {
|
237
|
+
@m[:my_nonexistent_programs_dependency_driver].send(:_raise_unless_available)
|
238
|
+
}.should raise_error(NotImplementedError, /Missing.+programs.+qlkjwesziuxkjlrjklqwel/)
|
239
|
+
end
|
240
|
+
|
241
|
+
it "should fail when drivers define unknown dependency types" do
|
242
|
+
lambda { @m[:my_invalid_dependency_type_driver].available? }.should raise_error(TypeError)
|
243
|
+
end
|
244
|
+
|
245
|
+
it "should consider driver with valid library to be available" do
|
246
|
+
@m[:my_valid_library_dependency_driver].available?.should be_true
|
247
|
+
end
|
248
|
+
|
172
249
|
it "should have a token" do
|
173
250
|
MyManager::MyFirstDriver.token.should == :my_first_driver
|
174
251
|
end
|
@@ -234,6 +311,10 @@ describe "MyManager's drivers" do
|
|
234
311
|
@m.mymethod(:one => 1, :with => :my_first_driver).should == 1
|
235
312
|
end
|
236
313
|
|
314
|
+
it "should dispatch safely" do
|
315
|
+
@m.mynonexistentmethod(:hello => :world).should be_nil
|
316
|
+
end
|
317
|
+
|
237
318
|
it "should dispatch safely to non-suitable drivers" do
|
238
319
|
@m.dispatch_safely_to(:asdf).should be_nil
|
239
320
|
end
|
@@ -252,6 +333,38 @@ describe "MyManager's drivers" do
|
|
252
333
|
|
253
334
|
end
|
254
335
|
|
336
|
+
describe "MyBrokenManager" do
|
337
|
+
before(:all) do
|
338
|
+
@m = MyBrokenManager.new
|
339
|
+
end
|
340
|
+
|
341
|
+
it "should fail to find an invalid driver" do
|
342
|
+
lambda { @m.driver_for(:mymethod) }.should raise_error(NotImplementedError)
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
describe "MyDriverlessManager" do
|
347
|
+
before(:all) do
|
348
|
+
@m = MyDriverlessManager.new
|
349
|
+
end
|
350
|
+
|
351
|
+
it "should fail to find a driver for manager without drivers" do
|
352
|
+
lambda { @m.driver_for(:mymethod) }.should raise_error(NotImplementedError)
|
353
|
+
end
|
354
|
+
end
|
355
|
+
|
356
|
+
describe "MyManagerlessDriver" do
|
357
|
+
it "should fail to create a driver without a manager" do
|
358
|
+
lambda {
|
359
|
+
self.class.module_eval do
|
360
|
+
class MyManagerlessDriver < AutomateIt::Plugin::Driver
|
361
|
+
# Will fail
|
362
|
+
end
|
363
|
+
end
|
364
|
+
}.should raise_error(TypeError)
|
365
|
+
end
|
366
|
+
end
|
367
|
+
|
255
368
|
describe AutomateIt::Interpreter do
|
256
369
|
before(:all) do
|
257
370
|
@a = AutomateIt::Interpreter.new
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.join(File.dirname(File.expand_path(__FILE__)), "/../spec_helper.rb")
|
2
|
+
|
3
|
+
describe String, "with shell escape" do
|
4
|
+
it "should add quotes to string" do
|
5
|
+
"foo".shell_escape.should == '"foo"'
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should escape quotes within string" do
|
9
|
+
'"foo"'.shell_escape.should == '"\"foo\""'
|
10
|
+
end
|
11
|
+
end
|
@@ -1,21 +1,21 @@
|
|
1
1
|
require File.join(File.dirname(File.expand_path(__FILE__)), "/../spec_helper.rb")
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
:
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
3
|
+
def prepare_for_tagmanager
|
4
|
+
@a = AutomateIt.new
|
5
|
+
@a.address_manager.should_receive(:hostnames).any_number_of_times.and_return(["kurou", "kurou.foo"])
|
6
|
+
@a.platform_manager.setup(
|
7
|
+
:default => :struct,
|
8
|
+
:struct => {
|
9
|
+
:os => "mizrahi",
|
10
|
+
:arch => "realian",
|
11
|
+
:distro => "momo",
|
12
|
+
:version => "s100",
|
13
|
+
}
|
14
|
+
)
|
15
|
+
@m = @a.tag_manager
|
16
|
+
end
|
18
17
|
|
18
|
+
describe "AutomateIt::TagManager", :shared => true do
|
19
19
|
it "should have tags" do
|
20
20
|
@a.tags.should be_a_kind_of(Enumerable)
|
21
21
|
end
|
@@ -152,6 +152,8 @@ describe "AutomateIt::TagManager::Struct" do
|
|
152
152
|
it_should_behave_like "AutomateIt::TagManager"
|
153
153
|
|
154
154
|
before(:all) do
|
155
|
+
prepare_for_tagmanager
|
156
|
+
|
155
157
|
@m.setup(
|
156
158
|
:default => :struct,
|
157
159
|
:struct => {
|
@@ -216,6 +218,7 @@ describe "AutomateIt::TagManager::YAML" do
|
|
216
218
|
end
|
217
219
|
|
218
220
|
before(:all) do
|
221
|
+
prepare_for_tagmanager
|
219
222
|
setup_yaml_tags
|
220
223
|
end
|
221
224
|
|
@@ -230,3 +233,45 @@ describe "AutomateIt::TagManager::YAML" do
|
|
230
233
|
@a.should be_tagged(tag)
|
231
234
|
end
|
232
235
|
end
|
236
|
+
|
237
|
+
describe "AutomateIt::TagManager::YAML", "with empty struct" do
|
238
|
+
def setup_yaml_tags
|
239
|
+
@m[:yaml].should_receive(:_read).any_number_of_times.with("demo.yml").and_return(<<-EOB)
|
240
|
+
# Empty!
|
241
|
+
EOB
|
242
|
+
@m.setup(
|
243
|
+
:default => :yaml,
|
244
|
+
:file => "demo.yml"
|
245
|
+
)
|
246
|
+
end
|
247
|
+
before(:all) do
|
248
|
+
prepare_for_tagmanager
|
249
|
+
setup_yaml_tags
|
250
|
+
end
|
251
|
+
|
252
|
+
it "should tolerate empty struct" do
|
253
|
+
@a.tagged?("foo").should be_false
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
|
258
|
+
describe "AutomateIt::TagManager::YAML", "with no leaves" do
|
259
|
+
def setup_yaml_tags
|
260
|
+
@m[:yaml].should_receive(:_read).any_number_of_times.with("demo.yml").and_return(<<-EOB)
|
261
|
+
<%="apache_servers"%>:
|
262
|
+
EOB
|
263
|
+
@m.setup(
|
264
|
+
:default => :yaml,
|
265
|
+
:file => "demo.yml"
|
266
|
+
)
|
267
|
+
end
|
268
|
+
before(:all) do
|
269
|
+
prepare_for_tagmanager
|
270
|
+
setup_yaml_tags
|
271
|
+
end
|
272
|
+
|
273
|
+
it "should tolerate empty leaves" do
|
274
|
+
@a.tagged?("apache_servers").should be_false
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: automateit
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: "0.
|
7
|
-
date: 2007-11-
|
6
|
+
version: "0.71103"
|
7
|
+
date: 2007-11-03 00:00:00 -07:00
|
8
8
|
summary: AutomateIt is an open source tool for automating the setup and maintenance of servers, applications and their dependencies.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- bin/automateit
|
66
66
|
- bin/ai
|
67
67
|
- bin/aitag
|
68
|
+
- bin/aissh
|
68
69
|
- examples/basic/install.log
|
69
70
|
- examples/basic/Rakefile
|
70
71
|
- examples/basic/config/tags.yml
|
@@ -81,9 +82,9 @@ files:
|
|
81
82
|
- lib/hashcache.rb
|
82
83
|
- lib/automateit.rb
|
83
84
|
- lib/tempster.rb
|
85
|
+
- lib/nitpick.rb
|
84
86
|
- lib/queued_logger.rb
|
85
87
|
- lib/helpful_erb.rb
|
86
|
-
- lib/automateit.rb.orig
|
87
88
|
- lib/nested_error.rb
|
88
89
|
- lib/automateit/tag_manager.rb
|
89
90
|
- lib/automateit/service_manager.rb
|
@@ -153,6 +154,7 @@ files:
|
|
153
154
|
- lib/automateit/template_manager/base.rb
|
154
155
|
- lib/ext/metaclass.rb
|
155
156
|
- lib/ext/object.rb
|
157
|
+
- lib/ext/shell_escape.rb
|
156
158
|
- misc/index_gem_repository.rb
|
157
159
|
- misc/setup_rubygems.sh
|
158
160
|
- misc/setup_egg.rb
|
@@ -167,7 +169,11 @@ files:
|
|
167
169
|
- spec/unit/hashcache_spec.rb
|
168
170
|
- spec/unit/interpreter_spec.rb
|
169
171
|
- spec/unit/platform_manager_spec.rb
|
172
|
+
- spec/unit/address_manager_spec.rb
|
170
173
|
- spec/unit/edit_manager_spec.rb
|
174
|
+
- spec/unit/shell_escape_spec.rb
|
175
|
+
- spec/unit/object_spec.rb
|
176
|
+
- spec/unit/nested_error_spec.rb
|
171
177
|
- spec/integration/service_manager_sysv_spec.rb
|
172
178
|
- spec/integration/template_manager_erb_spec.rb
|
173
179
|
- spec/integration/package_manager_spec.rb
|
@@ -177,6 +183,7 @@ files:
|
|
177
183
|
- spec/integration/account_manager_spec.rb
|
178
184
|
- spec/integration/examples_spec.rb
|
179
185
|
- spec/integration/cli_spec.rb
|
186
|
+
- spec/integration/account_manager_nscd_spec.rb
|
180
187
|
- spec/integration/address_manager_portable_spec.rb
|
181
188
|
- spec/integration/tempster_spec.rb
|
182
189
|
- spec/integration/examples_spec_editor.rb
|
@@ -198,7 +205,11 @@ test_files:
|
|
198
205
|
- spec/unit/hashcache_spec.rb
|
199
206
|
- spec/unit/interpreter_spec.rb
|
200
207
|
- spec/unit/platform_manager_spec.rb
|
208
|
+
- spec/unit/address_manager_spec.rb
|
201
209
|
- spec/unit/edit_manager_spec.rb
|
210
|
+
- spec/unit/shell_escape_spec.rb
|
211
|
+
- spec/unit/object_spec.rb
|
212
|
+
- spec/unit/nested_error_spec.rb
|
202
213
|
- spec/integration/service_manager_sysv_spec.rb
|
203
214
|
- spec/integration/template_manager_erb_spec.rb
|
204
215
|
- spec/integration/package_manager_spec.rb
|
@@ -208,6 +219,7 @@ test_files:
|
|
208
219
|
- spec/integration/account_manager_spec.rb
|
209
220
|
- spec/integration/examples_spec.rb
|
210
221
|
- spec/integration/cli_spec.rb
|
222
|
+
- spec/integration/account_manager_nscd_spec.rb
|
211
223
|
- spec/integration/address_manager_portable_spec.rb
|
212
224
|
- spec/integration/tempster_spec.rb
|
213
225
|
- spec/integration/examples_spec_editor.rb
|
@@ -237,6 +249,7 @@ executables:
|
|
237
249
|
- automateit
|
238
250
|
- ai
|
239
251
|
- aitag
|
252
|
+
- aissh
|
240
253
|
extensions: []
|
241
254
|
|
242
255
|
requirements: []
|
metadata.gz.sig
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
�����`L´F} ��lX(�c�x�♭˿��*��4�uR�K�
|
1
|
+
/DS���U�8?�y�p!Df x�K �c�O,�+Ng?�9�#�a-�qU�6�9��h��icE�)�����SJ`ޑj��YqY@逿5�8��H
|
data/lib/automateit.rb.orig
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
# == Dependencies
|
2
|
-
|
3
|
-
# Standard libraries
|
4
|
-
require 'etc'
|
5
|
-
require 'fileutils'
|
6
|
-
require 'find'
|
7
|
-
require 'logger'
|
8
|
-
require 'open3'
|
9
|
-
require 'pp'
|
10
|
-
require 'pathname'
|
11
|
-
require 'resolv'
|
12
|
-
require 'set'
|
13
|
-
require 'socket'
|
14
|
-
require 'yaml'
|
15
|
-
require 'erb'
|
16
|
-
|
17
|
-
# Load ActiveSupport pieces individually to save ~0.5s
|
18
|
-
### require 'active_support'
|
19
|
-
gem 'activesupport'
|
20
|
-
require 'active_support/core_ext/array' # [].extract_options, new in AS 1.4.4
|
21
|
-
require 'active_support/core_ext/blank' # foo.blank?
|
22
|
-
require 'active_support/core_ext/class/attribute_accessors' # cattr_accessor
|
23
|
-
require 'active_support/core_ext/class/inheritable_attributes' # inheritable_cattr_accessor
|
24
|
-
require 'active_support/core_ext/module/aliasing' # alias_method_chain
|
25
|
-
require 'active_support/core_ext/string' # "asdf".demodulize.underscore
|
26
|
-
require 'active_support/clean_logger' # cleans up Logger output
|
27
|
-
require 'active_support/core_ext/symbol' # [:foo, :bar].map(&:to_s)
|
28
|
-
|
29
|
-
# Handle ActiveSupport includes
|
30
|
-
require 'active_support/core_ext/hash/keys' # {:foo => :bar}.stringify_keys
|
31
|
-
Hash.module_eval{include ActiveSupport::CoreExtensions::Hash::Keys}
|
32
|
-
|
33
|
-
# Extensions
|
34
|
-
require 'ext/object.rb'
|
35
|
-
require 'ext/metaclass.rb'
|
36
|
-
|
37
|
-
# Helpers
|
38
|
-
require 'hashcache'
|
39
|
-
require 'queued_logger'
|
40
|
-
require 'tempster'
|
41
|
-
require 'helpful_erb'
|
42
|
-
require 'nested_error'
|
43
|
-
|
44
|
-
# Core
|
45
|
-
require 'automateit/root'
|
46
|
-
require 'automateit/constants'
|
47
|
-
require 'automateit/error'
|
48
|
-
require 'automateit/common'
|
49
|
-
require 'automateit/interpreter'
|
50
|
-
require 'automateit/plugin'
|
51
|
-
require 'automateit/cli'
|
52
|
-
require 'automateit/project'
|
53
|
-
|
54
|
-
# Plugins which must be loaded early
|
55
|
-
require 'automateit/shell_manager'
|
56
|
-
require 'automateit/platform_manager' # requires shell
|
57
|
-
require 'automateit/address_manager' # requires shell
|
58
|
-
require 'automateit/tag_manager' # requires address, platform
|
59
|
-
require 'automateit/field_manager' # requires shell
|
60
|
-
require 'automateit/service_manager' # requires shell
|
61
|
-
require 'automateit/package_manager' # requires shell
|
62
|
-
require 'automateit/template_manager'
|
63
|
-
require 'automateit/edit_manager'
|
64
|
-
require 'automateit/account_manager'
|
65
|
-
require 'automateit/download_manager'
|