screwcap 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,8 @@
1
+ gateway :gateway1, :address => "slashdot.org", :user => "root"
2
+ server :test, :addresses => ["bongo.org","bangler.com"], :user => "root", :gateway => :gateway1
3
+ server :test2, :address => "bangler.com", :user => "root", :gateway => :gateway1
4
+
5
+ task_for :task1, :server => :test do
6
+ run "ls"
7
+ end
8
+
@@ -0,0 +1,3 @@
1
+ task_for :no_server do
2
+ run "ls"
3
+ end
@@ -0,0 +1,37 @@
1
+ command_set :create_directory_structure do
2
+ run "mkdir -p #{release_dir}"
3
+ run "mkdir -p #{deploy_dir}/shared/pids"
4
+ run "mkdir -p #{deploy_dir}/shared/system"
5
+ run "mkdir -p #{deploy_dir}/shared/log"
6
+ end
7
+
8
+ command_set :after_checkout do
9
+ run "chmod -R g+w #{release_dir}"
10
+ run "rm -rf #{release_dir}/log"
11
+ run "ln -nfs #{deploy_dir}/shared/log #{release_dir}/log"
12
+ run "ln -nfs #{deploy_dir}/shared/system #{deploy_dir}/system"
13
+ run "TZ=UTC find #{release_dir}/public/images -exec touch -t #{stamp};"
14
+ run "TZ=UTC find #{release_dir}/public/stylesheets -exec 'touch -t #{stamp};"
15
+ run "TZ=UTC find #{release_dir}/public/javascripts -exec touch -t #{stamp};"
16
+ end
17
+
18
+ command_set :svn_check_out do
19
+ create_directory_structure
20
+ run "svn co #{svn_url} --username=#{svn_user} --password=#{svn_password} -q #{release_dir}"
21
+ after_checkout
22
+ end
23
+
24
+ command_set :git_check_out do
25
+ create_directory_structure
26
+ run "git clone --depth 10 git@#{git_url}:#{git_project} #{release_dir}"
27
+ after_checkout
28
+ end
29
+
30
+ command_set :symlink do
31
+ run "rm -f #{deploy_dir}/current", "deploy[:dir]"
32
+ run "ln -s #{release_dir} #{deploy_dir}/current"
33
+ end
34
+
35
+ command_set :restart_mongrels do
36
+ run "for file in #{mongrel_pid_dir}/*.pid; do mongrel_rails stop -P ${file} 2&>1; sleep 5; done"
37
+ end
@@ -0,0 +1,40 @@
1
+ set :deploy_var, "tester"
2
+ set :deploy_var_2, "bongo"
3
+ set :deploy_var_3, ["one","two"]
4
+ server :test, :addresses => ["slashdot.org","google.com"], :user => "root"
5
+ server :test2, :addresses => ["bongo.org","bangler.com"], :user => "root"
6
+
7
+ task_for :task1, :server => :test do
8
+ set :deploy_var_2, "shasta"
9
+ set :bango, "bongo"
10
+ run "deploy dir = #{deploy_var}"
11
+ run "command 2"
12
+ run "command 3"
13
+ run :deploy_var
14
+ run :deploy_var_2
15
+ run :bango
16
+ end
17
+
18
+ task_for :task2, :server => :test do
19
+ set :deploy_var_2, "purple"
20
+ set :deploy_var_3, "mountain dew"
21
+ end
22
+
23
+ task_for :task3, :servers => [:test, :test2] do
24
+ run "ls"
25
+ local "ls" #empty in tests so it doesn't pollute
26
+ end
27
+
28
+ task_for :seq1, :server => :test do
29
+ run "1"
30
+ end
31
+
32
+ task_for :seq2, :server => :test do
33
+ run "2"
34
+ end
35
+
36
+ task_for :non_parallel, :server => :test, :parallel => false do
37
+ run "ls"
38
+ end
39
+
40
+ sequence :deploy, :tasks => [:seq1, :seq2]
@@ -0,0 +1,9 @@
1
+ server :test, :addresses => ["slashdot.org","google.com"], :user => "root", :key => "id_rsa"
2
+
3
+ command_set :has_undefined do
4
+ this_is_undefined
5
+ end
6
+
7
+ task_for :task, :server => :test do
8
+ has_undefined
9
+ end
@@ -0,0 +1,4 @@
1
+ server :test, :addresses => ["slashdot.org","google.com"], :user => "root", :key => "id_rsa"
2
+ task_for :undefined_thing, :server => :test do
3
+ this_is_undefined
4
+ end
@@ -0,0 +1,3 @@
1
+ task_for :no_server, :server => :not_defined do
2
+ run "ls"
3
+ end
@@ -0,0 +1 @@
1
+ use :unknown_file
@@ -0,0 +1 @@
1
+ use :simple_recipe
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestCommandSet < Test::Unit::TestCase
4
+
5
+ def setup
6
+ Net::SSH.stubs(:start).yields(SSHObject.new(:return_stream => :stdout, :return_data => "hostname = asdf\n"))
7
+ end
8
+
9
+ def test_command_sets
10
+ deployer = Deployer.new(:recipe_file => "./test/config/command_sets.rb", :silent => true)
11
+ assert deployer
12
+
13
+ task = deployer.__tasks.find {|t| t.name == :use_command_set_no_override }
14
+ assert task
15
+
16
+ task.__command_sets.first.instance_eval(&task.__command_sets.first.__block)
17
+ assert_equal ["tester","run with tester", "bongo"], task.__commands
18
+
19
+ task = deployer.__tasks.find {|t| t.name == :use_command_set_with_override }
20
+ assert task
21
+
22
+ assert_equal ["shasta","run with shasta", "bongo"], task.__commands
23
+
24
+ task = deployer.__tasks.find {|t| t.name == :use_command_set_complex_override }
25
+ assert task
26
+ assert_equal ["dingle"], task.__commands
27
+ end
28
+
29
+ def test_nested_command_sets
30
+ deployer = Deployer.new(:recipe_file => "./test/config/command_sets.rb", :silent => true)
31
+
32
+ task = deployer.__tasks.find {|t| t.name == :nested_command_set }
33
+ assert task
34
+ assert_equal %w(1 2 3 4), task.__commands
35
+ end
36
+
37
+ def test_undefined_value_in_command_set
38
+ assert_raise(NoMethodError) { Deployer.new(:recipe_file => "./test/config/undefined_command_set.rb", :silent => true) }
39
+ end
40
+ end
metadata ADDED
@@ -0,0 +1,171 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: screwcap
3
+ version: !ruby/object:Gem::Version
4
+ hash: 9
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ version: "0.1"
10
+ platform: ruby
11
+ authors:
12
+ - Grant Ammons
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-10-22 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: net-ssh
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 33
29
+ segments:
30
+ - 2
31
+ - 0
32
+ - 23
33
+ version: 2.0.23
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: net-ssh-gateway
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 21
45
+ segments:
46
+ - 1
47
+ - 0
48
+ - 1
49
+ version: 1.0.1
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: rubyforge
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 7
61
+ segments:
62
+ - 2
63
+ - 0
64
+ - 4
65
+ version: 2.0.4
66
+ type: :development
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ name: hoe
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: 19
77
+ segments:
78
+ - 2
79
+ - 6
80
+ - 2
81
+ version: 2.6.2
82
+ type: :development
83
+ version_requirements: *id004
84
+ description: |-
85
+ Screwcap is a library that wraps Net::SSH and makes it easy to perform actions on remote servers. It's not smart and does not make any assumptions about your setup.
86
+
87
+ The most obvious task you could use screwcap for is deploying rails applications to remote servers.
88
+ email:
89
+ - grant@pipelinedeals.com
90
+ executables:
91
+ - screwcap
92
+ extensions: []
93
+
94
+ extra_rdoc_files:
95
+ - History.txt
96
+ - Manifest.txt
97
+ files:
98
+ - Gemfile
99
+ - Gemfile.lock
100
+ - History.txt
101
+ - Manifest.txt
102
+ - README.rdoc
103
+ - Rakefile
104
+ - bin/screwcap
105
+ - lib/exts.rb
106
+ - lib/screwcap.rb
107
+ - lib/screwcap/base.rb
108
+ - lib/screwcap/command_set.rb
109
+ - lib/screwcap/deployer.rb
110
+ - lib/screwcap/sequence.rb
111
+ - lib/screwcap/server.rb
112
+ - lib/screwcap/task.rb
113
+ - lib/trollop.rb
114
+ - screwcap.gemspec
115
+ - spec/command_set_spec.rb
116
+ - spec/deployer_spec.rb
117
+ - spec/sequence_spec.rb
118
+ - spec/server_spec.rb
119
+ - spec/spec.opts
120
+ - spec/spec_helper.rb
121
+ - spec/task_spec.rb
122
+ - tasks/rspec.rake
123
+ - test/config/command_sets.rb
124
+ - test/config/expect.rb
125
+ - test/config/gateway.rb
126
+ - test/config/no_server.rb
127
+ - test/config/rails_tasks.rb
128
+ - test/config/simple_recipe.rb
129
+ - test/config/undefined_command_set.rb
130
+ - test/config/undefined_item.rb
131
+ - test/config/undefined_server.rb
132
+ - test/config/unknown_use.rb
133
+ - test/config/use.rb
134
+ - test/test_command_set.rb
135
+ has_rdoc: true
136
+ homepage: http://github.com/#{github_username}/#{project_name}
137
+ licenses: []
138
+
139
+ post_install_message:
140
+ rdoc_options:
141
+ - --main
142
+ - README.rdoc
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ hash: 3
151
+ segments:
152
+ - 0
153
+ version: "0"
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ hash: 3
160
+ segments:
161
+ - 0
162
+ version: "0"
163
+ requirements: []
164
+
165
+ rubyforge_project: screwcap
166
+ rubygems_version: 1.3.7
167
+ signing_key:
168
+ specification_version: 3
169
+ summary: Screwcap is a library that wraps Net::SSH and makes it easy to perform actions on remote servers
170
+ test_files:
171
+ - test/test_command_set.rb