bone 0.2.1

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.
@@ -0,0 +1,23 @@
1
+ BONE, CHANGES
2
+
3
+ #### 0.2.1 (2009-12-13) ###############################
4
+
5
+ * FIXED: Force token generate now works
6
+ * ADDED: Friendly message when no keys
7
+ * ADDED: Quiet mode
8
+ * ADDED: Support for deleting keys
9
+
10
+
11
+ #### 0.2.0 (2009-12-13) ###############################
12
+
13
+ * CHANGE: Use POST for set command
14
+ * CHANGE: Set command returns key name instead of value
15
+ * ADDED: Better error handling
16
+ * ADDED: Friendly message when no token available.
17
+ * ADDED: bone token command
18
+ * ADDED: Bone.digest for generating valid tokens
19
+
20
+
21
+ #### 0.1.0 (2009-12-12) ###############################
22
+
23
+ Initial release
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2009 Solutious Inc, Delano Mandelbaum
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
@@ -0,0 +1,62 @@
1
+ ## Bone - 0.2 ##
2
+
3
+ **Bones it!**
4
+
5
+ == Features
6
+
7
+ * Store variables and files remotely
8
+ * Simple interface
9
+
10
+ == CLI Example
11
+
12
+ # Specify arbitrary keys and values.
13
+ $ bone set cust_id c397d204aa4e94f566d7f78c
14
+ $ bone cust_id
15
+ c397d204aa4e94f566d7f78c
16
+
17
+ # File contents are read automatically...
18
+ $ bone set redis_conf config/redis-server.conf
19
+ $ bone redis_conf
20
+ # Redis configuration file example
21
+ ...
22
+
23
+ # unless you specify -s
24
+ $ bone set -s redis_conf config/redis-server.conf
25
+ $ bone redis_conf
26
+ config/redis-server.conf
27
+
28
+ # Show all available keys
29
+ $ bone keys
30
+
31
+
32
+ == Ruby Example
33
+
34
+ require 'bone'
35
+
36
+ ENV['BONE_TOKEN'] = Bone.generate_token
37
+
38
+ Bone[:cust_id] = 'c397d204aa4e94f566d7f78c'
39
+ Bone[:redis_conf] = File.read('config/redis-server.conf')
40
+
41
+
42
+ == Installation
43
+
44
+ $ sudo gem install bone
45
+
46
+
47
+ == More Information
48
+
49
+
50
+ == Credits
51
+
52
+ * Delano Mandelbaum (http://solutious.com)
53
+
54
+
55
+ == Thanks
56
+
57
+ * Kalin Harvey for the early feedback.
58
+
59
+
60
+ == License
61
+
62
+ See LICENSE.txt
@@ -0,0 +1,55 @@
1
+
2
+ require 'rake/clean'
3
+ require 'rake/gempackagetask'
4
+ require 'hanna/rdoctask'
5
+ require 'rake/testtask'
6
+ require 'shoulda/tasks'
7
+ require 'rake/runtest'
8
+ require 'fileutils'
9
+ include FileUtils
10
+
11
+ task :default => :test
12
+
13
+
14
+ # PACKAGE =============================================================
15
+
16
+ name = "bone"
17
+ load "#{name}.gemspec"
18
+
19
+ version = @spec.version
20
+
21
+ Rake::GemPackageTask.new(@spec) do |p|
22
+ p.need_tar = true if RUBY_PLATFORM !~ /mswin/
23
+ end
24
+
25
+ task :test do
26
+ puts "Success!"
27
+ end
28
+
29
+ task :install => [ :rdoc, :package ] do
30
+ sh %{sudo gem install pkg/#{name}-#{version}.gem}
31
+ end
32
+
33
+ task :uninstall => [ :clean ] do
34
+ sh %{sudo gem uninstall #{name}}
35
+ end
36
+
37
+
38
+
39
+ Rake::RDocTask.new do |t|
40
+ t.rdoc_dir = 'doc'
41
+ t.title = @spec.summary
42
+ t.options << '--line-numbers' << '-A cattr_accessor=object'
43
+ t.options << '--charset' << 'utf-8'
44
+ t.rdoc_files.include('LICENSE.txt')
45
+ t.rdoc_files.include('README.md')
46
+ t.rdoc_files.include('CHANGES.txt')
47
+ #t.rdoc_files.include('Rudyfile') # why is the formatting f'd?
48
+ t.rdoc_files.include('bin/*')
49
+ t.rdoc_files.include('lib/**/*.rb')
50
+ end
51
+
52
+ CLEAN.include [ 'pkg', '*.gem', '.config', 'doc', 'coverage*' ]
53
+
54
+
55
+
@@ -0,0 +1,227 @@
1
+ require 'stella'
2
+
3
+ machines do
4
+
5
+ region :'us-east-1' do
6
+ ami 'ami-212ccf48' # Stella Debian 5.0, 32-bit (US)
7
+ end
8
+ region :'eu-west-1' do
9
+ ami 'ami-6ecde51a' # Alestic Debian 5.0, 32-bit (EU)
10
+ end
11
+
12
+ env :stage do
13
+
14
+ role :app do
15
+ positions 2
16
+ user :root
17
+ size 'm1.small'
18
+ end
19
+
20
+ role :gen do
21
+ user :root
22
+ size 'm1.large'
23
+ ami 'ami-7133d018'
24
+ end
25
+
26
+ role :demo do
27
+ user :root
28
+ size 'm1.small'
29
+ end
30
+
31
+ end
32
+
33
+
34
+ end
35
+
36
+
37
+
38
+ commands do
39
+ allow :apt_get, "apt-get", :y, :q
40
+ allow :gem_install, "/usr/bin/gem", "install", :n, '/usr/bin', :y, :V, "--no-rdoc", "--no-ri"
41
+ allow :gem_sources, "/usr/bin/gem", "sources"
42
+ allow :gem_uninstall, "/usr/bin/gem", "uninstall", :V
43
+ allow :update_rubygems
44
+ allow :rake
45
+ allow :thin
46
+ allow :stella
47
+ allow :rm
48
+ allow :ulimit
49
+ allow :ruby19, "/usr/local/bin/ruby"
50
+ allow :gem19_install, "/usr/local/bin/gem", "install"
51
+ allow :rackup_path do
52
+ v = [Stella::VERSION::MAJOR, Stella::VERSION::MINOR, Stella::VERSION::TINY].join('.')
53
+ "/usr/lib/ruby/gems/1.8/gems/stella-#{v}/support/sample_webapp/config.ru"
54
+ end
55
+ end
56
+
57
+ routines do
58
+
59
+ role :app do
60
+
61
+ # rudy -r app -v start
62
+ start do
63
+ remote do
64
+ #ulimit :n, '30000'
65
+ #ulimit :n
66
+ rm :f, 'thin.log'
67
+ mkdir :p, 'stats'
68
+ thin :d, :l, 'thin.log', :p, 3114, :R, rackup_path, '--stats', './stats', '--max-conns', 8192, 'start'
69
+ end
70
+ end
71
+
72
+ # rudy -r app -v stop
73
+ stop do
74
+ remote do
75
+ thin :R, rackup_path, 'stop'
76
+ sleep 1
77
+ ps 'ux'
78
+ end
79
+ end
80
+
81
+ end
82
+
83
+
84
+ # rudy -v -r gen verify ip-10-251-27-245.ec2.internal:3114
85
+ verify do
86
+ remote do |arg|
87
+ file_upload 'examples/essentials/plan.rb'
88
+ file_upload 'examples/essentials/search_terms.txt'
89
+ file_upload 'examples/essentials/logo.png'
90
+ stella :v, 'verify', :p, 'plan.rb', "#{arg.first}"
91
+ end
92
+ end
93
+
94
+ # rudy -v -r gen generate ip-10-251-27-245.ec2.internal:3114
95
+ generate do
96
+ remote do |arg|
97
+ file_upload 'examples/essentials/plan.rb'
98
+ file_upload 'examples/essentials/search_terms.txt'
99
+ file_upload 'examples/essentials/logo.png'
100
+ stella :v, 'generate', :p, 'plan.rb', :c, 1, :d, '1m', :W, "#{arg.first}"
101
+ end
102
+ end
103
+
104
+
105
+ setup do
106
+ after :sysupdate, :installdeps, :install_ruby19
107
+ end
108
+
109
+ shutdown do
110
+ end
111
+
112
+ reboot do
113
+ end
114
+
115
+ install_netperf do
116
+ #ftp://ftp.netperf.org/netperf/netperf-2.4.5.tar.bz2
117
+ end
118
+
119
+ install_rubyforge do
120
+ remote :root do
121
+ gem19_install 'stella', :V
122
+ gem_install 'stella', :V
123
+ end
124
+ end
125
+
126
+ install_github do
127
+ remote :root do
128
+ gem_sources :a, "http://gems.github.com"
129
+ gem_install 'solutious-stella'
130
+ end
131
+ end
132
+
133
+ package_gem do
134
+ local do
135
+ rm :r, :f, 'pkg'
136
+ rake 'package'
137
+ end
138
+ end
139
+
140
+ remove_rudy do
141
+ remote :root do
142
+ gem_uninstall 'stella'
143
+ rm :r, :f, '.stella'
144
+ end
145
+ end
146
+
147
+ install_gem do
148
+ before :package_gem
149
+ remote :root do
150
+ file_upload "pkg/stella-#{Stella::VERSION}.gem", "/tmp/"
151
+ gem_install "/tmp/stella-#{Stella::VERSION}.gem"
152
+ end
153
+
154
+ end
155
+
156
+ install_zlib do
157
+ remote do
158
+ wget "http://www.zlib.net/zlib-1.2.3.tar.gz"
159
+ tar :x, :z, :f, "zlib-1.2.3.tar.gz"
160
+ cd "zlib-1.2.3"
161
+ configure '--prefix=/usr/local'
162
+ make
163
+ make "install"
164
+ end
165
+ end
166
+
167
+ installdeps do
168
+ remote :root do
169
+ gem_install "test-spec", "rspec", "camping", "fcgi", "memcache-client"
170
+ gem_install "mongrel"
171
+ gem_install "ruby-openid", :v, "2.0.4" # thin requires 2.0.x
172
+ gem_install "rack", "thin", "sinatra"
173
+ end
174
+ end
175
+
176
+ install_jruby do
177
+ remote do
178
+ wget 'http://jruby.kenai.com/downloads/1.4.0RC2/jruby-bin-1.4.0RC2.tar.gz'
179
+ tar :x, :z, :f, 'jruby-bin-1.4.0RC2.tar.gz'
180
+ mv 'jruby-1.4.0RC2', '/usr/jruby'
181
+ end
182
+ end
183
+
184
+ install_ruby19 do
185
+ before :install_zlib
186
+ remote do
187
+ apt_get "install", "libssl-dev", "libreadline5-dev", "zlib1g-dev"
188
+ #wget 'ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p243.tar.bz2'
189
+ rm :r, :f, 'ruby-1.9.1-p243'
190
+ tar :x, :j, :v, :f, 'ruby-1.9.1-p243.tar.bz2'
191
+ cd 'ruby-1.9.1-p243'
192
+ configure '--prefix=/usr/local'
193
+ make
194
+ make 'install'
195
+ end
196
+ end
197
+
198
+ sysupdate {
199
+ remote {
200
+ apt_get "update"
201
+ apt_get "install", "libxml2-dev", "libxslt-dev"
202
+ apt_get "install", "build-essential", "git-core"
203
+ apt_get "install", "ruby1.8-dev", "rdoc", "libzlib-ruby", "rubygems"
204
+ apt_get "install", "libfcgi-dev", "libfcgi-ruby1.8"
205
+ apt_get "install", "joe", "siege", "httperf"
206
+ gem_sources :a, "http://gems.github.com"
207
+ mkdir :p, "/var/lib/gems/1.8/bin" # Doesn't get created, but causes Rubygems to fail
208
+ gem_install "builder", "session"
209
+ gem_install 'hoe-seattlerb'
210
+ gem_install 'rubygems-update', "-v=1.3.4"
211
+ update_rubygems
212
+ gem_install 'hoe'
213
+ }
214
+ }
215
+
216
+
217
+ end
218
+
219
+
220
+ defaults do
221
+ zone :'us-east-1a'
222
+ environment :stage
223
+ role :app
224
+ color true
225
+ user :root
226
+ end
227
+
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # Put our local lib in first place
4
+ BASE_PATH = File.expand_path File.join(File.dirname(__FILE__), '..')
5
+ lib_dir = File.join(BASE_PATH, 'lib')
6
+ $:.unshift lib_dir
7
+
8
+ require 'bone'
9
+
10
+ Bone.require_vendor 'drydock', '0.6.8'
11
+
12
+ require 'bone/cli'
13
+
14
+ # Command-line interface for bin/stella
15
+ class Bone::CLI::Definition
16
+ extend Drydock
17
+
18
+ default :keys
19
+ trawler :get
20
+
21
+ global :t, :token, String, "Specify a bone token (override BONE_TOKEN environment variable)"
22
+ global :q, :quiet, "Less output"
23
+
24
+ global :v, :version, "Display version" do
25
+ puts "Bone: #{Bone::VERSION} (api: #{Bone::APIVERSION})"
26
+ exit
27
+ end
28
+
29
+ global :D, :debug, "Enable debug mode" do
30
+ Drydock.debug true
31
+ Bone.enable_debug
32
+ end
33
+
34
+ about "Get a value for the given key"
35
+ usage "bone get keyname"
36
+ usage "bone keyname"
37
+ command :get => Bone::CLI
38
+
39
+ about "Set a new key/value pair"
40
+ usage "bone set keyname keyvalue"
41
+ usage "bone set keyname=keyvalue"
42
+ usage "bone set keyname path/2/file"
43
+ option :s, :string, "Assume value is a string even if file name exists"
44
+ command :set => Bone::CLI
45
+
46
+ about "Delete a key/value pair"
47
+ usage "bone del keyname"
48
+ command :del => Bone::CLI
49
+ command_alias :del, :rem
50
+ command_alias :del, :delete
51
+
52
+ about "Display all available keys"
53
+ usage "bone keys"
54
+ usage "bone keys keyname"
55
+ command :keys => Bone::CLI
56
+
57
+ about "Display the token or generate a new one"
58
+ usage "bone token"
59
+ option :f, :force, "Force generating a new token"
60
+ command :token => Bone::CLI
61
+
62
+ end
63
+
64
+ begin
65
+ Drydock.run!(ARGV, STDIN) if Drydock.run? && !Drydock.has_run?
66
+ rescue Bone::BadBone => ex
67
+ puts "Invalid token: #{ex.message}"
68
+ puts "Run the following command to generate a new one:", "$ #{$0} token"
69
+ STDERR.puts ex.backtrace if Bone.debug?
70
+ exit 1
71
+ rescue Bone::Problem => ex
72
+ puts ex.message
73
+ STDERR.puts ex.backtrace if Bone.debug?
74
+ exit 1
75
+ rescue Drydock::ArgError, Drydock::OptError => ex
76
+ STDERR.puts ex.message
77
+ STDERR.puts ex.usage
78
+ rescue Drydock::InvalidArgument => ex
79
+ STDERR.puts ex.message
80
+ rescue Drydock::UnknownCommand => ex
81
+ STDERR.puts "Unknown command: %s" % ex.name
82
+ rescue Interrupt
83
+ puts $/, "Exiting... "
84
+ exit 1
85
+ rescue => ex
86
+ STDERR.puts "ERROR (#{ex.class.to_s}): #{ex.message}"
87
+ STDERR.puts ex.backtrace if Drydock.debug?
88
+ end
89
+