screwcap 0.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,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