fabric 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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