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.
@@ -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
@@ -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
- describe "AutomateIt::TagManager", :shared => true do
4
- before(:all) do
5
- @a = AutomateIt.new
6
- @a.address_manager.should_receive(:hostnames).any_number_of_times.and_return(["kurou", "kurou.foo"])
7
- @a.platform_manager.setup(
8
- :default => :struct,
9
- :struct => {
10
- :os => "mizrahi",
11
- :arch => "realian",
12
- :distro => "momo",
13
- :version => "s100",
14
- }
15
- )
16
- @m = @a.tag_manager
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.71102"
7
- date: 2007-11-02 00:00:00 -07:00
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
- �i�$7O M�M����j�߻�$�W�[�ٷ��zn���y���Sz��������8 0#�����W��%��yħ�V�K���_������<:1_F�~���܇�VFw6T]E�!`'В�ʚYn�/���9R���W(���hw��V����L"�a��J#BAIr�O��m��_��x�;y��_��N>���D˛��)7me
2
- �����`L´F} ��lX(�c�x�♭˿��*��4�uR�K�
1
+ /DS���U�8?�y�p!Df x�K �cO,�+ Ng?�9�#�a-� qU69��h��icE)�����SJ`ޑj��YqY@逿58��H
@@ -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'