cap-strap 0.0.9 → 0.1.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.
Potentially problematic release.
This version of cap-strap might be problematic. Click here for more details.
- data/README.md +17 -12
- data/cap-strap.gemspec +1 -1
- data/config/deploy.rb +3 -2
- data/lib/cap-strap/helpers.rb +12 -2
- data/lib/cap-strap/recipes/bootstrap.rb +50 -43
- data/spec/bootstrap_spec.rb +15 -21
- metadata +17 -17
data/README.md
CHANGED
@@ -8,7 +8,6 @@ deploy key.
|
|
8
8
|
|
9
9
|
Currently cap-strap has only been tested on Ubuntu 10.04 and 10.10.
|
10
10
|
|
11
|
-
|
12
11
|
## Installation
|
13
12
|
|
14
13
|
Add this line to your application's Gemfile:
|
@@ -21,10 +20,13 @@ And then execute:
|
|
21
20
|
|
22
21
|
## Usage
|
23
22
|
|
24
|
-
|
25
|
-
the
|
23
|
+
####Upload deploy_key for deploy_user
|
24
|
+
Set the relative path to the deploy_key and run:
|
25
|
+
`$ cap <stage> bootstrap:upload_deploy_key`
|
26
26
|
|
27
|
-
|
27
|
+
####Upload authorized keys for deploy_user
|
28
|
+
Set the relative path to the deploy_key and run:
|
29
|
+
`$cap <stage> bootstrap:upload_authorized_keys`
|
28
30
|
|
29
31
|
In your deploy.rb, you may override the following variables:
|
30
32
|
|
@@ -32,11 +34,14 @@ You may specificy any additional packages for installation by setting the :packa
|
|
32
34
|
|
33
35
|
Note: Paths are relative to the root
|
34
36
|
|
35
|
-
* `set :
|
36
|
-
* `set :
|
37
|
-
* `set :
|
38
|
-
* `set :
|
39
|
-
* `set :
|
37
|
+
* `set :bootstrap_user, "<name of root user for bootstraping>"` - default: prompt for user input
|
38
|
+
* `set :bootstrap_password, "<password associated with the root user>"` - default: prompt for user input
|
39
|
+
* `set :deploy_user, "<name of user for future deployes>"` - default: 'deploy'
|
40
|
+
* `set :deploy_user_password, "<password for deploy user>"` - default: skips. Recommend using authorized keys
|
41
|
+
* `set :authorized_keys_file, "<location of authorized keys>"` - skips if not specified
|
42
|
+
* `set :deploy_key_file, "<location of deploy-key>"` - skips if not specified
|
43
|
+
* `set :known_hosts, "<string of known hosts">` - default: github.com
|
44
|
+
* `set :default_ruby, "1.9.3-p125"` - default: '1.9.3-p125'
|
40
45
|
* `set :rubies, [
|
41
46
|
"ree-1.8.7-2012.02",
|
42
47
|
{
|
@@ -44,13 +49,13 @@ Note: Paths are relative to the root
|
|
44
49
|
:patch => "falcon,debug --force-autoconf -j 3"
|
45
50
|
}
|
46
51
|
]`
|
47
|
-
* `set :gemset, "<default gemset>"` -
|
48
|
-
* `set :global_gems, ["bundler", "other-gem"]` -
|
52
|
+
* `set :gemset, "<default gemset>"` - default 'global'
|
53
|
+
* `set :global_gems, ["bundler", "other-gem"]` - default: ["bundler"]
|
49
54
|
* `set :packages, ["git", "vim"]` - default: []
|
50
55
|
|
51
56
|
Note: Run from project root
|
52
57
|
|
53
|
-
$ cap <stage> bootstrap
|
58
|
+
$ cap <stage> bootstrap
|
54
59
|
|
55
60
|
## Testing
|
56
61
|
|
data/cap-strap.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "cap-strap"
|
6
|
-
s.version = "0.0
|
6
|
+
s.version = "0.1.0"
|
7
7
|
s.authors = ["Shaun Dern"]
|
8
8
|
s.email = ["shaun@substantial.com"]
|
9
9
|
s.homepage = "http://github.com/substantial/cap-strap"
|
data/config/deploy.rb
CHANGED
@@ -4,8 +4,8 @@ server "localhost", :test
|
|
4
4
|
|
5
5
|
set :port, 2222
|
6
6
|
|
7
|
-
set :
|
8
|
-
set :
|
7
|
+
set :bootstrap_user, "vagrant"
|
8
|
+
set :bootstrap_password, "vagrant"
|
9
9
|
|
10
10
|
set :gemset, "build-agent"
|
11
11
|
set :rubies, [
|
@@ -19,6 +19,7 @@ set :rubies, [
|
|
19
19
|
set :default_ruby, "1.9.3-p125-perf"
|
20
20
|
|
21
21
|
set :deploy_user, "deploy"
|
22
|
+
set :deploy_user_password, "vagrant"
|
22
23
|
set :group, "rvm"
|
23
24
|
set :authorized_keys_file, "config/test-authorized-keys"
|
24
25
|
set :deploy_key_file, "config/test-deploy-key"
|
data/lib/cap-strap/helpers.rb
CHANGED
@@ -17,9 +17,12 @@ def install_packages(packages)
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
def create_user(user)
|
20
|
+
def create_user(user, password)
|
21
21
|
unless user_exists?(user)
|
22
|
-
|
22
|
+
command = "useradd -s /bin/bash -d /home/#{user}"
|
23
|
+
command << " -p `perl -e 'print crypt(#{password}, salt)'`" if password
|
24
|
+
command << " -m #{user}"
|
25
|
+
sudo command
|
23
26
|
end
|
24
27
|
end
|
25
28
|
|
@@ -85,3 +88,10 @@ def gemrc
|
|
85
88
|
gem: --no-ri --no-rdoc
|
86
89
|
TEXT
|
87
90
|
end
|
91
|
+
|
92
|
+
def make_directory(location, opts={})
|
93
|
+
sudo "mkdir -p #{location}"
|
94
|
+
if opts[:mode]
|
95
|
+
sudo "chmod #{opts[:mode]} #{location}"
|
96
|
+
end
|
97
|
+
end
|
@@ -5,63 +5,71 @@ require 'capistrano/cli'
|
|
5
5
|
module Capistrano::CapStrap
|
6
6
|
module Bootstrap
|
7
7
|
def self.load_into(configuration)
|
8
|
-
|
9
|
-
before 'rvm:install_system_wide_rvm', 'bootstrap:install_rvm_dependencies'
|
10
|
-
|
11
|
-
rvm_packages = %w( build-essential openssl libreadline6 libreadline6-dev
|
8
|
+
rvm_packages = %w( build-essential openssl libreadline6 libreadline6-dev
|
12
9
|
curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev
|
13
10
|
libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf
|
14
11
|
libc6-dev ncurses-dev automake libtool bison subversion )
|
15
12
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
configuration.load do
|
14
|
+
|
15
|
+
namespace :bootstrap do
|
16
|
+
before 'rvm:install_system_wide_rvm', 'bootstrap:install_rvm_dependencies'
|
17
|
+
|
18
|
+
_cset(:deploy_user, "deploy")
|
19
|
+
_cset(:bootstrap_user) { Capistrano::CLI.ui.ask("bootstrap root user: ") }
|
20
|
+
_cset(:bootstrap_password) { Capistrano::CLI.ui.ask("bootstrap root user password: ") }
|
20
21
|
_cset(:known_hosts) { default_known_hosts }
|
21
22
|
_cset(:packages) { [] }
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
task :default do
|
26
|
-
rvm.default
|
27
|
-
bootstrap.create_deploy_user
|
28
|
-
bootstrap.upload_deploy_authorized_keys
|
29
|
-
bootstrap.add_known_hosts
|
30
|
-
bootstrap.add_rvm_to_sudoers
|
31
|
-
bootstrap.upload_deploy_key
|
32
|
-
bootstrap.install_specified_packages
|
33
|
-
end
|
24
|
+
set (:user) { bootstrap_user }
|
25
|
+
set (:password) { bootstrap_password }
|
34
26
|
|
35
|
-
|
36
|
-
|
37
|
-
|
27
|
+
desc "Bootstraps a fresh box. Install RVM, create the deploy user, upload keys."
|
28
|
+
task :default do
|
29
|
+
set (:user) { bootstrap_user }
|
30
|
+
set (:password) { bootstrap_password }
|
31
|
+
rvm.default
|
32
|
+
bootstrap.create_deploy_user
|
33
|
+
bootstrap.upload_deploy_authorized_keys
|
34
|
+
bootstrap.add_known_hosts
|
35
|
+
bootstrap.add_rvm_to_sudoers
|
36
|
+
bootstrap.upload_deploy_key
|
37
|
+
bootstrap.install_specified_packages
|
38
|
+
end
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
add_user_to_group(deploy_user, "admin")
|
43
|
-
end
|
40
|
+
task :install_specified_packages do
|
41
|
+
install_packages(packages)
|
42
|
+
end
|
44
43
|
|
45
|
-
|
44
|
+
task :create_deploy_user do
|
45
|
+
create_user(deploy_user, deploy_user_password)
|
46
|
+
add_user_to_group(deploy_user, "rvm")
|
47
|
+
add_user_to_group(deploy_user, "admin")
|
48
|
+
end
|
49
|
+
|
50
|
+
desc "Upload authorized keys for the deploy_user. Override by setting :authorized_keys_file. This
|
46
51
|
is the relative path from the project root"
|
47
52
|
task :upload_deploy_authorized_keys do
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
53
|
+
if authorized_keys_file.empty?
|
54
|
+
puts "No authorized keys file, skipping"
|
55
|
+
else
|
56
|
+
begin
|
57
|
+
authorized_keys_path = File.join(File.expand_path(Dir.pwd), authorized_keys_file)
|
58
|
+
puts "************Looking for Authorized Keys at: #{authorized_keys_path}"
|
59
|
+
authorized_keys = File.read(authorized_keys_file)
|
60
|
+
put(authorized_keys, "authorized_keys", :mode => "0600")
|
61
|
+
make_directory("/home/#{deploy_user}/.ssh", :mode => "0700")
|
62
|
+
sudo "mv ~/authorized_keys /home/#{deploy_user}/.ssh/"
|
63
|
+
sudo "chown -R #{deploy_user}:rvm /home/#{deploy_user}/.ssh"
|
64
|
+
rescue Exception => e
|
65
|
+
puts e
|
66
|
+
end
|
59
67
|
end
|
60
68
|
end
|
61
69
|
|
62
70
|
task :add_known_hosts do
|
71
|
+
make_directory("/home/#{deploy_user}/.ssh", :mode => "0700")
|
63
72
|
put(known_hosts, "known_hosts", :mode => "0644")
|
64
|
-
sudo "mkdir -p /home/#{deploy_user}/.ssh"
|
65
73
|
sudo "mv ~/known_hosts /home/#{deploy_user}/.ssh/known_hosts"
|
66
74
|
sudo "chown -R #{deploy_user}:rvm /home/#{deploy_user}/.ssh"
|
67
75
|
end
|
@@ -84,8 +92,7 @@ module Capistrano::CapStrap
|
|
84
92
|
puts "************Looking for Deploy key at: #{deploy_key_path}"
|
85
93
|
id_rsa = File.read(deploy_key_path)
|
86
94
|
put(id_rsa, "id_rsa", :mode => "0600")
|
87
|
-
|
88
|
-
sudo "chmod 0700 /home/#{deploy_user}/.ssh"
|
95
|
+
make_directory("/home/#{deploy_user}/.ssh", :mode => "0700")
|
89
96
|
sudo "mv ~/id_rsa /home/#{deploy_user}/.ssh/"
|
90
97
|
sudo "chown -R #{deploy_user}:rvm /home/#{deploy_user}/.ssh"
|
91
98
|
rescue Exception => e
|
@@ -93,7 +100,7 @@ module Capistrano::CapStrap
|
|
93
100
|
end
|
94
101
|
end
|
95
102
|
end
|
96
|
-
|
103
|
+
end
|
97
104
|
end
|
98
105
|
end
|
99
106
|
end
|
data/spec/bootstrap_spec.rb
CHANGED
@@ -3,6 +3,10 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
3
3
|
describe Capistrano::CapStrap::Bootstrap do
|
4
4
|
load_capistrano_recipe(Capistrano::CapStrap::Bootstrap)
|
5
5
|
|
6
|
+
before do
|
7
|
+
Capistrano::CLI.ui.stubs(:ask).returns('prompt')
|
8
|
+
end
|
9
|
+
|
6
10
|
describe "tasks" do
|
7
11
|
it "has a default task" do
|
8
12
|
recipe.must_have_task "bootstrap:default"
|
@@ -34,44 +38,34 @@ describe Capistrano::CapStrap::Bootstrap do
|
|
34
38
|
end
|
35
39
|
|
36
40
|
describe "default variables" do
|
37
|
-
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
it "prompts for a bootstrap user" do
|
42
|
-
recipe.fetch(:user).must_equal 'prompt'
|
43
|
-
end
|
44
|
-
|
45
|
-
it "prompts for a deploy user" do
|
46
|
-
recipe.fetch(:deploy_user).must_equal 'prompt'
|
41
|
+
it "bootstrap user" do
|
42
|
+
recipe.fetch(:bootstrap_user).must_equal 'prompt'
|
47
43
|
end
|
48
44
|
|
49
|
-
it
|
50
|
-
recipe.fetch(:
|
45
|
+
it "bootstrap user password" do
|
46
|
+
recipe.fetch(:bootstrap_password).must_equal 'prompt'
|
51
47
|
end
|
52
48
|
|
53
|
-
it "
|
54
|
-
recipe.fetch(:
|
49
|
+
it "deploy user" do
|
50
|
+
recipe.fetch(:deploy_user).must_equal 'deploy'
|
55
51
|
end
|
56
52
|
|
57
|
-
it "packages
|
53
|
+
it "packages" do
|
58
54
|
recipe.fetch(:packages).must_be_empty
|
59
55
|
end
|
60
56
|
end
|
61
57
|
|
62
58
|
describe "variables set" do
|
63
59
|
before do
|
64
|
-
recipe.set(:user, "foo")
|
65
|
-
recipe.set(:deploy_user, "bar")
|
66
60
|
recipe.set(:known_hosts, "baz")
|
67
61
|
end
|
68
62
|
|
69
|
-
it "
|
70
|
-
recipe.fetch(:user).must_equal
|
63
|
+
it "user gets bootstrap_user" do
|
64
|
+
recipe.fetch(:user).must_equal recipe.fetch(:bootstrap_user)
|
71
65
|
end
|
72
66
|
|
73
|
-
it "
|
74
|
-
recipe.fetch(:
|
67
|
+
it "password gets bootstrap_password" do
|
68
|
+
recipe.fetch(:password).must_equal recipe.fetch(:bootstrap_password)
|
75
69
|
end
|
76
70
|
|
77
71
|
it "replaces known_hosts with ones that are set" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cap-strap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-04-26 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70359382906800 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.9.2.2
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70359382906800
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: minitest
|
27
|
-
requirement: &
|
27
|
+
requirement: &70359382904140 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 2.12.1
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70359382904140
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: minitest-capistrano
|
38
|
-
requirement: &
|
38
|
+
requirement: &70359382903240 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.0.8
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70359382903240
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: minitest-colorize
|
49
|
-
requirement: &
|
49
|
+
requirement: &70359382901880 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.0.4
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70359382901880
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: guard-minitest
|
60
|
-
requirement: &
|
60
|
+
requirement: &70359382901200 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.5.0
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70359382901200
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mocha
|
71
|
-
requirement: &
|
71
|
+
requirement: &70359382900200 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.11.3
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70359382900200
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: vagrant
|
82
|
-
requirement: &
|
82
|
+
requirement: &70359382915520 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.0.2
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70359382915520
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: capistrano
|
93
|
-
requirement: &
|
93
|
+
requirement: &70359382914200 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: 2.0.0
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70359382914200
|
102
102
|
description: Bootstrap a machine. Install packages, create a deploy user, upload authorized
|
103
103
|
keys and deploy key. Uses RVM to install desired rubies, with patch support.
|
104
104
|
email:
|