cronicle 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9671c2408dcd1e81c18c453cfb0337b37853b444
4
- data.tar.gz: b0a075f4eb57c43edff84d9d68d08fe6a8af41f2
3
+ metadata.gz: 55990d68d863dd005a1f29102d53d908e20fab99
4
+ data.tar.gz: 8b01d9445e7e8c8d35ef5214efd14e129db06352
5
5
  SHA512:
6
- metadata.gz: 5f4caf9b0bb52999418ff28be419c0a541635048bf606b878ac1f4f6177cafd5accefbd41d262ca4423e7ec40b79a7f6931d11a869d4e954b7de4d30789d318e
7
- data.tar.gz: 9526f40169d7852ee7fa2de6cfbb2d2ddf3ebb7339dc4e5dfa4d5fc8144f49f0296a984c9278e1edd7458c644b2bdc7208d3b19052e05ee184e52cca4a280ce8
6
+ metadata.gz: 7d1e3492bb2986148c5c29e41954da0bb0825000af875d8abbe898c7a81d87345c18cd2909a7a2e0fae9e9d16c64343f51fe1fed6a9af18c9147a0bde8064d89
7
+ data.tar.gz: 45de3981f26f42a144d12c55fe60e9e7e1b2c05fb30fad3adc6d3d52d339145fa8ffefe371d9fc17cffa6ebafab425e4feb59741b96e66c9eacda6da84b3c38a
data/README.md CHANGED
@@ -86,6 +86,7 @@ puts "hello"
86
86
  * CRONICLE_SSH_USER
87
87
  * CRONICLE_SSH_OPTIONS
88
88
  * CRONICLE_SSH_CONFIG
89
+ * CRONICLE_SUDO_PASSWORD
89
90
 
90
91
  ## Jobfile example
91
92
 
data/lib/cronicle.rb CHANGED
@@ -18,6 +18,7 @@ require 'cronicle/ext/hash_ext'
18
18
  require 'cronicle/ext/sshkit_ext'
19
19
  require 'cronicle/ext/net-ssh_ext'
20
20
  require 'cronicle/logger'
21
+ require 'cronicle/log_sniffer'
21
22
  require 'cronicle/utils'
22
23
  require 'cronicle/client'
23
24
  require 'cronicle/cli'
data/lib/cronicle/cli.rb CHANGED
@@ -4,7 +4,7 @@ class Cronicle::CLI < Thor
4
4
  class_option 'file', :aliases => '-f', :desc => 'Job definition file', :default => 'Jobfile'
5
5
  class_option 'hosts', :aliases => '-h', :desc => 'Hosts definition file'
6
6
  class_option 'target-roles', :aliases => '-r', :desc => 'Target host role list', :type => :array
7
- class_option 'sudo-password', :aliases => '-p', :desc => 'Sudo password'
7
+ class_option 'sudo-password', :aliases => '-p', :desc => 'Sudo password', :default => ENV['CRONICLE_SUDO_PASSWORD']
8
8
  class_option 'ssh-user', :desc => 'SSH login user', :default => ENV['CRONICLE_SSH_USER']
9
9
  class_option 'ask-pass', :desc => 'Ask sudo password', :type => :boolean, :default => false
10
10
  class_option 'dry-run', :desc => 'Do not actually change', :type => :boolean, :default => false
@@ -54,36 +54,27 @@ class Cronicle::Driver
54
54
  end
55
55
 
56
56
  upload_script(temp_dir, name, job[:content]) do |temp_script|
57
- exec_opts = {:user => user, :raise_on_non_zero_exit => false}
58
- command = nil
57
+ host_user_job = {:host => host.hostname, :user => user, :job => name}
59
58
 
60
- if job[:bundle]
61
- mkgemfile(user, name, job[:bundle], temp_dir)
62
- bundle(user, name, temp_dir)
59
+ sniffer = proc do |obj|
60
+ out = obj.kind_of?(SSHKit::Command) ? obj.stdout : obj.to_s
63
61
 
64
- with_bundle(user, name, temp_dir) do
65
- command = sudo(:_execute, bundler_path, :exec, temp_script, exec_opts)
62
+ out.each_line do |line|
63
+ log_for_cronicle(:info, line, host_user_job)
66
64
  end
67
- else
68
- command = sudo(:_execute, temp_script, exec_opts)
69
65
  end
70
66
 
71
- out = command.full_stdout
72
- Cronicle::Utils.remove_prompt!(out)
73
- host_user_job = {:host => host.hostname, :user => user, :job => name}
67
+ exec_opts = {:user => user, :raise_on_non_zero_exit => false, :sniffer => sniffer}
74
68
 
75
- put_log = proc do |level, opts|
76
- opts ||= {}
69
+ if job[:bundle]
70
+ mkgemfile(user, name, job[:bundle], temp_dir)
71
+ bundle(user, name, temp_dir)
77
72
 
78
- out.each_line do |line|
79
- log_for_cronicle(:info, line.strip, opts.merge(host_user_job))
73
+ with_bundle(user, name, temp_dir) do
74
+ sudo(:_execute, bundler_path, :exec, temp_script, exec_opts)
80
75
  end
81
- end
82
-
83
- if command.exit_status.zero?
84
- put_log.call(:info)
85
76
  else
86
- put_log.call(:error, :color => :red)
77
+ sudo(:_execute, temp_script, exec_opts)
87
78
  end
88
79
  end
89
80
  end
@@ -6,12 +6,27 @@ class SSHKit::Backend::Netssh
6
6
 
7
7
  alias _execute_orig _execute
8
8
 
9
+ def output
10
+ @output ||= SSHKit.config.output
11
+ end
12
+
9
13
  def _execute(*args)
14
+ options = args.last.kind_of?(Hash) ? args.last : {}
15
+ orig_output = output
16
+
10
17
  begin
18
+ if options[:sniffer]
19
+ @output = Cronicle::LogSniffer.new(orig_output) do |obj|
20
+ options[:sniffer].call(obj)
21
+ end
22
+ end
23
+
11
24
  _execute_orig(*args)
12
25
  rescue => e
13
26
  log_for_cronicle(:error, args.join(' '), :color => :red)
14
27
  raise e
28
+ ensure
29
+ @output = orig_output
15
30
  end
16
31
  end
17
32
 
@@ -22,9 +37,7 @@ class SSHKit::Backend::Netssh
22
37
  with_sudo = [:sudo, '-p', SUDO_PROMPT, '-S']
23
38
  with_sudo << :sudo << '-u' << opts[:user] if opts[:user]
24
39
  with_sudo.concat(args)
25
-
26
- raise_on_non_zero_exit = opts.fetch(:raise_on_non_zero_exit, true)
27
- send(command, *with_sudo, :raise_on_non_zero_exit => raise_on_non_zero_exit)
40
+ send(command, *with_sudo, opts)
28
41
  end
29
42
 
30
43
  Cronicle::Utils.remove_prompt!(retval) if retval.kind_of?(String)
@@ -0,0 +1,12 @@
1
+ class Cronicle::LogSniffer
2
+ def initialize(original_output, &block)
3
+ @original_output = original_output
4
+ @block = block
5
+ end
6
+
7
+ def write(obj)
8
+ @block.call(obj)
9
+ @original_output << obj
10
+ end
11
+ alias :<< :write
12
+ end
@@ -63,31 +63,6 @@ class Cronicle::Logger < ::Logger
63
63
  Cronicle::Logger.log(level, message, opts)
64
64
  end
65
65
  end
66
-
67
- class SSHKitIO
68
- def initialize(io = $stdout)
69
- @io = io
70
- end
71
-
72
- def <<(obj)
73
- @io << mask_password(obj)
74
- end
75
-
76
- private
77
-
78
- MASK_REGEXP = /\becho\s+([^|]+)\s+\|\s+sudo\s+-S\s+/
79
- MASK = 'XXXXXXXX'
80
-
81
- def mask_password(obj)
82
- if obj.kind_of?(String) and obj =~ MASK_REGEXP
83
- password = $1
84
- obj.sub(password, MASK)
85
- else
86
- obj
87
- end
88
- end
89
- end
90
66
  end
91
67
 
92
- SSHKit.config.output = SSHKit::Formatter::Pretty.new(Cronicle::Logger::SSHKitIO.new)
93
68
  SSHKit.config.output_verbosity = :warn
@@ -1,3 +1,3 @@
1
1
  module Cronicle
2
- VERSION = '0.2.2'
2
+ VERSION = '0.2.3'
3
3
  end
@@ -55,10 +55,13 @@ describe 'Cronicle::Client#exec' do
55
55
  foo on ubuntu/root> Execute job
56
56
  foo on ubuntu/root>\s
57
57
  foo on ubuntu/root> Linux
58
+ foo on ubuntu/root>\s
58
59
  foo on ubuntu/root> root
60
+ foo on ubuntu/root>\s
59
61
  bar on ubuntu/root> Execute job
60
62
  bar on ubuntu/root>\s
61
63
  bar on ubuntu/root> hello
64
+ bar on ubuntu/root>\s
62
65
  EOS
63
66
  end
64
67
  end
@@ -139,7 +142,9 @@ describe 'Cronicle::Client#exec' do
139
142
  foo on ubuntu/ubuntu> Execute job
140
143
  foo on ubuntu/ubuntu>\s
141
144
  foo on ubuntu/ubuntu> Linux
145
+ foo on ubuntu/ubuntu>\s
142
146
  foo on ubuntu/ubuntu> ubuntu
147
+ foo on ubuntu/ubuntu>\s
143
148
  EOS
144
149
  end
145
150
  end
@@ -206,7 +211,9 @@ describe 'Cronicle::Client#exec' do
206
211
  foo on ubuntu/ubuntu> Execute job
207
212
  foo on ubuntu/ubuntu>\s
208
213
  foo on ubuntu/ubuntu> "My Mash on ubuntu"
214
+ foo on ubuntu/ubuntu>\s
209
215
  foo on ubuntu/ubuntu> true
216
+ foo on ubuntu/ubuntu>\s
210
217
  EOS
211
218
  end
212
219
  end
@@ -238,6 +245,7 @@ describe 'Cronicle::Client#exec' do
238
245
  foo on amazon_linux/ec2-user> Execute job
239
246
  foo on amazon_linux/ec2-user>\s
240
247
  foo on amazon_linux/ec2-user> BAR
248
+ foo on amazon_linux/ec2-user>\s
241
249
  EOS
242
250
  end
243
251
 
@@ -246,6 +254,7 @@ describe 'Cronicle::Client#exec' do
246
254
  foo on ubuntu/ubuntu> Execute job
247
255
  foo on ubuntu/ubuntu>\s
248
256
  foo on ubuntu/ubuntu> 100
257
+ foo on ubuntu/ubuntu>\s
249
258
  EOS
250
259
  end
251
260
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cronicle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-10 00:00:00.000000000 Z
11
+ date: 2015-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sourcify
@@ -223,6 +223,7 @@ files:
223
223
  - lib/cronicle/ext/net-ssh_ext.rb
224
224
  - lib/cronicle/ext/sshkit_ext.rb
225
225
  - lib/cronicle/host_list.rb
226
+ - lib/cronicle/log_sniffer.rb
226
227
  - lib/cronicle/logger.rb
227
228
  - lib/cronicle/utils.rb
228
229
  - lib/cronicle/version.rb