capistrano-provisioning 0.0.4 → 0.0.6

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.6
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{capistrano-provisioning}
8
- s.version = "0.0.4"
8
+ s.version = "0.0.6"
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-06-16}
12
+ s.date = %q{2010-06-29}
13
13
  s.description = %q{Capistrano Provisioning is an extension to Capistrano that allows you to define clusters of servers and run provisioning tasks on them, such as installing users. It is a replacement for the fabric gem (http://rubygems.org/gems/fabric).}
14
14
  s.email = %q{sam@samdanavia.com}
15
15
  s.extra_rdoc_files = [
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
31
31
  "pkg/capistrano-provisioning-0.0.0.gem",
32
32
  "pkg/capistrano-provisioning-0.0.1.gem",
33
33
  "pkg/capistrano-provisioning-0.0.3.gem",
34
+ "pkg/capistrano-provisioning-0.0.4.gem",
34
35
  "spec/cluster_spec.rb",
35
36
  "spec/namespaces_spec.rb",
36
37
  "spec/recipes_spec.rb",
@@ -13,12 +13,15 @@ module CapistranoProvisioning
13
13
  abort "Aborting - Cannot install user #{self.name} as no server specified" unless opts[:server]
14
14
  abort "Aborting - Could not find key for #{self.name} at #{local_key_file_path}" unless key
15
15
 
16
- logger.debug "installing #{self.name} on #{opts[:server]}"
16
+ self.server = opts[:server]
17
17
 
18
- self.create_account_on_server(opts[:server]) unless self.account_exists?(opts[:server])
19
- self.create_ssh_config_directory(opts[:server])
20
- self.update_authorized_keys(opts[:server])
21
- self.add_account_to_groups(opts[:server])
18
+ logger.debug "installing #{self.name} on #{self.server}"
19
+
20
+ self.create_account_on_server unless self.account_exists?
21
+ self.create_ssh_config_directory
22
+ self.update_authorized_keys
23
+ self.set_ssh_config_permissions
24
+ self.add_account_to_groups
22
25
  end
23
26
 
24
27
  def groups
@@ -26,7 +29,9 @@ module CapistranoProvisioning
26
29
  end
27
30
 
28
31
  protected
29
- def account_exists?(server)
32
+ attr_accessor :server
33
+
34
+ def account_exists?(server = self.server)
30
35
  begin
31
36
  if capture("id #{self.name}", :hosts => server)
32
37
  true
@@ -43,35 +48,36 @@ module CapistranoProvisioning
43
48
  File.read(local_key_file_path) if File.exists?(local_key_file_path)
44
49
  end
45
50
 
46
- def create_account_on_server(server)
51
+ def create_account_on_server(server = self.server)
47
52
  run "#{sudo} /usr/sbin/useradd -m #{name}", :pty => true, :hosts => server
48
53
  end
49
54
 
50
- def add_account_to_groups(server)
55
+ def add_account_to_groups(server = self.server)
51
56
  self.groups.each do |group|
52
57
  run "#{sudo} /usr/sbin/usermod -a -G#{group} #{self.name}", :pty => true, :hosts => server
53
58
  end
54
59
  end
55
60
 
56
- def create_ssh_config_directory(server)
61
+ def create_ssh_config_directory(server = self.server)
57
62
  # Actual dirt
58
63
  commands = <<-COMMANDS
59
64
  sudo su root -c 'if [ ! -d #{ssh_config_directory_path} ]; then
60
65
  sudo mkdir #{ssh_config_directory_path};
61
66
  fi';
62
- #{sudo} chown #{name} #{ssh_config_directory_path} &&
63
- #{sudo} chmod 700 #{ssh_config_directory_path}
64
67
  COMMANDS
65
68
 
66
69
  run commands, :pty => true, :hosts => server
67
70
  end
68
71
 
69
- def update_authorized_keys(server)
70
- commands = <<-COMMANDS
71
- #{sudo} touch #{authorized_keys_file_path} &&
72
- echo '#{key}' | sudo tee #{authorized_keys_file_path}
73
- COMMANDS
74
- run commands, :pty => true, :hosts => server
72
+ def update_authorized_keys(server = self.server)
73
+ tmp_location = "/tmp/#{self.name}.pub"
74
+ put key, tmp_location
75
+ run "#{sudo} mv #{tmp_location} #{authorized_keys_file_path}", :pty => true, :hosts => server
76
+ end
77
+
78
+ def set_ssh_config_permissions(server = self.server)
79
+ run "#{sudo} chown -R #{name} #{ssh_config_directory_path}", :pty => true, :hosts => server
80
+ run "#{sudo} chmod -R 700 #{ssh_config_directory_path}", :pty => true, :hosts => server
75
81
  end
76
82
 
77
83
  def authorized_keys_file_path
@@ -94,6 +100,12 @@ module CapistranoProvisioning
94
100
  protected
95
101
  # This isn't the best way to get to the run/logger stuff in this class -
96
102
  # need to figure out a better way to do this, or a way to not need to.
103
+
104
+
105
+
106
+ def put(data, path, options={})
107
+ self.config.put(data, path, options)
108
+ end
97
109
 
98
110
  def sudo(*parameters, &block)
99
111
  self.config.sudo(*parameters, &block)
data/spec/recipes_spec.rb CHANGED
@@ -1,17 +1,48 @@
1
1
  require 'spec_helper'
2
2
 
3
- # TODO: Not sure how to test this yet
3
+ # Fake a running instance of Capistrano
4
+ Capistrano::Configuration.instance = Capistrano::Configuration.new
5
+ require 'capistrano-provisioning/recipes'
4
6
 
5
- describe "Recipes" do
7
+ describe "Recipes" do
8
+ let(:config) { Capistrano::Configuration.instance }
9
+
6
10
  context "namespace" do
7
- it "should create an :all task which loads all servers in that namespace"
11
+ it "should create an :all task which loads all servers in that namespace" do
12
+ pending("Currently failing due to inheritance confusion")
13
+
14
+ config.load do
15
+ namespace :test_namespace do
16
+ cluster :test_cluster, 'cluster1.example.com'
17
+ end
18
+ end
19
+
20
+ puts config.tasks.keys.inspect.gsub("<", '&lt;')
21
+ config.namespaces.should include(:test_namespace)
22
+ config.tasks.keys.should include(:test_namespace)
23
+ end
8
24
  end
9
25
 
10
- context "cluster definition" do
11
- it "should create a task to set the servers"
12
-
13
- it "should create a task to bootstrap the servers"
26
+ context "global" do
27
+ it "should create a task to bootstrap the servers" do
28
+ config.tasks.keys.should include(:run_bootstrap)
29
+ end
30
+
31
+ it "should create a task to install users on the servers" do
32
+ config.tasks.keys.should include(:install_users)
33
+ end
14
34
 
15
- it "should create a task to install users on the servers"
35
+ it "should create a task to preview users that will be installed" do
36
+ config.tasks.keys.should include(:install_users)
37
+ end
38
+ end
39
+
40
+ context "cluster definition" do
41
+ it "should create a task to set the servers" do
42
+ pending("Currently failing due to inheritance confusion")
43
+
44
+ config.cluster :test_cluster
45
+ config.tasks.keys.should include(:test_cluster)
46
+ end
16
47
  end
17
48
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 4
9
- version: 0.0.4
8
+ - 6
9
+ version: 0.0.6
10
10
  platform: ruby
11
11
  authors:
12
12
  - Sam Phillips
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-06-16 00:00:00 +01:00
17
+ date: 2010-06-29 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -69,6 +69,7 @@ files:
69
69
  - pkg/capistrano-provisioning-0.0.0.gem
70
70
  - pkg/capistrano-provisioning-0.0.1.gem
71
71
  - pkg/capistrano-provisioning-0.0.3.gem
72
+ - pkg/capistrano-provisioning-0.0.4.gem
72
73
  - spec/cluster_spec.rb
73
74
  - spec/namespaces_spec.rb
74
75
  - spec/recipes_spec.rb