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 +4 -4
- data/lib/kafo/kafo_configure.rb +19 -5
- data/lib/kafo/progress_bar.rb +57 -0
- data/lib/kafo/puppet_command.rb +13 -10
- data/lib/kafo/version.rb +1 -1
- data/modules/kafo_configure/lib/kafo/puppet/report_wrapper.rb +35 -0
- data/modules/kafo_configure/lib/puppet/parser/functions/add_progress.rb +46 -0
- data/modules/kafo_configure/manifests/init.pp +4 -0
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a0d5d908f8ea926b840cdd83bf863de5c3acd2a
|
4
|
+
data.tar.gz: 34fb06c977764e7548ec837640e781a6599b8fe8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f5b4cce32ae6eafb2b02397acdf830a8745c4c32ca465f76519de55b44ea0e6df3a2db6f6ef194f452b871c5c316a7497cde0f731ef0c438c287363d26f3b15
|
7
|
+
data.tar.gz: 48f445d23ff5c7026b5876627a4fd4b7480779b37ebca3394af4b396290a61d6413eb2c3a7b0dd49b52bd8b3ccaeae4c688edd889d07e590bfb553dc9b2dbbc0
|
data/lib/kafo/kafo_configure.rb
CHANGED
@@ -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
|
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(
|
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
|
-
|
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
|
data/lib/kafo/puppet_command.rb
CHANGED
@@ -6,18 +6,21 @@ class PuppetCommand
|
|
6
6
|
@logger = Logging.logger.root
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
|
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
|
-
"
|
20
|
-
|
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
|
data/lib/kafo/version.rb
CHANGED
@@ -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
|
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
|
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-
|
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
|