cronicle 0.2.2 → 0.2.3

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 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