crontabinator 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/crontabinator/built-in.rb +1 -1
- data/lib/crontabinator/check.rb +11 -3
- data/lib/crontabinator/crontab.rb +19 -24
- metadata +2 -2
@@ -1,6 +1,6 @@
|
|
1
|
-
set :crontab_log_level, "info"
|
2
1
|
set :crontab_logs_path, -> { shared_path.join('log') }
|
3
2
|
set :crontab_templates_path, "templates/crontab"
|
4
3
|
set :crontab_lockfile_path, -> { "#{fetch(:crontab_templates_path)}/crontab.lock" }
|
5
4
|
set :crontab_scripts_path, -> { "#{fetch(:crontab_templates_path)}/scripts.d" }
|
6
5
|
set :crontab_server_scripts_path, -> { current_path.join('script') }
|
6
|
+
|
data/lib/crontabinator/check.rb
CHANGED
@@ -6,11 +6,11 @@ namespace :crontab do
|
|
6
6
|
files = Dir.glob("#{fetch(:crontab_scripts_path)}/*\.erb")
|
7
7
|
set :crontab_script_files, files.collect { |f| File.expand_path(f) }
|
8
8
|
fetch(:crontab_script_files).each do |file|
|
9
|
-
hash = eval(File.read(file).lines.to_a.shift)
|
10
|
-
if hash.nil? or hash[:user].nil? or hash[:schedule].nil?
|
9
|
+
hash = eval(File.read(file).lines.to_a.shift).deep_symbolize_keys
|
10
|
+
if hash.nil? or hash[:user].nil? or hash[:schedule].nil? or hash[:stages].nil?
|
11
11
|
fatal "Error reading the first line of #{file}"
|
12
12
|
fatal "Ensure the first line is a Ruby hash in the form: " +
|
13
|
-
"\"{ :user => \"www-data\", :schedule => \"* * * * *\" }\""
|
13
|
+
"\"{ :user => \"www-data\", :schedule => \"* * * * *\", :stages => [:production, :staging] }\""
|
14
14
|
fatal "Your shebang line directly next"
|
15
15
|
exit
|
16
16
|
end
|
@@ -51,3 +51,11 @@ namespace :crontab do
|
|
51
51
|
|
52
52
|
end
|
53
53
|
end
|
54
|
+
|
55
|
+
class Object
|
56
|
+
def deep_symbolize_keys
|
57
|
+
return self.inject({}){|memo,(k,v)| memo[k.to_sym] = v.deep_symbolize_keys; memo} if self.is_a? Hash
|
58
|
+
return self.inject([]){|memo,v | memo << v.deep_symbolize_keys; memo} if self.is_a? Array
|
59
|
+
return self
|
60
|
+
end
|
61
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
namespace :crontab do
|
2
2
|
|
3
3
|
# sets :user_crontab_hash in the form:
|
4
|
-
# { :"
|
4
|
+
# { :"username" => ["#!/bin/bash", "/bin/echo 'asdf' >> /tmp/test.log"] }
|
5
5
|
task :read_all_settings => ['crontab:check:scripts'] do
|
6
6
|
run_locally do
|
7
7
|
user_crontab_hash = {}
|
@@ -9,9 +9,12 @@ namespace :crontab do
|
|
9
9
|
# Auto entries
|
10
10
|
auto_entries = []
|
11
11
|
fetch(:crontab_script_files).each do |file|
|
12
|
-
hash = eval(File.read(file).lines.to_a.shift)
|
13
|
-
|
14
|
-
|
12
|
+
hash = eval(File.read(file).lines.to_a.shift).deep_symbolize_keys
|
13
|
+
hash[:stages] = hash[:stages].collect { |stage| stage.to_sym }
|
14
|
+
if hash[:stages].include? fetch(:stage)
|
15
|
+
path = "#{fetch(:crontab_server_scripts_path)}/#{File.basename(file, '.erb')}"
|
16
|
+
auto_entries += [{ :user => hash[:user], :schedule => hash[:schedule], :path => path }]
|
17
|
+
end
|
15
18
|
end
|
16
19
|
auto_entries.each do |entry|
|
17
20
|
name = File.basename(entry[:path], '.erb')
|
@@ -49,14 +52,17 @@ namespace :crontab do
|
|
49
52
|
on roles(:cron) do |host|
|
50
53
|
fetch(:crontab_script_files).each do |path|
|
51
54
|
lines = File.read(path).lines.to_a
|
52
|
-
lines.shift
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
55
|
+
hash = eval(lines.shift).deep_symbolize_keys
|
56
|
+
hash[:stages] = hash[:stages].collect { |stage| stage.to_sym }
|
57
|
+
if hash[:stages].include? fetch(:stage).to_sym
|
58
|
+
file = ERB.new(lines.join, nil, '-').result(binding)
|
59
|
+
as :root do execute("rm", "/tmp/script", "-f") end
|
60
|
+
upload! StringIO.new(file), "/tmp/script"
|
61
|
+
final_path = "#{fetch(:crontab_server_scripts_path)}/#{File.basename(path, '.erb')}"
|
62
|
+
as :root do
|
63
|
+
execute("mv", "/tmp/script", final_path)
|
64
|
+
execute("chmod", "750", final_path)
|
65
|
+
end
|
60
66
|
end
|
61
67
|
end
|
62
68
|
end
|
@@ -64,10 +70,6 @@ namespace :crontab do
|
|
64
70
|
|
65
71
|
desc "Idempotently setup Crontabs."
|
66
72
|
task :setup => ['crontab:check:settings', :read_all_settings, :upload_scripts] do
|
67
|
-
log_level = SSHKit.config.output_verbosity
|
68
|
-
log_level = "info" if log_level.nil?
|
69
|
-
SSHKit.config.output_verbosity = fetch(:crontab_log_level)
|
70
|
-
|
71
73
|
on roles(:cron) do |host|
|
72
74
|
# New
|
73
75
|
fetch(:user_crontab_hash).each do |user, lines|
|
@@ -90,7 +92,7 @@ namespace :crontab do
|
|
90
92
|
# Old
|
91
93
|
fetch(:crontabs_to_remove).each do |user|
|
92
94
|
as :root do
|
93
|
-
|
95
|
+
test "crontab", "-u", user, "-r"
|
94
96
|
end
|
95
97
|
end
|
96
98
|
content = [
|
@@ -104,7 +106,6 @@ namespace :crontab do
|
|
104
106
|
warn "Updated '#{fetch(:crontab_lockfile_path)}', add it to version control"
|
105
107
|
end
|
106
108
|
end
|
107
|
-
SSHKit.config.output_verbosity = log_level
|
108
109
|
end
|
109
110
|
|
110
111
|
if Rake::Task.task_defined?("deploy:publishing")
|
@@ -113,10 +114,6 @@ namespace :crontab do
|
|
113
114
|
|
114
115
|
desc "Check the status of the Crontabs."
|
115
116
|
task :status => [:read_all_settings] do
|
116
|
-
log_level = SSHKit.config.output_verbosity
|
117
|
-
log_level = "info" if log_level.nil?
|
118
|
-
SSHKit.config.output_verbosity = fetch(:crontab_log_level)
|
119
|
-
|
120
117
|
on roles(:cron) do
|
121
118
|
fetch(:user_crontab_hash).each do |user, _|
|
122
119
|
as :root do
|
@@ -128,8 +125,6 @@ namespace :crontab do
|
|
128
125
|
end
|
129
126
|
end
|
130
127
|
end
|
131
|
-
|
132
|
-
SSHKit.config.output_verbosity = log_level
|
133
128
|
end
|
134
129
|
|
135
130
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crontabinator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
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: 2015-11-
|
12
|
+
date: 2015-11-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capistrano
|