kafo 0.0.17 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of kafo might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 50b4317c6753f887ed5f82958ccddb7c7231b0c6
4
- data.tar.gz: 80e53f9fc0c40a7898beb5cd1df07e4f2159d2bb
3
+ metadata.gz: 7a0d5d908f8ea926b840cdd83bf863de5c3acd2a
4
+ data.tar.gz: 34fb06c977764e7548ec837640e781a6599b8fe8
5
5
  SHA512:
6
- metadata.gz: 1d6874b159789e97761e7ac8cb1f86595a5d167d23cd1720f582914dea450408fb37c3c03269451f5ce38723e3e1d4b88abbd5cdedda284600d8976bfc0fd434
7
- data.tar.gz: 6c9fb42c37dd21084cd32a0895eb3b284a918acbe8d37727d64953b928fbf511e7ffd23803d9b6e13310f5dbf28a44518ddbeebcd17cefa0d7a74aa33a739d97
6
+ metadata.gz: 7f5b4cce32ae6eafb2b02397acdf830a8745c4c32ca465f76519de55b44ea0e6df3a2db6f6ef194f452b871c5c316a7497cde0f731ef0c438c287363d26f3b15
7
+ data.tar.gz: 48f445d23ff5c7026b5876627a4fd4b7480779b37ebca3394af4b396290a61d6413eb2c3a7b0dd49b52bd8b3ccaeae4c688edd889d07e590bfb553dc9b2dbbc0
@@ -9,6 +9,7 @@ require 'kafo/string_helper'
9
9
  require 'kafo/wizard'
10
10
  require 'kafo/system_checker'
11
11
  require 'kafo/puppet_command'
12
+ require 'kafo/progress_bar'
12
13
 
13
14
  class KafoConfigure < Clamp::Command
14
15
  include StringHelper
@@ -16,7 +17,7 @@ class KafoConfigure < Clamp::Command
16
17
 
17
18
  class << self
18
19
  attr_accessor :config, :root_dir, :config_file, :gem_root, :temp_config_file,
19
- :modules_dir, :kafo_modules_dir
20
+ :modules_dir, :kafo_modules_dir, :verbose
20
21
  end
21
22
 
22
23
  def initialize(*args)
@@ -29,6 +30,7 @@ class KafoConfigure < Clamp::Command
29
30
  self.class.kafo_modules_dir = self.class.config.app[:kafo_modules_dir] || (self.class.gem_root + '/modules')
30
31
  Logger.setup
31
32
  @logger = Logging.logger.root
33
+ @progress_bar = nil
32
34
  super
33
35
  set_parameters
34
36
  set_options
@@ -42,8 +44,10 @@ class KafoConfigure < Clamp::Command
42
44
  catch :exit do
43
45
  parse_cli_arguments
44
46
 
45
- if verbose?
47
+ if (self.class.verbose = verbose?)
46
48
  logger.appenders = logger.appenders << ::Logging.appenders.stdout(:layout => Logger::COLOR_LAYOUT)
49
+ else
50
+ @progress_bar = ProgressBar.new
47
51
  end
48
52
 
49
53
  unless SystemChecker.check
@@ -204,7 +208,10 @@ class KafoConfigure < Clamp::Command
204
208
  command = PuppetCommand.new('include kafo_configure', options).command
205
209
  PTY.spawn(command) do |stdin, stdout, pid|
206
210
  begin
207
- stdin.each { |line| puppet_log(line) }
211
+ stdin.each do |line|
212
+ puppet_log(*puppet_parse(line))
213
+ @progress_bar.update(line) if @progress_bar
214
+ end
208
215
  rescue Errno::EIO
209
216
  if PTY.respond_to?(:check) # ruby >= 1.9.2
210
217
  exit_code = PTY.check(pid, true).exitstatus
@@ -217,12 +224,18 @@ class KafoConfigure < Clamp::Command
217
224
  rescue PTY::ChildExited => e
218
225
  exit_code = e.status.exitstatus
219
226
  end
227
+ @progress_bar.close if @progress_bar
220
228
  logger.info "Puppet has finished, bye!"
221
229
  FileUtils.rm(temp_config_file, :force => true)
222
230
  exit(exit_code)
223
231
  end
224
232
 
225
- def puppet_log(line)
233
+ def puppet_log(method, message)
234
+ @progress_bar.print ANSI::Code.red { message + "\n" } if method == :error && @progress_bar
235
+ Logging.logger['puppet'].send(method, message)
236
+ end
237
+
238
+ def puppet_parse(line)
226
239
  method, message = case
227
240
  when line =~ /^Error:(.*)/i || line =~ /^Err:(.*)/i
228
241
  [:error, $1]
@@ -235,7 +248,8 @@ class KafoConfigure < Clamp::Command
235
248
  else
236
249
  [:info, line]
237
250
  end
238
- Logging.logger['puppet'].send(method, message.chomp)
251
+
252
+ return [method, message.chomp]
239
253
  end
240
254
 
241
255
  def unset
@@ -0,0 +1,57 @@
1
+ require 'powerbar'
2
+ require 'ansi/code'
3
+
4
+ class ProgressBar
5
+ def initialize
6
+ @lines = 0
7
+ @all_lines = 0
8
+ @total = :unknown
9
+ @bar = PowerBar.new
10
+ @bar.settings.tty.infinite.template.main = infinite_template
11
+ @bar.settings.tty.finite.template.main = finite_template
12
+ @bar.settings.tty.finite.template.padchar = ' '
13
+ @bar.settings.tty.finite.template.barchar = '.'
14
+ @bar.settings.tty.finite.output = Proc.new { |s| $stderr.print s }
15
+ end
16
+
17
+ def update(line)
18
+ @total = $1.to_i if line =~ /\w*START (\d+)/
19
+ @lines += 1 if line.include?('RESOURCE') && @lines < @total - 1
20
+ @all_lines += 1
21
+
22
+ # we print every 20th line during installation preparing otherwise we update every line
23
+ if @all_lines % 20 == 0 || @total != :unknown
24
+ @bar.show({ :msg => format(line),
25
+ :done => @lines,
26
+ :total => @total })
27
+ end
28
+ end
29
+
30
+ def close
31
+ @bar.show({ :msg => ANSI::Code.green { 'Done' + (' ' * 46) },
32
+ :done => @total == :unknown ? @bar.done + 1 : @total,
33
+ :total => @total }, true)
34
+ @bar.close
35
+ end
36
+
37
+ def print(line)
38
+ @bar.print line
39
+ end
40
+
41
+ private
42
+
43
+ def format(line)
44
+ (line.tr("\r\n", '') + (' ' * 50))[0..49]
45
+ end
46
+
47
+ def finite_template
48
+ 'Installing'.ljust(22) +
49
+ ANSI::Code.yellow { ' ${<msg>}' } +
50
+ ANSI::Code.green { ' [${<percent>%}]' } +
51
+ ' [${<bar>}]'
52
+ end
53
+
54
+ def infinite_template
55
+ 'Preparing installation' + ANSI::Code.yellow { ' ${<msg>}' }
56
+ end
57
+ end
@@ -6,18 +6,21 @@ class PuppetCommand
6
6
  @logger = Logging.logger.root
7
7
  end
8
8
 
9
- def command
10
- custom_answer_file = if KafoConfigure.temp_config_file.nil?
11
- ''
12
- else
13
- "$kafo_answer_file=\"#{KafoConfigure.temp_config_file}\""
14
- end
9
+ def custom_answer_file
10
+ KafoConfigure.temp_config_file.nil? ? '' : "$kafo_answer_file=\"#{KafoConfigure.temp_config_file}\""
11
+ end
15
12
 
13
+ def add_progress
14
+ KafoConfigure.verbose ? '' : "$kafo_add_progress=true"
15
+ end
16
+
17
+ def command
16
18
  result = [
17
- "echo '$kafo_config_file=\"#{KafoConfigure.config_file}\" #{custom_answer_file} #{@command}'",
18
- " | ",
19
- "puppet apply #{@options.join(' ')} #{@suffix}"
20
- ].join
19
+ "echo '$kafo_config_file=\"#{KafoConfigure.config_file}\" #{custom_answer_file} #{add_progress} #{@command}'",
20
+ '|',
21
+ "RUBYLIB=#{["#{KafoConfigure.gem_root}/modules", ENV['RUBYLIB']].join(File::PATH_SEPARATOR)}",
22
+ "puppet apply #{@options.join(' ')} #{@suffix}",
23
+ ].join(' ')
21
24
  @logger.debug result
22
25
  result
23
26
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: UTF-8
2
2
  module Kafo
3
- VERSION = "0.0.17"
3
+ VERSION = "0.1.0"
4
4
  end
@@ -0,0 +1,35 @@
1
+ module Kafo
2
+ module Puppet
3
+ class ReportWrapper
4
+ attr_reader :transaction, :report
5
+
6
+ def initialize(transaction, report)
7
+ @transaction = transaction
8
+ @report = report
9
+ @supported = true
10
+ end
11
+
12
+ # Needed to fool Puppet's logging framework
13
+ def self.to_s
14
+ "Puppet::Transaction::Report"
15
+ end
16
+
17
+ def add_resource_status(status, *args, &block)
18
+ if @supported && report.respond_to?(:resource_statuses) && report.resource_statuses.is_a?(Hash)
19
+ if transaction.in_main_catalog && report.resource_statuses[status.resource.to_s] && transaction.is_interesting?(status.resource)
20
+ ::Puppet.info "RESOURCE #{status.resource}"
21
+ end
22
+ report.add_resource_status(status, *args, &block)
23
+ else
24
+ ::Puppet.err "Your puppet env is not supported, report does not define resource_statuses"
25
+ @supported = false
26
+ end
27
+ end
28
+
29
+ def method_missing(method, *args, &block)
30
+ report.send(method, *args, &block)
31
+ end
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,46 @@
1
+ require 'kafo_configure/lib/kafo/puppet/report_wrapper'
2
+
3
+ module Puppet::Parser::Functions
4
+ newfunction(:add_progress) do |args|
5
+ supported = %w(2.6. 2.7. 3.0. 3.1. 3.2. 3.3.)
6
+ if supported.any? { |version| Puppet::PUPPETVERSION.start_with?(version) }
7
+ # Monkey patch the transaction to put our wrapper around the report object
8
+ require 'puppet/transaction'
9
+ class Puppet::Transaction
10
+ attr_accessor :in_main_catalog
11
+
12
+ def is_interesting?(resource)
13
+ ![:schedule, :class, :stage, :filebucket].include?(resource.to_s.split('[')[0].downcase.to_sym)
14
+ end
15
+
16
+ def resource_count
17
+ catalog.vertices.select { |resource| is_interesting?(resource) }.size
18
+ end
19
+
20
+ def evaluate_with_trigger(*args, &block)
21
+ if catalog.version
22
+ self.in_main_catalog = true
23
+ ::Puppet.info "START #{resource_count}"
24
+ end
25
+ evaluate_without_trigger(*args, &block)
26
+ self.in_main_catalog = false if catalog.version
27
+ end
28
+
29
+ alias_method :evaluate_without_trigger, :evaluate
30
+ alias_method :evaluate, :evaluate_with_trigger
31
+
32
+ def report_with_wrapper
33
+ unless @report_wrapper
34
+ @report_wrapper = Kafo::Puppet::ReportWrapper.new(self, report_without_wrapper)
35
+ end
36
+ @report_wrapper
37
+ end
38
+
39
+ alias_method :report_without_wrapper, :report
40
+ alias_method :report, :report_with_wrapper
41
+ end
42
+ else
43
+ ::Puppet.err 'Your puppet version does not support progress bar'
44
+ end
45
+ end
46
+ end
@@ -6,6 +6,10 @@
6
6
  #
7
7
  class kafo_configure {
8
8
 
9
+ if $kafo_add_progress {
10
+ add_progress()
11
+ }
12
+
9
13
  $password = load_kafo_password()
10
14
  $params = loadanyyaml(load_kafo_answer_file())
11
15
  $keys = kafo_ordered(hash_keys($params))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kafo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marek Hulan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-27 00:00:00.000000000 Z
11
+ date: 2013-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - '>='
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: powerbar
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  description: A gem for making installations based on puppet user friendly
126
140
  email:
127
141
  - ares@igloonet.cz
@@ -144,6 +158,7 @@ files:
144
158
  - lib/kafo/validator.rb
145
159
  - lib/kafo/exceptions.rb
146
160
  - lib/kafo/system_checker.rb
161
+ - lib/kafo/progress_bar.rb
147
162
  - lib/kafo/puppet_command.rb
148
163
  - lib/kafo/wizard.rb
149
164
  - lib/kafo/params/password.rb
@@ -158,10 +173,12 @@ files:
158
173
  - lib/kafo/version.rb
159
174
  - lib/kafo/param_builder.rb
160
175
  - lib/kafo.rb
176
+ - modules/kafo_configure/lib/kafo/puppet/report_wrapper.rb
161
177
  - modules/kafo_configure/lib/puppet/parser/functions/decrypt.rb
162
178
  - modules/kafo_configure/lib/puppet/parser/functions/is_hash.rb
163
179
  - modules/kafo_configure/lib/puppet/parser/functions/load_kafo_answer_file.rb
164
180
  - modules/kafo_configure/lib/puppet/parser/functions/class_name.rb
181
+ - modules/kafo_configure/lib/puppet/parser/functions/add_progress.rb
165
182
  - modules/kafo_configure/lib/puppet/parser/functions/dump_values.rb
166
183
  - modules/kafo_configure/lib/puppet/parser/functions/load_kafo_password.rb
167
184
  - modules/kafo_configure/lib/puppet/parser/functions/hash_keys.rb