spatula 0.0.7 → 0.0.8
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.textile +14 -5
- data/lib/spatula.rb +2 -1
- data/lib/spatula/prepare.rb +41 -2
- data/lib/spatula/ssh_command.rb +2 -1
- metadata +8 -4
data/README.textile
CHANGED
|
@@ -2,7 +2,7 @@ h1. Spatula
|
|
|
2
2
|
|
|
3
3
|
Spatula is a command line helper app for use with "Chef":http://www.opscode.com/chef. It currently lets you search and install cookbooks from http://cookbooks.opscode.com. It does not yet implement the full API, but that will be coming in future versions (as I need it). If you need it to support the full API *right now*, please make it do so and send me a pull request :-)
|
|
4
4
|
|
|
5
|
-
Spatula is really, really alpha. It does not handle errors at all, but it works pretty well given that you hand it the correct input. Please give it a try and pretty please fork it and make it better.
|
|
5
|
+
Spatula is really, really alpha. It does not handle errors at all, but it works pretty well given that you hand it the correct input. Please give it a try and pretty please fork it and make it better.
|
|
6
6
|
|
|
7
7
|
h1. Installation
|
|
8
8
|
|
|
@@ -11,12 +11,12 @@ You can get spatula from gemcutter.
|
|
|
11
11
|
<pre>
|
|
12
12
|
# Gemcutter:
|
|
13
13
|
# Follow the instructions on http://gemcutter.org/ then...
|
|
14
|
-
gem install spatula
|
|
14
|
+
gem install spatula
|
|
15
15
|
</pre>
|
|
16
16
|
|
|
17
17
|
h1. Usage
|
|
18
18
|
|
|
19
|
-
Spatula currently supports
|
|
19
|
+
Spatula currently supports 6 commands: search, show, install, prepare, and cook.
|
|
20
20
|
|
|
21
21
|
<pre>
|
|
22
22
|
$ spatula search apache2
|
|
@@ -25,19 +25,28 @@ apache2 Installs and configures all aspects of apache2 using Debian style symlin
|
|
|
25
25
|
|
|
26
26
|
$ spatula show apache2
|
|
27
27
|
name: apache2
|
|
28
|
-
average_rating:
|
|
28
|
+
average_rating:
|
|
29
29
|
category: Web Servers
|
|
30
30
|
created_at: 2009-10-25T23:47:55Z
|
|
31
31
|
updated_at: 2009-10-25T23:47:55Z
|
|
32
32
|
maintainer: jtimberman
|
|
33
33
|
latest_version: http://cookbooks.opscode.com/api/v1/cookbooks/apache2/versions/0_9_1
|
|
34
|
-
external_url:
|
|
34
|
+
external_url:
|
|
35
35
|
versions: http://cookbooks.opscode.com/api/v1/cookbooks/apache2/versions/0_9_1
|
|
36
36
|
description: Installs and configures all aspects of apache2 using Debian style symlinks with helper definitions
|
|
37
37
|
|
|
38
38
|
$ spatula install apache2
|
|
39
39
|
... downloads the apache2 cookbook and installs it into $(pwd)/cookbooks ...
|
|
40
40
|
... also creates a $(pwd)/cookbook_tarballs dir to store the download ...
|
|
41
|
+
|
|
42
|
+
$ spatula prepare user@192.168.1.101
|
|
43
|
+
... installs ruby, chef and dependencies on 192.168.1.101
|
|
44
|
+
... starts by adding your ssh public key to authorized_keys
|
|
45
|
+
|
|
46
|
+
$ spatula cook user@192.168.1.101 <node>
|
|
47
|
+
... uploads all of the files in the current directory to /tmp/chef-solo/
|
|
48
|
+
... expects solo.rb and <node>.json to live in ./config
|
|
49
|
+
|
|
41
50
|
</pre>
|
|
42
51
|
|
|
43
52
|
h1. About
|
data/lib/spatula.rb
CHANGED
|
@@ -47,8 +47,9 @@ module Spatula
|
|
|
47
47
|
method_options :port => nil
|
|
48
48
|
method_options :login => nil
|
|
49
49
|
method_options :identity => nil
|
|
50
|
+
method_options :upload_key => nil
|
|
50
51
|
def prepare(server)
|
|
51
|
-
Prepare.run(server, options[:port], options[:login], options[:identity])
|
|
52
|
+
Prepare.run(server, options[:port], options[:login], options[:identity], options[:upload_key])
|
|
52
53
|
end
|
|
53
54
|
|
|
54
55
|
private
|
data/lib/spatula/prepare.rb
CHANGED
|
@@ -2,15 +2,23 @@
|
|
|
2
2
|
module Spatula
|
|
3
3
|
class Prepare < SshCommand
|
|
4
4
|
def run
|
|
5
|
+
upload_ssh_key if @upload_key
|
|
5
6
|
send "run_for_#{os}"
|
|
6
7
|
end
|
|
7
8
|
|
|
8
9
|
def os
|
|
9
10
|
etc_issue = `#{ssh_command("cat /etc/issue")}`
|
|
10
|
-
|
|
11
|
+
case etc_issue
|
|
12
|
+
when /ubuntu/i
|
|
11
13
|
"ubuntu"
|
|
14
|
+
when /debian/i
|
|
15
|
+
"debian"
|
|
16
|
+
when /fedora/i
|
|
17
|
+
"fedora"
|
|
18
|
+
when ""
|
|
19
|
+
raise "Couldn't get system info from /etc/issue. Please check your SSH credentials."
|
|
12
20
|
else
|
|
13
|
-
raise "Sorry, we currently only support ubuntu
|
|
21
|
+
raise "Sorry, we currently only support prepare on ubuntu, debian & fedora. Please fork http://github.com/trotter/spatula and add support for your OS. I'm happy to incorporate pull requests."
|
|
14
22
|
end
|
|
15
23
|
end
|
|
16
24
|
|
|
@@ -23,5 +31,36 @@ module Spatula
|
|
|
23
31
|
|
|
24
32
|
ssh "sudo gem install rdoc chef ohai --no-ri --no-rdoc --source http://gems.opscode.com --source http://gems.rubyforge.org"
|
|
25
33
|
end
|
|
34
|
+
|
|
35
|
+
def run_for_debian
|
|
36
|
+
ssh 'sudo apt-get update'
|
|
37
|
+
ssh 'sudo apt-get install -y build-essential zlib1g-dev libssl-dev libreadline5-dev curl rsync screen vim'
|
|
38
|
+
ssh 'curl -L http://rubyforge.org/frs/download.php/71096/ruby-enterprise-1.8.7-2010.02.tar.gz | tar xzvf -'
|
|
39
|
+
# install REE 1.8.7 (and rubygems and irb and rake) to /usr
|
|
40
|
+
ssh 'cd ruby-enterprise-1.8.7-2010.02 && sudo echo -e "\n/usr\n" | ./installer'
|
|
41
|
+
|
|
42
|
+
ssh "sudo gem install rdoc chef ohai --no-ri --no-rdoc --source http://gems.opscode.com --source http://gems.rubyforge.org"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def run_for_fedora
|
|
46
|
+
sudo = ssh('which sudo > /dev/null 2>&1') ? 'sudo' : ''
|
|
47
|
+
ssh "#{sudo} yum install -y make gcc rsync sudo openssl-devel rubygems ruby-devel ruby-shadow"
|
|
48
|
+
ssh "#{sudo} gem install chef --no-ri --no-rdoc --source http://gems.opscode.com --source http://gems.rubyforge.org"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def upload_ssh_key
|
|
52
|
+
authorized_file = "~/.ssh/authorized_keys"
|
|
53
|
+
key_file = nil
|
|
54
|
+
%w{rsa dsa}.each do |key_type|
|
|
55
|
+
filename = "#{ENV['HOME']}/.ssh/id_#{key_type}.pub"
|
|
56
|
+
if File.exists?(filename)
|
|
57
|
+
key_file = filename
|
|
58
|
+
break
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
key = File.open(key_file).read.split(' ')[0..1].join(' ')
|
|
62
|
+
ssh "mkdir -p .ssh && echo #{key} >> #{authorized_file}"
|
|
63
|
+
ssh "cat #{authorized_file} | sort | uniq > #{authorized_file}.tmp && mv #{authorized_file}.tmp #{authorized_file}"
|
|
64
|
+
end
|
|
26
65
|
end
|
|
27
66
|
end
|
data/lib/spatula/ssh_command.rb
CHANGED
|
@@ -4,12 +4,13 @@ module Spatula
|
|
|
4
4
|
new(*args).run
|
|
5
5
|
end
|
|
6
6
|
|
|
7
|
-
def initialize(server, port=nil, login=nil, identity=nil)
|
|
7
|
+
def initialize(server, port=nil, login=nil, identity=nil, upload_key=nil)
|
|
8
8
|
@server = server
|
|
9
9
|
@port = port
|
|
10
10
|
@port_switch = port ? " -p #{port}" : ''
|
|
11
11
|
@login_switch = login ? "-l #{login}" : ''
|
|
12
12
|
@identity_switch = identity ? %Q|-i "#{identity}"| : ''
|
|
13
|
+
@upload_key = upload_key
|
|
13
14
|
end
|
|
14
15
|
|
|
15
16
|
def ssh(command)
|
metadata
CHANGED
|
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
|
5
5
|
segments:
|
|
6
6
|
- 0
|
|
7
7
|
- 0
|
|
8
|
-
-
|
|
9
|
-
version: 0.0.
|
|
8
|
+
- 8
|
|
9
|
+
version: 0.0.8
|
|
10
10
|
platform: ruby
|
|
11
11
|
authors:
|
|
12
12
|
- Trotter Cashion
|
|
@@ -14,13 +14,14 @@ autorequire:
|
|
|
14
14
|
bindir: bin
|
|
15
15
|
cert_chain: []
|
|
16
16
|
|
|
17
|
-
date: 2010-
|
|
17
|
+
date: 2010-10-26 00:00:00 -04:00
|
|
18
18
|
default_executable:
|
|
19
19
|
dependencies:
|
|
20
20
|
- !ruby/object:Gem::Dependency
|
|
21
21
|
name: thor
|
|
22
22
|
prerelease: false
|
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
|
24
|
+
none: false
|
|
24
25
|
requirements:
|
|
25
26
|
- - ">="
|
|
26
27
|
- !ruby/object:Gem::Version
|
|
@@ -35,6 +36,7 @@ dependencies:
|
|
|
35
36
|
name: json
|
|
36
37
|
prerelease: false
|
|
37
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
|
39
|
+
none: false
|
|
38
40
|
requirements:
|
|
39
41
|
- - ">="
|
|
40
42
|
- !ruby/object:Gem::Version
|
|
@@ -71,6 +73,7 @@ rdoc_options: []
|
|
|
71
73
|
require_paths:
|
|
72
74
|
- lib
|
|
73
75
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
|
+
none: false
|
|
74
77
|
requirements:
|
|
75
78
|
- - ">="
|
|
76
79
|
- !ruby/object:Gem::Version
|
|
@@ -78,6 +81,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
78
81
|
- 0
|
|
79
82
|
version: "0"
|
|
80
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
|
+
none: false
|
|
81
85
|
requirements:
|
|
82
86
|
- - ">="
|
|
83
87
|
- !ruby/object:Gem::Version
|
|
@@ -87,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
87
91
|
requirements: []
|
|
88
92
|
|
|
89
93
|
rubyforge_project:
|
|
90
|
-
rubygems_version: 1.3.
|
|
94
|
+
rubygems_version: 1.3.7
|
|
91
95
|
signing_key:
|
|
92
96
|
specification_version: 3
|
|
93
97
|
summary: Command line helper app for use with Chef
|