mobilize-ssh 1.35 → 1.36
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +3 -290
- data/lib/mobilize-ssh/tasks.rb +3 -3
- data/lib/mobilize-ssh/version.rb +1 -1
- data/lib/mobilize-ssh.rb +3 -0
- data/mobilize-ssh.gemspec +1 -1
- data/test/{code.rb → fixtures/code.rb} +0 -0
- data/test/{code.sh → fixtures/code.sh} +0 -0
- data/test/{code2.sh → fixtures/code2.sh} +0 -0
- data/test/fixtures/integration_expected.yml +37 -0
- data/test/{ssh_job_rows.yml → fixtures/integration_jobs.yml} +11 -11
- data/test/integration/mobilize-ssh_test.rb +46 -0
- data/test/test_helper.rb +1 -0
- metadata +18 -16
- data/test/mobilize-ssh_test.rb +0 -95
data/README.md
CHANGED
@@ -1,291 +1,4 @@
|
|
1
|
-
Mobilize
|
2
|
-
|
1
|
+
Mobilize
|
2
|
+
========
|
3
3
|
|
4
|
-
|
5
|
-
* move files, execute scripts, and output logs and datasets, all through
|
6
|
-
Google Spreadsheets.
|
7
|
-
|
8
|
-
Table Of Contents
|
9
|
-
-----------------
|
10
|
-
* [Overview](#section_Overview)
|
11
|
-
* [Install](#section_Install)
|
12
|
-
* [Mobilize-Ssh](#section_Install_Mobilize-Ssh)
|
13
|
-
* [Install Dirs and Files](#section_Install_Dirs_and_Files)
|
14
|
-
* [Configure](#section_Configure)
|
15
|
-
* [Ssh](#section_Configure_Ssh)
|
16
|
-
* [Git](#section_Configure_Git)
|
17
|
-
* [Start](#section_Start)
|
18
|
-
* [Create Job](#section_Start_Create_Job)
|
19
|
-
* [Run Test](#section_Start_Run_Test)
|
20
|
-
* [Meta](#section_Meta)
|
21
|
-
* [Author](#section_Author)
|
22
|
-
|
23
|
-
<a name='section_Overview'></a>
|
24
|
-
Overview
|
25
|
-
-----------
|
26
|
-
|
27
|
-
* Mobilize-ssh adds script deployment to mobilize-base.
|
28
|
-
|
29
|
-
<a name='section_Install'></a>
|
30
|
-
Install
|
31
|
-
------------
|
32
|
-
|
33
|
-
Make sure you go through all the steps in the [mobilize-base][mobilize-base]
|
34
|
-
install section first.
|
35
|
-
|
36
|
-
<a name='section_Install_Mobilize-Ssh'></a>
|
37
|
-
### Mobilize-Ssh
|
38
|
-
|
39
|
-
add this to your Gemfile:
|
40
|
-
|
41
|
-
``` ruby
|
42
|
-
gem "mobilize-ssh"
|
43
|
-
```
|
44
|
-
|
45
|
-
or do
|
46
|
-
|
47
|
-
$ gem install mobilize-ssh
|
48
|
-
|
49
|
-
for a ruby-wide install.
|
50
|
-
|
51
|
-
<a name='section_Install_Dirs_and_Files'></a>
|
52
|
-
### Dirs and Files
|
53
|
-
|
54
|
-
### Rakefile
|
55
|
-
|
56
|
-
Inside the Rakefile in your project's root dir, make sure you have:
|
57
|
-
|
58
|
-
``` ruby
|
59
|
-
require 'mobilize-base/tasks'
|
60
|
-
require 'mobilize-ssh/tasks'
|
61
|
-
```
|
62
|
-
|
63
|
-
This defines rake tasks essential to run the environment.
|
64
|
-
|
65
|
-
### Config Dir
|
66
|
-
|
67
|
-
run
|
68
|
-
|
69
|
-
$ rake mobilize_ssh:setup
|
70
|
-
|
71
|
-
This will copy over a sample ssh.yml to your config dir.
|
72
|
-
|
73
|
-
It will also add mobilize-ssh to the extensions in jobtracker.yml.
|
74
|
-
|
75
|
-
<a name='section_Configure'></a>
|
76
|
-
Configure
|
77
|
-
------------
|
78
|
-
|
79
|
-
<a name='section_Configure_Ssh'></a>
|
80
|
-
### Configure Ssh
|
81
|
-
|
82
|
-
The Ssh configuration consists of:
|
83
|
-
* nodes, identified by aliases, such as `test_node`. This alias is what you should
|
84
|
-
pass into the "node" param over in the ssh.run task.
|
85
|
-
* if no node is specified, commands will default to the first node listed.
|
86
|
-
|
87
|
-
Each node has:
|
88
|
-
* a host;
|
89
|
-
* a gateway (optional); If you don't need a gateway, remove that row from the configuration file.
|
90
|
-
* sudoers; these are user names that are allowed to pass user params
|
91
|
-
to the run call. This requires passwordless sudo for the host user.
|
92
|
-
* su_all_users true/false option, which ensures that commands are executed by the
|
93
|
-
user on the Runner. It prefixes all commands with sudo su <user> before executing the
|
94
|
-
command. This is strongly recommended if possible as it ensures users do
|
95
|
-
not overstep their permissions. This requires passwordless sudo for the
|
96
|
-
host user and accounts on the host machine for each user.
|
97
|
-
|
98
|
-
Each host and gateway has a series of ssh params:
|
99
|
-
* name - the ip address or name of the host
|
100
|
-
* key - the relative path of the ssh key file. Default is
|
101
|
-
"config/mobilize/ssh_private.key"
|
102
|
-
* port - the port to connect on
|
103
|
-
* user - the user you are connecting as
|
104
|
-
|
105
|
-
Sample ssh.yml:
|
106
|
-
|
107
|
-
``` yml
|
108
|
-
---
|
109
|
-
development:
|
110
|
-
nodes:
|
111
|
-
dev_node:
|
112
|
-
sudoers:
|
113
|
-
- sudo_user
|
114
|
-
su_all_users: true
|
115
|
-
host:
|
116
|
-
name: dev-host.com
|
117
|
-
key: config/mobilize/ssh_private.key
|
118
|
-
port: 22
|
119
|
-
user: host_user
|
120
|
-
gateway:
|
121
|
-
name: dev-gateway.com
|
122
|
-
key: config/mobilize/ssh_private.key
|
123
|
-
port: 22
|
124
|
-
user: gateway_user
|
125
|
-
test:
|
126
|
-
nodes:
|
127
|
-
test_node:
|
128
|
-
sudoers:
|
129
|
-
- sudo_user
|
130
|
-
su_all_users: true
|
131
|
-
host:
|
132
|
-
name: test-host.com
|
133
|
-
key: config/mobilize/ssh_private.key
|
134
|
-
port: 22
|
135
|
-
user: host_user
|
136
|
-
gateway:
|
137
|
-
name: test-gateway.com
|
138
|
-
key: config/mobilize/ssh_private.key
|
139
|
-
port: 22
|
140
|
-
user: gateway_user
|
141
|
-
production:
|
142
|
-
nodes:
|
143
|
-
prod_node:
|
144
|
-
sudoers:
|
145
|
-
- sudo_user
|
146
|
-
su_all_users: true
|
147
|
-
host:
|
148
|
-
name: prod-host.com
|
149
|
-
key: config/mobilize/ssh_private.key
|
150
|
-
port: 22
|
151
|
-
user: host_user
|
152
|
-
gateway:
|
153
|
-
name: prod-gateway.com
|
154
|
-
key: config/mobilize/ssh_private.key
|
155
|
-
port: 22
|
156
|
-
user: gateway_user
|
157
|
-
```
|
158
|
-
|
159
|
-
<a name='section_Configure_Git'></a>
|
160
|
-
### Configure Git
|
161
|
-
|
162
|
-
Git configuration is not required but recommended, as it allows you to
|
163
|
-
pull files directly from public or private Git repositories.
|
164
|
-
|
165
|
-
The Git configuration consists of:
|
166
|
-
* domains, identified by aliases, such as `private` and `public`.
|
167
|
-
* domains are passed into the source parameters in the git.run task.
|
168
|
-
* if no domain is specified, commands will default to the first domain listed.
|
169
|
-
|
170
|
-
Each domain has:
|
171
|
-
* a host;
|
172
|
-
* a user, which is the user used for the git clone command.
|
173
|
-
* a set of repo keys (optional) which correspond to "deploy keys" on
|
174
|
-
github. Each repo must have its own ssh key, and the public key must be
|
175
|
-
stored in the repo.
|
176
|
-
* if your repo doesn't need an ssh key to work, this is not necessary
|
177
|
-
to add.
|
178
|
-
|
179
|
-
|
180
|
-
Sample git.yml:
|
181
|
-
|
182
|
-
``` yml
|
183
|
-
---
|
184
|
-
development:
|
185
|
-
domains:
|
186
|
-
private:
|
187
|
-
host: github.private.com
|
188
|
-
user: git
|
189
|
-
repo_keys:
|
190
|
-
"repo_path_1": 'local/path/to/key1'
|
191
|
-
"repo_path_2": 'local/path/to/key1'
|
192
|
-
public:
|
193
|
-
host: github.com
|
194
|
-
user: git
|
195
|
-
test:
|
196
|
-
domains:
|
197
|
-
public:
|
198
|
-
host: github.com
|
199
|
-
user: git
|
200
|
-
private:
|
201
|
-
host: github.private.com
|
202
|
-
user: git
|
203
|
-
repo_keys:
|
204
|
-
"repo_path_1": 'local/path/to/key1'
|
205
|
-
"repo_path_2": 'local/path/to/key1'
|
206
|
-
production:
|
207
|
-
domains:
|
208
|
-
private:
|
209
|
-
host: github.private.com
|
210
|
-
user: git
|
211
|
-
repo_keys:
|
212
|
-
"repo_path_1": 'local/path/to/key1'
|
213
|
-
"repo_path_2": 'local/path/to/key1'
|
214
|
-
public:
|
215
|
-
host: github.com
|
216
|
-
user: git
|
217
|
-
```
|
218
|
-
|
219
|
-
|
220
|
-
<a name='section_Start'></a>
|
221
|
-
Start
|
222
|
-
-----
|
223
|
-
|
224
|
-
<a name='section_Start_Create_Job'></a>
|
225
|
-
### Create Job
|
226
|
-
|
227
|
-
* For mobilize-ssh, the following task is available:
|
228
|
-
* ssh.run `node: <node_alias>, cmd: <command>, user: user, sources:[*<source_paths>], params:[{<key,value pairs>}]`, which reads sources, copies them to a temporary folder on the selected node, and runs the command inside that folder.
|
229
|
-
* user, sources, node, and params are optional; cmd is required.
|
230
|
-
* specifying user will cause the command to be prefixed with sudo su <user> -c.
|
231
|
-
* non-google sources will also be read as the specified user.
|
232
|
-
* git sources can be specified with syntax `git://<domain>/<repo_owner>/<repo_name>/<file_path>`.
|
233
|
-
* Accessing private repos requires that you add the Mobilize public key to the repository as a deploy key.
|
234
|
-
* there is no user-level access control for git repositories at this time.
|
235
|
-
* domain defaults to the first one listed, if not included.
|
236
|
-
* params are also optional for all of the below. They replace tokens in sources and the command.
|
237
|
-
* params are passed as a YML or JSON, as in:
|
238
|
-
* `ssh.run source:<source_path>, params:{'date':'2013-03-01', 'unit':'widgets'}`
|
239
|
-
* this example replaces all the keys, preceded by '@' in all source hqls with the value.
|
240
|
-
* The preceding '@' is used to keep from replacing instances
|
241
|
-
of "date" and "unit" in the command/source file; you should have `@date` and `@unit` in your actual HQL
|
242
|
-
if you'd like to replace those tokens.
|
243
|
-
* not specifying node will cause the command to be run on the default node.
|
244
|
-
* ssh sources can be specified with syntax
|
245
|
-
`ssh://<node><file_full_path>`. If node is omitted, default node will be used.
|
246
|
-
* `<node><file_full_path>` and `<file_full_path>` can be used in the context of ssh.run, but if the path has only 1 slash, or none, it will try to find a google sheet or file instead.
|
247
|
-
* The test uses `ssh.run node:"test_node", cmd:"ruby code.rb", user: "root", sources:["code.rb","code.sh"]`
|
248
|
-
|
249
|
-
<a name='section_Start_Run_Test'></a>
|
250
|
-
### Run Test
|
251
|
-
|
252
|
-
To run tests, you will need to
|
253
|
-
|
254
|
-
1) go through the [mobilize-base][mobilize-base] test first
|
255
|
-
|
256
|
-
2) clone the mobilize-ssh repository
|
257
|
-
|
258
|
-
From the project folder, run
|
259
|
-
|
260
|
-
3) $ rake mobilize_ssh:setup
|
261
|
-
|
262
|
-
Copy over the config files from the mobilize-base project into the
|
263
|
-
config dir, and populate the values in the ssh.yml file, esp. the
|
264
|
-
test_node item.
|
265
|
-
|
266
|
-
You should also copy the ssh private key you wish to use into your
|
267
|
-
desired path (by default: config/mobilize/ssh_private.key), and make sure it is referenced in ssh.yml
|
268
|
-
|
269
|
-
3) $ rake test
|
270
|
-
|
271
|
-
This will populate your test Runner from mobilize-base with a sample ssh job.
|
272
|
-
|
273
|
-
The purpose of the test will be to deploy two code files, have the first
|
274
|
-
execute the second, which is a "tail /var/log/syslog" command, and write the resulting output to a gsheet.
|
275
|
-
|
276
|
-
<a name='section_Meta'></a>
|
277
|
-
Meta
|
278
|
-
----
|
279
|
-
|
280
|
-
* Code: `git clone git://github.com/dena/mobilize-ssh.git`
|
281
|
-
* Home: <https://github.com/dena/mobilize-ssh>
|
282
|
-
* Bugs: <https://github.com/dena/mobilize-ssh/issues>
|
283
|
-
* Gems: <http://rubygems.org/gems/mobilize-ssh>
|
284
|
-
|
285
|
-
<a name='section_Author'></a>
|
286
|
-
Author
|
287
|
-
------
|
288
|
-
|
289
|
-
Cassio Paes-Leme :: cpaesleme@dena.com :: @cpaesleme
|
290
|
-
|
291
|
-
[mobilize-base]: https://github.com/dena/mobilize-base
|
4
|
+
Please refer to the mobilize-server wiki: https://github.com/DeNA/mobilize-server/wiki
|
data/lib/mobilize-ssh/tasks.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
|
1
|
+
require 'yaml'
|
2
|
+
namespace :mobilize do
|
2
3
|
desc "Set up config and log folders and files"
|
3
|
-
task :
|
4
|
-
require 'yaml'
|
4
|
+
task :setup_ssh do
|
5
5
|
sample_dir = File.dirname(__FILE__) + '/../samples/'
|
6
6
|
sample_files = Dir.entries(sample_dir)
|
7
7
|
config_dir = (ENV['MOBILIZE_CONFIG_DIR'] ||= "config/mobilize/")
|
data/lib/mobilize-ssh/version.rb
CHANGED
data/lib/mobilize-ssh.rb
CHANGED
data/mobilize-ssh.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
|
-
gem.add_runtime_dependency "mobilize-base","1.
|
19
|
+
gem.add_runtime_dependency "mobilize-base","1.36"
|
20
20
|
gem.add_runtime_dependency "net-ssh"
|
21
21
|
gem.add_runtime_dependency "net-scp"
|
22
22
|
gem.add_runtime_dependency "net-ssh-gateway"
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,37 @@
|
|
1
|
+
---
|
2
|
+
- path: "Runner_mobilize(test)/jobs"
|
3
|
+
state: working
|
4
|
+
count: 1
|
5
|
+
confirmed_ats: []
|
6
|
+
- path: "Runner_mobilize(test)/jobs/ssh1/stage1"
|
7
|
+
state: working
|
8
|
+
count: 1
|
9
|
+
confirmed_ats: []
|
10
|
+
- path: "Runner_mobilize(test)/jobs/ssh1/stage2"
|
11
|
+
state: working
|
12
|
+
count: 1
|
13
|
+
confirmed_ats: []
|
14
|
+
- path: "Runner_mobilize(test)/jobs/ssh2/stage1"
|
15
|
+
state: working
|
16
|
+
count: 1
|
17
|
+
confirmed_ats: []
|
18
|
+
- path: "Runner_mobilize(test)/jobs/ssh2/stage2"
|
19
|
+
state: working
|
20
|
+
count: 1
|
21
|
+
confirmed_ats: []
|
22
|
+
- path: "Runner_mobilize(test)/jobs/ssh3/stage1"
|
23
|
+
state: working
|
24
|
+
count: 1
|
25
|
+
confirmed_ats: []
|
26
|
+
- path: "Runner_mobilize(test)/jobs/ssh3/stage2"
|
27
|
+
state: working
|
28
|
+
count: 1
|
29
|
+
confirmed_ats: []
|
30
|
+
- path: "Runner_mobilize(test)/jobs/ssh4/stage1"
|
31
|
+
state: working
|
32
|
+
count: 1
|
33
|
+
confirmed_ats: []
|
34
|
+
- path: "Runner_mobilize(test)/jobs/ssh4/stage2"
|
35
|
+
state: working
|
36
|
+
count: 1
|
37
|
+
confirmed_ats: []
|
@@ -1,25 +1,25 @@
|
|
1
1
|
---
|
2
|
-
- name:
|
2
|
+
- name: ssh1
|
3
3
|
active: true
|
4
4
|
trigger: once
|
5
5
|
status: ""
|
6
6
|
stage1: ssh.run node:"test_node", cmd:"ruby code.rb", user:"root", sources:["code.rb", "code.sh"]
|
7
|
-
stage2: gsheet.write source:"stage1", target:"
|
8
|
-
- name:
|
7
|
+
stage2: gsheet.write source:"stage1", target:"ssh1.out"
|
8
|
+
- name: ssh2
|
9
9
|
active: true
|
10
|
-
trigger: "after
|
10
|
+
trigger: "after ssh1"
|
11
11
|
status: ""
|
12
12
|
stage1: ssh.run cmd:"sh code2.sh", user:"root", sources:["code2.sh","test_node/var/log/syslog"], params:{file:"syslog"}
|
13
|
-
stage2: gsheet.write source:"stage1", target:"
|
14
|
-
- name:
|
13
|
+
stage2: gsheet.write source:"stage1", target:"ssh2.out"
|
14
|
+
- name: ssh3
|
15
15
|
active: true
|
16
|
-
trigger: "after
|
16
|
+
trigger: "after ssh2"
|
17
17
|
status: ""
|
18
18
|
stage1: ssh.run cmd:"echo '@test_param'", params:{test_param:"test param successful"}
|
19
|
-
stage2: gsheet.write source:"stage1", target:"
|
20
|
-
- name:
|
19
|
+
stage2: gsheet.write source:"stage1", target:"ssh3.out"
|
20
|
+
- name: ssh4
|
21
21
|
active: true
|
22
|
-
trigger: "after
|
22
|
+
trigger: "after ssh3"
|
23
23
|
status: ""
|
24
24
|
stage1: ssh.run node:"test_node", user:root, sources:["git://DeNA/mobilize-ssh/test/code.rb","git://DeNA/mobilize-ssh/test/code.sh"], cmd:"ruby code.rb"
|
25
|
-
stage2: gsheet.write source:stage1, target:"
|
25
|
+
stage2: gsheet.write source:stage1, target:"ssh4.out"
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
describe "Mobilize" do
|
3
|
+
# enqueues 4 workers on Resque
|
4
|
+
it "runs integration test" do
|
5
|
+
|
6
|
+
puts "restart workers"
|
7
|
+
Mobilize::Jobtracker.restart_workers!
|
8
|
+
|
9
|
+
u = TestHelper.owner_user
|
10
|
+
r = u.runner
|
11
|
+
user_name = u.name
|
12
|
+
gdrive_slot = u.email
|
13
|
+
|
14
|
+
puts "add test code"
|
15
|
+
["code.rb","code.sh","code2.sh"].each do |fixture_name|
|
16
|
+
target_url = "gsheet://#{r.title}/#{fixture_name}"
|
17
|
+
TestHelper.write_fixture(fixture_name, target_url, 'replace')
|
18
|
+
end
|
19
|
+
|
20
|
+
puts "add/update jobs"
|
21
|
+
u.jobs.each{|j| j.delete}
|
22
|
+
jobs_fixture_name = "integration_jobs"
|
23
|
+
jobs_target_url = "gsheet://#{r.title}/jobs"
|
24
|
+
TestHelper.write_fixture(jobs_fixture_name, jobs_target_url, 'update')
|
25
|
+
|
26
|
+
puts "job rows added, force enqueue runner, wait for stages"
|
27
|
+
#wait for stages to complete
|
28
|
+
expected_fixture_name = "integration_expected"
|
29
|
+
Mobilize::Jobtracker.stop!
|
30
|
+
r.enqueue!
|
31
|
+
TestHelper.confirm_expected_jobs(expected_fixture_name)
|
32
|
+
|
33
|
+
puts "update job status and activity"
|
34
|
+
r.update_gsheet(gdrive_slot)
|
35
|
+
|
36
|
+
puts "jobtracker posted data to test sheets"
|
37
|
+
['ssh1.out','ssh2.out','ssh4.out'].each do |out_name|
|
38
|
+
url = "gsheet://#{r.title}/#{out_name}"
|
39
|
+
assert TestHelper.check_output(url, 'min_length' => 100) == true
|
40
|
+
end
|
41
|
+
|
42
|
+
#shorter
|
43
|
+
url = "gsheet://#{r.title}/ssh3.out"
|
44
|
+
assert TestHelper.check_output(url, 'min_length' => 3) == true
|
45
|
+
end
|
46
|
+
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mobilize-ssh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.36'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mobilize-base
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '1.
|
21
|
+
version: '1.36'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - '='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '1.
|
29
|
+
version: '1.36'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: net-ssh
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -99,12 +99,13 @@ files:
|
|
99
99
|
- lib/samples/git.yml
|
100
100
|
- lib/samples/ssh.yml
|
101
101
|
- mobilize-ssh.gemspec
|
102
|
-
- test/code.rb
|
103
|
-
- test/code.sh
|
104
|
-
- test/code2.sh
|
105
|
-
- test/
|
102
|
+
- test/fixtures/code.rb
|
103
|
+
- test/fixtures/code.sh
|
104
|
+
- test/fixtures/code2.sh
|
105
|
+
- test/fixtures/integration_expected.yml
|
106
|
+
- test/fixtures/integration_jobs.yml
|
107
|
+
- test/integration/mobilize-ssh_test.rb
|
106
108
|
- test/redis-test.conf
|
107
|
-
- test/ssh_job_rows.yml
|
108
109
|
- test/test_helper.rb
|
109
110
|
homepage: http://github.com/dena/mobilize-ssh
|
110
111
|
licenses: []
|
@@ -120,7 +121,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
120
121
|
version: '0'
|
121
122
|
segments:
|
122
123
|
- 0
|
123
|
-
hash:
|
124
|
+
hash: 3534560230256585865
|
124
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
126
|
none: false
|
126
127
|
requirements:
|
@@ -129,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
130
|
version: '0'
|
130
131
|
segments:
|
131
132
|
- 0
|
132
|
-
hash:
|
133
|
+
hash: 3534560230256585865
|
133
134
|
requirements: []
|
134
135
|
rubyforge_project:
|
135
136
|
rubygems_version: 1.8.25
|
@@ -137,10 +138,11 @@ signing_key:
|
|
137
138
|
specification_version: 3
|
138
139
|
summary: extend mobilize-base with the ability to run files across hosts
|
139
140
|
test_files:
|
140
|
-
- test/code.rb
|
141
|
-
- test/code.sh
|
142
|
-
- test/code2.sh
|
143
|
-
- test/
|
141
|
+
- test/fixtures/code.rb
|
142
|
+
- test/fixtures/code.sh
|
143
|
+
- test/fixtures/code2.sh
|
144
|
+
- test/fixtures/integration_expected.yml
|
145
|
+
- test/fixtures/integration_jobs.yml
|
146
|
+
- test/integration/mobilize-ssh_test.rb
|
144
147
|
- test/redis-test.conf
|
145
|
-
- test/ssh_job_rows.yml
|
146
148
|
- test/test_helper.rb
|
data/test/mobilize-ssh_test.rb
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
describe "Mobilize" do
|
4
|
-
|
5
|
-
def before
|
6
|
-
puts 'nothing before'
|
7
|
-
end
|
8
|
-
|
9
|
-
# enqueues 4 workers on Resque
|
10
|
-
it "runs integration test" do
|
11
|
-
|
12
|
-
puts "restart workers"
|
13
|
-
Mobilize::Jobtracker.restart_workers!
|
14
|
-
|
15
|
-
gdrive_slot = Mobilize::Gdrive.owner_email
|
16
|
-
puts "create user 'mobilize'"
|
17
|
-
user_name = gdrive_slot.split("@").first
|
18
|
-
u = Mobilize::User.where(:name=>user_name).first
|
19
|
-
r = u.runner
|
20
|
-
|
21
|
-
rb_code_sheet = Mobilize::Gsheet.find_by_path("#{r.path.split("/")[0..-2].join("/")}/code.rb",gdrive_slot)
|
22
|
-
sh_code_sheet = Mobilize::Gsheet.find_by_path("#{r.path.split("/")[0..-2].join("/")}/code.sh",gdrive_slot)
|
23
|
-
sh_code_sheet2 = Mobilize::Gsheet.find_by_path("#{r.path.split("/")[0..-2].join("/")}/code2.sh",gdrive_slot)
|
24
|
-
[rb_code_sheet,sh_code_sheet].each {|s| s.delete if s}
|
25
|
-
|
26
|
-
puts "add test code"
|
27
|
-
rb_code_sheet = Mobilize::Gsheet.find_or_create_by_path("#{r.path.split("/")[0..-2].join("/")}/code.rb",gdrive_slot)
|
28
|
-
rb_code_tsv = File.open("#{Mobilize::Base.root}/test/code.rb").read
|
29
|
-
rb_code_sheet.write(rb_code_tsv,Mobilize::Gdrive.owner_name)
|
30
|
-
|
31
|
-
sh_code_sheet = Mobilize::Gsheet.find_or_create_by_path("#{r.path.split("/")[0..-2].join("/")}/code.sh",gdrive_slot)
|
32
|
-
sh_code_tsv = File.open("#{Mobilize::Base.root}/test/code.sh").read
|
33
|
-
sh_code_sheet.write(sh_code_tsv,Mobilize::Gdrive.owner_name)
|
34
|
-
|
35
|
-
sh_code_sheet2 = Mobilize::Gsheet.find_or_create_by_path("#{r.path.split("/")[0..-2].join("/")}/code2.sh",gdrive_slot)
|
36
|
-
sh_code_tsv2 = File.open("#{Mobilize::Base.root}/test/code2.sh").read
|
37
|
-
sh_code_sheet2.write(sh_code_tsv2,Mobilize::Gdrive.owner_name)
|
38
|
-
|
39
|
-
jobs_sheet = r.gsheet(gdrive_slot)
|
40
|
-
|
41
|
-
#delete target sheets if they exist
|
42
|
-
ssh_target_sheet_1 = Mobilize::Gsheet.find_by_path("#{r.path.split("/")[0..-2].join("/")}/test_ssh_1.out",gdrive_slot)
|
43
|
-
ssh_target_sheet_2 = Mobilize::Gsheet.find_by_path("#{r.path.split("/")[0..-2].join("/")}/test_ssh_2.out",gdrive_slot)
|
44
|
-
ssh_target_sheet_3 = Mobilize::Gsheet.find_by_path("#{r.path.split("/")[0..-2].join("/")}/test_ssh_3.out",gdrive_slot)
|
45
|
-
ssh_target_sheet_4 = Mobilize::Gsheet.find_by_path("#{r.path.split("/")[0..-2].join("/")}/test_ssh_4.out",gdrive_slot)
|
46
|
-
[ssh_target_sheet_1,ssh_target_sheet_2,ssh_target_sheet_3].each {|s| s.delete if s}
|
47
|
-
|
48
|
-
ssh_job_rows = ::YAML.load_file("#{Mobilize::Base.root}/test/ssh_job_rows.yml")
|
49
|
-
ssh_job_rows.map{|j| r.jobs(j['name'])}.each{|j| j.delete if j}
|
50
|
-
jobs_sheet.add_or_update_rows(ssh_job_rows)
|
51
|
-
|
52
|
-
puts "job row added, force enqueue runner, wait for stages"
|
53
|
-
r.enqueue!
|
54
|
-
wait_for_stages(900)
|
55
|
-
|
56
|
-
puts "update job status and activity"
|
57
|
-
r.update_gsheet(gdrive_slot)
|
58
|
-
|
59
|
-
puts "jobtracker posted data to test sheet"
|
60
|
-
ssh_target_sheet_1 = Mobilize::Gsheet.find_by_path("#{r.path.split("/")[0..-2].join("/")}/test_ssh_1.out",gdrive_slot)
|
61
|
-
ssh_target_sheet_2 = Mobilize::Gsheet.find_by_path("#{r.path.split("/")[0..-2].join("/")}/test_ssh_2.out",gdrive_slot)
|
62
|
-
ssh_target_sheet_3 = Mobilize::Gsheet.find_by_path("#{r.path.split("/")[0..-2].join("/")}/test_ssh_3.out",gdrive_slot)
|
63
|
-
ssh_target_sheet_4 = Mobilize::Gsheet.find_by_path("#{r.path.split("/")[0..-2].join("/")}/test_ssh_4.out",gdrive_slot)
|
64
|
-
|
65
|
-
assert ssh_target_sheet_1.to_tsv.length > 100
|
66
|
-
assert ssh_target_sheet_2.to_tsv.length > 100
|
67
|
-
assert ssh_target_sheet_3.to_tsv.length > 3
|
68
|
-
assert ssh_target_sheet_4.to_tsv.length > 100
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
def wait_for_stages(time_limit=600,stage_limit=120,wait_length=10)
|
73
|
-
time = 0
|
74
|
-
time_since_stage = 0
|
75
|
-
#check for 10 min
|
76
|
-
while time < time_limit and time_since_stage < stage_limit
|
77
|
-
sleep wait_length
|
78
|
-
job_classes = Mobilize::Resque.jobs.map{|j| j['class']}
|
79
|
-
if job_classes.include?("Mobilize::Stage")
|
80
|
-
time_since_stage = 0
|
81
|
-
puts "saw stage at #{time.to_s} seconds"
|
82
|
-
else
|
83
|
-
time_since_stage += wait_length
|
84
|
-
puts "#{time_since_stage.to_s} seconds since stage seen"
|
85
|
-
end
|
86
|
-
time += wait_length
|
87
|
-
puts "total wait time #{time.to_s} seconds"
|
88
|
-
end
|
89
|
-
|
90
|
-
if time >= time_limit
|
91
|
-
raise "Timed out before stage completion"
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|