fabric 0.2.0 → 0.3.0

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/README.rdoc CHANGED
@@ -64,6 +64,7 @@ This will then execute the map file as pure Ruby, and perform the necessary oper
64
64
  # Create a namespace - this will contain all the users defined in the parent,
65
65
  # but any users and roles added will only exist within this block
66
66
  map.namespace do |cool_website|
67
+
67
68
  # pass multiple IPs to add multiple hosts to this role
68
69
  cool_website.role 'memcached', '1.1.1.1', '2.2.2.2'
69
70
 
@@ -73,18 +74,22 @@ This will then execute the map file as pure Ruby, and perform the necessary oper
73
74
  # Add all our users, including from the parent, to the memcached server:
74
75
  grant :all, 'memcached'
75
76
 
77
+ # Timmy isn't allowed onto the syslogging box :(
78
+ cool_website.role 'syslog', '3.3.3.3'
79
+ grant "timmy", :all, :except => ["syslog"]
80
+
76
81
  end
77
82
  end
78
83
 
79
- == Normal Requirements
84
+ == Testing Requirements
80
85
 
81
- None - this should run straight out of the box.
86
+ You want to get involved? Great! Grab the code and check dependencies with:
82
87
 
83
- == Testing Requirements
88
+ rake check_dependencies
84
89
 
85
- Bundler (http://github.com/wycats/bundler) is used to manage dependencies, and has cached versions of those gems which are required for execution. For development, it expects those files listed in the Gemfile with :bundle => false to be installed into the version of gems that the gem will run under.
90
+ Previously, bundler (http://github.com/wycats/bundler) was used to package dependencies; unfortunately this doesn't seem to play that nicely with jeweler.
86
91
 
87
- The tests for this gem rely on being able to ssh to a target machine. This can be your development machine, but it's easier if it's a Virtual Machine (try out something from http://virtualbox.org). To run tests, first ensure you have bundled the gems with 'gem bundle', and copy the test.yml.example file to point at a machine which can be safely used to test SSH commands.
92
+ A lot of the tests this gem rely on being able to ssh to a target machine. This can be your development machine, but it's easier if it's a Virtual Machine (try out something from http://virtualbox.org). To run tests, first ensure you have bundled the gems with 'gem bundle', and copy the test.yml.example file to point at a machine which can be safely used to test SSH commands.
88
93
 
89
94
  Note: add the moment, the tests assume at various points a Linux, rather than an OS X, way of doing things.
90
95
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
data/bin/fab CHANGED
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  $:.unshift(File.dirname(__FILE__) + '/../lib/')
4
- require File.join(File.dirname(__FILE__), '..', 'vendor','gems','environment')
5
4
  require 'fabric'
6
5
 
7
6
  exit Fabric.run!(ARGV)
data/fabric.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{fabric}
8
- s.version = "0.2.0"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Sam Phillips"]
12
- s.date = %q{2010-01-23}
12
+ s.date = %q{2010-01-30}
13
13
  s.default_executable = %q{fab}
14
14
  s.description = %q{Fabric is a small ruby app to perform tasks on servers via SSH. Built around net/ssh and taking heavy inspiration from Capistrano, it allows you to create policies for server management and perform sysadmin tasks without the need for a process/daemon/dependency or even ruby being installed on the remote server.}
15
15
  s.email = %q{sam.phillips@setfiremedia.com}
@@ -21,7 +21,6 @@ Gem::Specification.new do |s|
21
21
  s.files = [
22
22
  ".document",
23
23
  ".gitignore",
24
- "Gemfile",
25
24
  "LICENSE",
26
25
  "README.rdoc",
27
26
  "Rakefile",
@@ -55,16 +54,7 @@ Gem::Specification.new do |s|
55
54
  "tasks/rdoc.rake",
56
55
  "tasks/spec.rake",
57
56
  "tasks/test.rake",
58
- "test.yml.example",
59
- "vendor/gems/ruby/1.8/cache/addressable-2.1.1.gem",
60
- "vendor/gems/ruby/1.8/cache/columnize-0.3.1.gem",
61
- "vendor/gems/ruby/1.8/cache/data_objects-0.10.0.gem",
62
- "vendor/gems/ruby/1.8/cache/dm-core-0.10.2.gem",
63
- "vendor/gems/ruby/1.8/cache/do_sqlite3-0.10.0.gem",
64
- "vendor/gems/ruby/1.8/cache/extlib-0.9.14.gem",
65
- "vendor/gems/ruby/1.8/cache/linecache-0.43.gem",
66
- "vendor/gems/ruby/1.8/cache/net-ssh-2.0.15.gem",
67
- "vendor/gems/ruby/1.8/cache/ruby-debug-base-0.10.3.gem"
57
+ "test.yml.example"
68
58
  ]
69
59
  s.homepage = %q{http://github.com/setfire/fabric}
70
60
  s.rdoc_options = ["--charset=UTF-8"]
@@ -86,12 +76,30 @@ Gem::Specification.new do |s|
86
76
  s.specification_version = 3
87
77
 
88
78
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
89
- s.add_development_dependency(%q<cucumber>, [">= 0.3.104"])
79
+ s.add_development_dependency(%q<cucumber>, ["= 0.6.1"])
80
+ s.add_development_dependency(%q<rspec>, ["= 1.2.9"])
81
+ s.add_development_dependency(%q<database_cleaner>, ["= 0.4.0"])
82
+ s.add_runtime_dependency(%q<net-ssh>, ["= 2.0.15"])
83
+ s.add_runtime_dependency(%q<dm-core>, ["= 0.10.2"])
84
+ s.add_runtime_dependency(%q<data_objects>, ["= 0.10.0"])
85
+ s.add_runtime_dependency(%q<do_sqlite3>, ["= 0.10.0"])
90
86
  else
91
- s.add_dependency(%q<cucumber>, [">= 0.3.104"])
87
+ s.add_dependency(%q<cucumber>, ["= 0.6.1"])
88
+ s.add_dependency(%q<rspec>, ["= 1.2.9"])
89
+ s.add_dependency(%q<database_cleaner>, ["= 0.4.0"])
90
+ s.add_dependency(%q<net-ssh>, ["= 2.0.15"])
91
+ s.add_dependency(%q<dm-core>, ["= 0.10.2"])
92
+ s.add_dependency(%q<data_objects>, ["= 0.10.0"])
93
+ s.add_dependency(%q<do_sqlite3>, ["= 0.10.0"])
92
94
  end
93
95
  else
94
- s.add_dependency(%q<cucumber>, [">= 0.3.104"])
96
+ s.add_dependency(%q<cucumber>, ["= 0.6.1"])
97
+ s.add_dependency(%q<rspec>, ["= 1.2.9"])
98
+ s.add_dependency(%q<database_cleaner>, ["= 0.4.0"])
99
+ s.add_dependency(%q<net-ssh>, ["= 2.0.15"])
100
+ s.add_dependency(%q<dm-core>, ["= 0.10.2"])
101
+ s.add_dependency(%q<data_objects>, ["= 0.10.0"])
102
+ s.add_dependency(%q<do_sqlite3>, ["= 0.10.0"])
95
103
  end
96
104
  end
97
105
 
@@ -1,6 +1,4 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
2
2
 
3
- require File.join(File.dirname(__FILE__), '..', '..', 'vendor','gems','environment')
4
-
5
3
  require 'fabric'
6
4
  require 'fabric-test'
data/lib/fabric/map.rb CHANGED
@@ -63,9 +63,19 @@ class Map
63
63
  end
64
64
  end
65
65
 
66
- def grant(user_opts, role_opts, opts = {})
67
- users = load_by_attribute(:users, :name, user_opts)
68
- roles = load_by_attribute(:roles, :name, role_opts)
66
+ # This method has become too long again...
67
+ def grant(user_names, role_names, role_conditions = {})
68
+ users = self.users.all
69
+ roles = self.roles.all
70
+
71
+ users = users.all(:name => user_names) unless user_names == :all
72
+ roles = roles.all(:name => role_names) unless role_names == :all
73
+
74
+ if role_conditions.include?(:except)
75
+ roles = roles.all(:name.not => role_conditions[:except])
76
+ end
77
+
78
+ raise DataMapper::ObjectNotFoundError if users.empty? or roles.empty?
69
79
 
70
80
  roles.each do |role|
71
81
  role.users += users
@@ -85,18 +95,4 @@ class Map
85
95
  user.keys.create(:public_key => File.read(path))
86
96
  end
87
97
  end
88
-
89
- def load_association(klass, opts = {})
90
- association = self.send(klass.to_sym).all(opts)
91
- raise DataMapper::ObjectNotFoundError if association.empty?
92
- association
93
- end
94
-
95
- def load_by_attribute(klass, attribute, opts = {})
96
- if opts == :all
97
- load_association(klass)
98
- else
99
- load_association(klass, attribute.to_sym => opts)
100
- end
101
- end
102
98
  end
@@ -170,6 +170,12 @@ describe Map do
170
170
  role.users.count.should == 1
171
171
  end
172
172
  end
173
+
174
+ it "should not add the user to the 'except' list when passed :all" do
175
+ @map.grant 'test_user', :all, :except => ['test']
176
+ @map.roles.first(:name => 'test').users.count.should == 0
177
+ @map.roles.first(:name => 'test again').users.count.should == 1
178
+ end
173
179
  end
174
180
 
175
181
  it "should raise a Object Not Found if an invalid user identifier is passed" do
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,3 @@
1
- require File.join(File.dirname(__FILE__), '..', 'vendor','gems','environment')
2
-
3
1
  $:.unshift File.dirname(__FILE__) + '/../lib'
4
2
 
5
3
  require 'fabric'
data/tasks/jeweler.rake CHANGED
@@ -7,7 +7,16 @@ begin
7
7
  gem.email = "sam.phillips@setfiremedia.com"
8
8
  gem.homepage = "http://github.com/setfire/fabric"
9
9
  gem.authors = ["Sam Phillips"]
10
- gem.add_development_dependency "cucumber", ">= 0.3.104"
10
+
11
+ gem.add_development_dependency "cucumber", "0.6.1"
12
+ gem.add_development_dependency "rspec", "1.2.9"
13
+ gem.add_development_dependency "database_cleaner", "0.4.0"
14
+
15
+ gem.add_dependency 'net-ssh', '2.0.15'
16
+ gem.add_dependency 'dm-core', '0.10.2'
17
+ gem.add_dependency 'data_objects', '0.10.0'
18
+ gem.add_dependency 'do_sqlite3', '0.10.0'
19
+
11
20
  end
12
21
  rescue LoadError
13
22
  puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fabric
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Phillips
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-23 00:00:00 +00:00
12
+ date: 2010-01-30 00:00:00 +00:00
13
13
  default_executable: fab
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -18,9 +18,69 @@ dependencies:
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
20
20
  requirements:
21
- - - ">="
21
+ - - "="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.3.104
23
+ version: 0.6.1
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.2.9
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: database_cleaner
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.4.0
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: net-ssh
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "="
52
+ - !ruby/object:Gem::Version
53
+ version: 2.0.15
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: dm-core
57
+ type: :runtime
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "="
62
+ - !ruby/object:Gem::Version
63
+ version: 0.10.2
64
+ version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: data_objects
67
+ type: :runtime
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "="
72
+ - !ruby/object:Gem::Version
73
+ version: 0.10.0
74
+ version:
75
+ - !ruby/object:Gem::Dependency
76
+ name: do_sqlite3
77
+ type: :runtime
78
+ version_requirement:
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "="
82
+ - !ruby/object:Gem::Version
83
+ version: 0.10.0
24
84
  version:
25
85
  description: Fabric is a small ruby app to perform tasks on servers via SSH. Built around net/ssh and taking heavy inspiration from Capistrano, it allows you to create policies for server management and perform sysadmin tasks without the need for a process/daemon/dependency or even ruby being installed on the remote server.
26
86
  email: sam.phillips@setfiremedia.com
@@ -34,7 +94,6 @@ extra_rdoc_files:
34
94
  files:
35
95
  - .document
36
96
  - .gitignore
37
- - Gemfile
38
97
  - LICENSE
39
98
  - README.rdoc
40
99
  - Rakefile
@@ -69,15 +128,6 @@ files:
69
128
  - tasks/spec.rake
70
129
  - tasks/test.rake
71
130
  - test.yml.example
72
- - vendor/gems/ruby/1.8/cache/addressable-2.1.1.gem
73
- - vendor/gems/ruby/1.8/cache/columnize-0.3.1.gem
74
- - vendor/gems/ruby/1.8/cache/data_objects-0.10.0.gem
75
- - vendor/gems/ruby/1.8/cache/dm-core-0.10.2.gem
76
- - vendor/gems/ruby/1.8/cache/do_sqlite3-0.10.0.gem
77
- - vendor/gems/ruby/1.8/cache/extlib-0.9.14.gem
78
- - vendor/gems/ruby/1.8/cache/linecache-0.43.gem
79
- - vendor/gems/ruby/1.8/cache/net-ssh-2.0.15.gem
80
- - vendor/gems/ruby/1.8/cache/ruby-debug-base-0.10.3.gem
81
131
  has_rdoc: true
82
132
  homepage: http://github.com/setfire/fabric
83
133
  licenses: []
data/Gemfile DELETED
@@ -1,18 +0,0 @@
1
- bin_path "vendor/gems/bin"
2
-
3
- gem 'net-ssh', '2.0.15'
4
- gem 'dm-core', '0.10.2'
5
- gem 'data_objects', '0.10.0'
6
- gem 'do_sqlite3', '0.10.0'
7
-
8
- # Currently forced to bundle this, otherwise internals don't load properly
9
- # Alternative is to comment out 'disable_system_gems'
10
- gem 'cucumber', '0.6.1'
11
- gem 'rspec', '1.2.9'
12
-
13
- gem 'jeweler', '1.4.0', :bundle => false
14
- gem 'database_cleaner', '0.4.0', :bundle => false
15
-
16
- gem 'ruby-debug', :bundle => false
17
-
18
- # disable_system_gems