minicron 0.7.6 → 0.7.7
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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/minicron/constants.rb +1 -1
- data/lib/minicron/cron.rb +26 -1
- data/lib/minicron/hub/assets/app/controllers/hosts.js +3 -2
- data/lib/minicron/hub/controllers/api/jobs.rb +35 -11
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f28365c7bfec3d1aee7154ca2c0d92c71c9606b3
|
4
|
+
data.tar.gz: 0764cab857b36939ca2a24482549a48fd2e5f0e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68942a54bad7846305ce191398a84def24ba9ecad774edd83ab9195a148363ab4b22faa51bc1ae1eb1d198a2aa31afd6f5c4f401c997dd7be8978d7534ff9247
|
7
|
+
data.tar.gz: 11736bb3645b87ed55ae95744a61022f0044f7706c1d51071cd5aaf211929b2b6056edbd17b53059488747cc37f1b6f54faa21c339e88d44e4077d406123b235
|
data/README.md
CHANGED
@@ -107,7 +107,7 @@ but I encourage you to give it a try in a non critical environment and help me t
|
|
107
107
|
|
108
108
|
2. On some distributions you may need to install the ````ruby-dev```` and ````build-essential```` packages
|
109
109
|
|
110
|
-
3. To install the latest release (currently 0.7.
|
110
|
+
3. To install the latest release (currently 0.7.7) you can ````gem install minicron````, depending on your ruby setup
|
111
111
|
you may need to run this with ````sudo````
|
112
112
|
|
113
113
|
4. Set your database configuration options in ````/etc/minicron.toml````, you can use the [minicron.toml](https://github.com/jamesrwhite/minicron/blob/master/config/minicron.toml) as a guide on what options are configurable
|
data/lib/minicron/constants.rb
CHANGED
data/lib/minicron/cron.rb
CHANGED
@@ -149,7 +149,7 @@ module Minicron
|
|
149
149
|
|
150
150
|
# Throw an exception if we can't see our new line at the end of the file
|
151
151
|
if tail != line
|
152
|
-
fail Exception, "Expected to find '#{line}' at
|
152
|
+
fail Exception, "Expected to find '#{line}' at EOF but found '#{tail}'"
|
153
153
|
end
|
154
154
|
end
|
155
155
|
|
@@ -173,6 +173,31 @@ module Minicron
|
|
173
173
|
find_and_replace(conn, find, replace)
|
174
174
|
end
|
175
175
|
|
176
|
+
# Update the user for a job and all its schedules
|
177
|
+
#
|
178
|
+
# @param job [Minicron::Hub::Job] an instance of a job model including the schedule relation
|
179
|
+
# @param old_user [String] the old job user as a string
|
180
|
+
# @param new_user [String] the new job user as a string
|
181
|
+
# @param conn an instance of an open ssh connection
|
182
|
+
def update_user(job, old_user, new_user, conn = nil)
|
183
|
+
conn ||= @ssh.open
|
184
|
+
|
185
|
+
# Loop through each schedule and delete them one by one
|
186
|
+
# TODO: what if one schedule update fails but others don't? Should
|
187
|
+
# we try and rollback somehow or just return the job with half its
|
188
|
+
# schedules deleted?
|
189
|
+
job.schedules.each do |schedule|
|
190
|
+
# We are looking for the current value of the schedule
|
191
|
+
find = build_minicron_command(schedule.formatted, old_user, job.command)
|
192
|
+
|
193
|
+
# And replacing it with the updated value
|
194
|
+
replace = build_minicron_command(schedule.formatted, new_user, job.command)
|
195
|
+
|
196
|
+
# Replace the old schedule with the new schedule
|
197
|
+
find_and_replace(conn, find, replace)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
176
201
|
# Remove the schedule for this job from the crontab
|
177
202
|
#
|
178
203
|
# @param job [Minicron::Hub::Job] an instance of a job model
|
@@ -23,14 +23,15 @@
|
|
23
23
|
|
24
24
|
function testConnection(self, host) {
|
25
25
|
self.set('test_connection', 'Testing..');
|
26
|
+
var path_prefix = window.config.path === '/' ? '' : window.config.path;
|
26
27
|
|
27
|
-
jQuery.getJSON(
|
28
|
+
jQuery.getJSON(path_prefix + '/api/hosts/' + host.id + '/test_ssh').done(function(data) {
|
28
29
|
// Could we at least connect to the host?
|
29
30
|
if (data.connect) {
|
30
31
|
// TODO: make this use a bootstrap model as a component
|
31
32
|
var results = 'Test Results\n\n';
|
32
33
|
results += 'connect: ' + data.connect + '\n';
|
33
|
-
results += '/etc writeable:
|
34
|
+
results += '/etc writeable: ' + data.etc.write + '\n';
|
34
35
|
results += '/etc executable: ' + data.etc.execute + '\n';
|
35
36
|
results += 'crontab readable: ' + data.crontab.read + '\n';
|
36
37
|
results += 'crontab writeable: ' + data.crontab.write;
|
@@ -58,21 +58,45 @@ class Minicron::Hub::App
|
|
58
58
|
put '/api/jobs/:id' do
|
59
59
|
content_type :json
|
60
60
|
begin
|
61
|
-
|
62
|
-
|
61
|
+
Minicron::Hub::Job.transaction do
|
62
|
+
# Load the JSON body
|
63
|
+
request_body = Oj.load(request.body)
|
63
64
|
|
64
|
-
|
65
|
-
|
66
|
-
|
65
|
+
# Find the job
|
66
|
+
job = Minicron::Hub::Job.includes(:host, :schedules, :executions => :job_execution_outputs)
|
67
|
+
.find(params[:id])
|
67
68
|
|
68
|
-
|
69
|
-
|
70
|
-
job.user = request_body['job']['user']
|
69
|
+
# Store a copy of the current job user in case we need to change it
|
70
|
+
old_user = job.user
|
71
71
|
|
72
|
-
|
72
|
+
# Update the name and user
|
73
|
+
job.name = request_body['job']['name']
|
74
|
+
job.user = request_body['job']['user']
|
73
75
|
|
74
|
-
|
75
|
-
|
76
|
+
# Only update the job user if it has changed
|
77
|
+
if old_user != job.user
|
78
|
+
ssh = Minicron::Transport::SSH.new(
|
79
|
+
:user => job.host.user,
|
80
|
+
:host => job.host.host,
|
81
|
+
:port => job.host.port,
|
82
|
+
:private_key => "~/.ssh/minicron_host_#{job.host.id}_rsa"
|
83
|
+
)
|
84
|
+
|
85
|
+
# Get an instance of the cron class
|
86
|
+
cron = Minicron::Cron.new(ssh)
|
87
|
+
|
88
|
+
# Update the job schedules in the crontab
|
89
|
+
cron.update_user(job, old_user, job.user)
|
90
|
+
|
91
|
+
# Tidy up
|
92
|
+
ssh.close
|
93
|
+
end
|
94
|
+
|
95
|
+
job.save!
|
96
|
+
|
97
|
+
# Return the new job
|
98
|
+
Minicron::Hub::JobSerializer.new(job).serialize.to_json
|
99
|
+
end
|
76
100
|
# TODO: nicer error handling here with proper validation before hand
|
77
101
|
rescue Exception => e
|
78
102
|
status 422
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minicron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James White
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rainbow
|
@@ -104,20 +104,20 @@ dependencies:
|
|
104
104
|
requirements:
|
105
105
|
- - "~>"
|
106
106
|
- !ruby/object:Gem::Version
|
107
|
-
version: '0.
|
107
|
+
version: '0.3'
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
110
|
+
version: 0.3.8
|
111
111
|
type: :runtime
|
112
112
|
prerelease: false
|
113
113
|
version_requirements: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '0.
|
117
|
+
version: '0.3'
|
118
118
|
- - ">="
|
119
119
|
- !ruby/object:Gem::Version
|
120
|
-
version: 0.
|
120
|
+
version: 0.3.8
|
121
121
|
- !ruby/object:Gem::Dependency
|
122
122
|
name: sinatra
|
123
123
|
requirement: !ruby/object:Gem::Requirement
|