garcun 0.0.2 → 0.0.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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/lib/garcon/chef/chef_helpers.rb +9 -12
  3. data/lib/garcon/chef/coerce/coercer.rb +3 -0
  4. data/lib/garcon/chef/node.rb +7 -5
  5. data/lib/garcon/chef/provider/download.rb +2 -30
  6. data/lib/garcon/chef/resource/base_dsl.rb +53 -0
  7. data/lib/garcon/chef/secret_bag.rb +2 -1
  8. data/lib/garcon/chef_inclusions.rb +1 -9
  9. data/lib/garcon/core_ext/array.rb +1 -1
  10. data/lib/garcon/core_ext/binding.rb +0 -1
  11. data/lib/garcon/core_ext/boolean.rb +2 -0
  12. data/lib/garcon/core_ext/hash.rb +1 -2
  13. data/lib/garcon/core_ext/kernel.rb +0 -2
  14. data/lib/garcon/core_ext/module.rb +0 -1
  15. data/lib/garcon/core_ext/object.rb +0 -3
  16. data/lib/garcon/core_ext/string.rb +9 -15
  17. data/lib/garcon/core_ext/struct.rb +0 -1
  18. data/lib/garcon/core_ext/symbol.rb +0 -1
  19. data/lib/garcon/core_ext/time.rb +0 -1
  20. data/lib/garcon/core_ext.rb +0 -4
  21. data/lib/garcon/exceptions.rb +0 -35
  22. data/lib/garcon/task/executor.rb +0 -1
  23. data/lib/garcon/task/ivar.rb +0 -2
  24. data/lib/garcon/utility/file_helper.rb +88 -1
  25. data/lib/garcon/utility/retry.rb +0 -3
  26. data/lib/garcon/utility/timeout.rb +0 -3
  27. data/lib/garcon/utils.rb +0 -1
  28. data/lib/garcon/version.rb +1 -1
  29. data/lib/garcon.rb +1 -4
  30. data/lib/garcun.rb +1 -3
  31. metadata +2 -11
  32. data/lib/garcon/chef/handler/devreporter.rb +0 -127
  33. data/lib/garcon/chef/resource/resource_name.rb +0 -109
  34. data/lib/garcon/core_ext/file.rb +0 -127
  35. data/lib/garcon/core_ext/filetest.rb +0 -62
  36. data/lib/garcon/core_ext/lazy.rb +0 -222
  37. data/lib/garcon/core_ext/process.rb +0 -41
  38. data/lib/garcon/utility/ansi.rb +0 -199
  39. data/lib/garcon/utility/equalizer.rb +0 -146
  40. data/lib/garcon/utility/msg_from_god.rb +0 -62
data/lib/garcon.rb CHANGED
@@ -31,7 +31,6 @@ require 'chef/provider'
31
31
 
32
32
  require_relative 'garcon/version'
33
33
  require_relative 'garcon/configuration'
34
- require_relative 'garcon/exceptions'
35
34
  require_relative 'garcon/inflections'
36
35
  require_relative 'garcon/secret'
37
36
  require_relative 'garcon/stash/store'
@@ -39,8 +38,6 @@ require_relative 'garcon/core_ext'
39
38
  require_relative 'garcon/task'
40
39
  require_relative 'garcon/utils'
41
40
 
42
- # Pirla o Sfigato Magnà Capo Fregna
43
-
44
41
  module Garcon
45
42
  # Extends base class or a module with garcon methods, called when module is
46
43
  # included, extends the object with class and instance methods.
@@ -54,7 +51,7 @@ module Garcon
54
51
  def self.included(object)
55
52
  super
56
53
  if Class === object
57
- object.send(:include, ClassInclusions) # TODO fix this...
54
+ object.send(:include, ClassInclusions)
58
55
  else
59
56
  object.extend(ModuleExtensions)
60
57
  end
data/lib/garcun.rb CHANGED
@@ -19,6 +19,4 @@
19
19
 
20
20
  require_relative 'garcon'
21
21
 
22
- module Garcun
23
-
24
- end
22
+ module Garcun; end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: garcun
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefano Harding
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-07 00:00:00.000000000 Z
11
+ date: 2015-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef
@@ -535,7 +535,6 @@ files:
535
535
  - lib/garcon/chef/coerce/coercions/integer_definitions.rb
536
536
  - lib/garcon/chef/coerce/coercions/string_definitions.rb
537
537
  - lib/garcon/chef/coerce/coercions/time_definitions.rb
538
- - lib/garcon/chef/handler/devreporter.rb
539
538
  - lib/garcon/chef/log.rb
540
539
  - lib/garcon/chef/node.rb
541
540
  - lib/garcon/chef/provider/civilize.rb
@@ -550,7 +549,6 @@ files:
550
549
  - lib/garcon/chef/resource/base_dsl.rb
551
550
  - lib/garcon/chef/resource/blender.rb
552
551
  - lib/garcon/chef/resource/lazy_eval.rb
553
- - lib/garcon/chef/resource/resource_name.rb
554
552
  - lib/garcon/chef/secret_bag.rb
555
553
  - lib/garcon/chef/validations.rb
556
554
  - lib/garcon/chef_inclusions.rb
@@ -561,18 +559,14 @@ files:
561
559
  - lib/garcon/core_ext/boolean.rb
562
560
  - lib/garcon/core_ext/duration.rb
563
561
  - lib/garcon/core_ext/enumerable.rb
564
- - lib/garcon/core_ext/file.rb
565
- - lib/garcon/core_ext/filetest.rb
566
562
  - lib/garcon/core_ext/hash.rb
567
563
  - lib/garcon/core_ext/kernel.rb
568
- - lib/garcon/core_ext/lazy.rb
569
564
  - lib/garcon/core_ext/method_access.rb
570
565
  - lib/garcon/core_ext/module.rb
571
566
  - lib/garcon/core_ext/nil.rb
572
567
  - lib/garcon/core_ext/numeric.rb
573
568
  - lib/garcon/core_ext/object.rb
574
569
  - lib/garcon/core_ext/pathname.rb
575
- - lib/garcon/core_ext/process.rb
576
570
  - lib/garcon/core_ext/random.rb
577
571
  - lib/garcon/core_ext/string.rb
578
572
  - lib/garcon/core_ext/struct.rb
@@ -621,10 +615,8 @@ files:
621
615
  - lib/garcon/task/timer_set.rb
622
616
  - lib/garcon/task/timer_task.rb
623
617
  - lib/garcon/task/waitable_list.rb
624
- - lib/garcon/utility/ansi.rb
625
618
  - lib/garcon/utility/at_random.rb
626
619
  - lib/garcon/utility/crypto.rb
627
- - lib/garcon/utility/equalizer.rb
628
620
  - lib/garcon/utility/faker/extensions/array.rb
629
621
  - lib/garcon/utility/faker/extensions/symbol.rb
630
622
  - lib/garcon/utility/faker/faker.rb
@@ -638,7 +630,6 @@ files:
638
630
  - lib/garcon/utility/interpolation.rb
639
631
  - lib/garcon/utility/memstash.rb
640
632
  - lib/garcon/utility/misc.rb
641
- - lib/garcon/utility/msg_from_god.rb
642
633
  - lib/garcon/utility/retry.rb
643
634
  - lib/garcon/utility/timeout.rb
644
635
  - lib/garcon/utility/uber/builder.rb
@@ -1,127 +0,0 @@
1
- # encoding: UTF-8
2
- #
3
- # Author: Stefano Harding <riddopic@gmail.com>
4
- # License: Apache License, Version 2.0
5
- # Copyright: (C) 2014-2015 Stefano Harding
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- require 'chef'
21
- require 'chef/log'
22
- require 'chef/handler'
23
- require 'garcon'
24
-
25
- class DevReporter < Chef::Handler
26
- attr_reader :resources, :immediate, :delayed, :always
27
-
28
- def initialize(opts = {})
29
- end
30
-
31
- def full_name(resource)
32
- "#{resource.resource_name}[#{resource.name}]"
33
- end
34
-
35
- def humanize(seconds)
36
- [[60, :seconds],
37
- [60, :minutes],
38
- [24, :hours],
39
- [1000, :days] ].map do |count, name|
40
- if seconds > 0
41
- seconds, n = seconds.divmod(count)
42
- "#{n.to_i} #{name}"
43
- end
44
- end.compact.reverse.join(' ')
45
- end
46
-
47
- def banner
48
- puts <<-EOF
49
-
50
-
51
- .: ;:. .:;S;:. .:;.;:. .:;S;:. .:;S;:.
52
- S ' S S S S S S S /
53
- `:;S;:' `:;S;:' `:;S;:' `:;S;:' `:;S;:'
54
- .g8"""bgd
55
- .dP' `M
56
- dM' ` ,6"Yb. `7Mb,od8 ,p6"bo ,pW"Wq.`7MMpMMMb.
57
- MM 8) MM MM' "'6M' OO 6W' `Wb MM MM
58
- MM. `7MMF',pm9MM MM 8M 8M M8 MM MM
59
- `Mb. MM 8M MM MM YM. , YA. ,A9 MM MM
60
- `"bmmmdPY `Moo9^Yo..JMML. YMbmd' `Ybmd9'.JMML JMML.
61
- bog
62
- od V #{Garcon::VERSION}
63
-
64
- EOF
65
- end
66
-
67
- def report
68
- if run_status.success?
69
- cookbooks = Hash.new(0)
70
- recipes = Hash.new(0)
71
- resources = Hash.new(0)
72
- run_time = humanize(run_status.elapsed_time)
73
- updates = run_status.updated_resources.length
74
- total = run_status.all_resources.length
75
-
76
- all_resources.each do |r|
77
- cookbooks[r.cookbook_name] += r.elapsed_time
78
- recipes["#{r.cookbook_name}::#{r.recipe_name}"] += r.elapsed_time
79
- resources["#{r.resource_name}[#{r.name}]"] = r.elapsed_time
80
- end
81
-
82
- @max_time = all_resources.max_by { |r| r.elapsed_time }.elapsed_time
83
- @max = all_resources.max_by { |r| full_name(r).length }
84
-
85
- # Start droping puts because mash grinder faceplanted Chef::Log.info
86
- # logging changes random so excelent thanks Chef!
87
- #
88
- puts ''
89
- puts '*|*|*|*|*|*|*|*|* <`)))>< '
90
- banner
91
- puts 'Elapsed Time Cookbook Version'.yellow
92
- puts '------------ ------------------- ----------------------'.green
93
- cookbooks.sort_by { |k, v| -v }.each do |cookbook, run_time|
94
- ver = run_context.cookbook_collection[cookbook.to_sym].version
95
- puts '%19f %-20s %-7s' % [run_time, cookbook, ver]
96
- end
97
- puts ''
98
- puts 'Elapsed Time Recipe'.orange
99
- puts '------------ -------------------------------------------'.green
100
- recipes.sort_by { |k, v| -v }.each do |recipe, run_time|
101
- puts '%19f %s' % [run_time, recipe]
102
- end
103
- puts ''
104
- puts 'Elapsed Time Resource'.orange
105
- puts '------------ -------------------------------------------'.green
106
- resources.sort_by { |k, v| -v }.each do |resource, run_time|
107
- puts '%19f %s' % [run_time, resource]
108
- end
109
- puts '+-----------------------------------------------------------------'\
110
- '-------------+'.purple
111
- puts ''
112
- puts "Chef Run Completed in #{run_time} on #{node.name}. Updated " \
113
- "#{updates} of #{total} resources."
114
-
115
- cookbooks = run_context.cookbook_collection
116
- puts
117
- puts "Slowest Resource: #{full_name(@max)} (%.6fs)"%[@max_time]
118
- puts ''
119
- puts Faker::Hacker.say_something_smart
120
- puts ''
121
- elsif run_status.failed?
122
- banner
123
- puts "Chef FAILED in #{run_time} on #{node.name} with exception:".orange
124
- puts run_status.formatted_exception
125
- end
126
- end
127
- end
@@ -1,109 +0,0 @@
1
- # encoding: UTF-8
2
- #
3
- # Author: Stefano Harding <riddopic@gmail.com>
4
- # License: Apache License, Version 2.0
5
- # Copyright: (C) 2014-2015 Stefano Harding
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- module Garcon
21
- module Resource
22
- # Helper module to automatically set @resource_name.
23
- #
24
- # @example
25
- # class MyResource < Chef::Resource
26
- # include Garcon
27
- #
28
- # provides :my_resource
29
- # end
30
- #
31
- module ResourceName
32
- # Constructor for Chef::Resource::MyResource.
33
- #
34
- def initialize(*args)
35
- super
36
- if self.class.resource_name(false)
37
- @resource_name = self.class.resource_name
38
- else
39
- @resource_name ||= self.class.resource_name
40
- end
41
- end
42
-
43
- module ClassMethods
44
- # Maps a resource/provider (and optionally a platform and version) to a
45
- # Chef resource/provider. This allows finer grained per platform
46
- # resource attributes and the end of overloaded resource definitions.
47
- #
48
- # @note
49
- # The provides method must be defined in both the custom resource and
50
- # custom provider files and both files must have identical provides
51
- # statement(s).
52
- #
53
- # @param [Symbol] name
54
- # Name of a Chef resource/provider to map to.
55
- #
56
- # @return [undefined]
57
- #
58
- def provides(name)
59
- if self.name && respond_to?(:constantize)
60
- old_constantize = instance_method(:constantize)
61
- define_singleton_method(:constantize) do |name|
62
- name == self.name ? self : old_constantize.bind(self).call(name)
63
- end
64
- end
65
- @provides_name = name
66
- super if defined?(super)
67
- end
68
-
69
- # Return the Snake case name of the current resource class. If not set
70
- # explicitly it will be introspected based on the class name.
71
- #
72
- # @param [Boolean] auto
73
- # Try to auto-detect based on class name.
74
- #
75
- # @return [Symbol]
76
- #
77
- def resource_name(auto = true)
78
- return @provides_name if @provides_name
79
- @provides_name || if name && name.start_with?('Chef::Resource')
80
- Garcon::Inflections.snakeify(name, 'Chef::Resource').to_sym
81
- elsif name
82
- Garcon::Inflections.snakeify(name.split('::').last).to_sym
83
- end
84
- end
85
-
86
- # Used by Resource#to_text to find the human name for the resource.
87
- #
88
- def dsl_name
89
- resource_name.to_s
90
- end
91
-
92
- # Hook called when module is included, extends a descendant with class
93
- # and instance methods.
94
- #
95
- # @param [Module] descendant
96
- # the module or class including Garcon::Resource::ResourceName
97
- #
98
- # @return [self]
99
- #
100
- def included(descendant)
101
- super
102
- descendant.extend ClassMethods
103
- end
104
- end
105
-
106
- extend ClassMethods
107
- end
108
- end
109
- end
@@ -1,127 +0,0 @@
1
- # encoding: UTF-8
2
- #
3
- # Author: Stefano Harding <riddopic@gmail.com>
4
- # License: Apache License, Version 2.0
5
- # Copyright: (C) 2014-2015 Stefano Harding
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- require 'thread' unless defined?(Thread)
21
- require 'tempfile' unless defined?(Tempfile)
22
- require 'fileutils' unless defined?(FileUtils)
23
-
24
- class File
25
-
26
- def self.atomic_id
27
- @atomic_id ||= 0
28
- @atomic_id += 1
29
- end
30
-
31
- # Same as `File.open`, but acts on a temporary copy of named
32
- # file, copying the file back to the original on completion.
33
- #
34
- # @uncommon
35
- # require 'facets/fileutils/atomic_open'
36
- #
37
- def self.atomic_open(file_name, mode="r", temp_dir=nil, &block)
38
- temp_dir = temp_dir || Dir.tmpdir
39
- temp_file = Tempfile.new("#{aomtic_id}-" + basename(file_name), temp_dir)
40
-
41
- if File.exist?(file_name)
42
- FileUtils.cp(file_name, temp_file)
43
- end
44
-
45
- open(temp_file, mode, &block)
46
-
47
- FileUtils.cp(temp_file, file_name)
48
- end
49
-
50
- # Write to a file atomically. Useful for situations where you don't
51
- # want other processes or threads to see half-written files.
52
- #
53
- # File.atomic_write("important.txt") do |file|
54
- # file.write("hello")
55
- # end
56
- #
57
- # If your temporary directory is not on the same filesystem as the file you're
58
- # trying to write, you can provide a different temporary directory.
59
- #
60
- # File.atomic_write("important.txt", "tmp") do |file|
61
- # file.write("hello")
62
- # end
63
- #
64
- # NOTE: This method is not a common core extension and is not
65
- # loaded automatically when using <code>require 'facets'</code>.
66
- #
67
- # CREDIT: David Heinemeier Hansson
68
- #
69
- # @uncommon
70
- # require 'facets/fileutils/atomic_write'
71
- #
72
- def self.atomic_write(file_name, temp_dir=nil)
73
- temp_dir = temp_dir || Dir.tmpdir
74
- temp_file = Tempfile.new(basename(file_name), temp_dir)
75
-
76
- yield temp_file
77
- temp_file.close
78
-
79
- begin
80
- ## Get original file permissions
81
- old_stat = stat(file_name)
82
- rescue Errno::ENOENT
83
- ## No old permissions, write a temp file to determine the defaults
84
- check_name = join(dirname(file_name), ".permissions_check.#{Thread.current.object_id}.#{Process.pid}.#{rand(1000000)}")
85
- open(check_name, "w") { }
86
- old_stat = stat(check_name)
87
- unlink(check_name)
88
- end
89
-
90
- ## Overwrite original file with temp file
91
- FileUtils.mv(temp_file.path, file_name)
92
-
93
- ## Set correct permissions on new file
94
- chown(old_stat.uid, old_stat.gid, file_name)
95
- chmod(old_stat.mode, file_name)
96
- end
97
-
98
- # Reads in a file, removes blank lines and removes lines starting
99
- # with '#' and then returns an array of all the remaining lines.
100
- #
101
- # Thr remark indicator can be overridden via the +:omit:+ option, which
102
- # can be a regualar expression or a string that is match against the
103
- # start of a line.
104
- #
105
- # CREDIT: Trans
106
-
107
- def self.read_list(filepath, options={})
108
- chomp = options[:chomp]
109
- omit = case options[:omit]
110
- when Regexp
111
- omit
112
- when nil
113
- /^\s*\#/
114
- else
115
- /^\s*#{Regexp.escape(omit)}/
116
- end
117
-
118
- list = []
119
- readlines(filepath).each do |line|
120
- line = line.strip.chomp(chomp)
121
- next if line.empty?
122
- next if omit === line
123
- list << line
124
- end
125
- list
126
- end
127
- end
@@ -1,62 +0,0 @@
1
- # encoding: UTF-8
2
- #
3
- # Author: Stefano Harding <riddopic@gmail.com>
4
- # License: Apache License, Version 2.0
5
- # Copyright: (C) 2014-2015 Stefano Harding
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- module FileTest
21
-
22
- SEPARATOR_PATTERN = (
23
- if File::ALT_SEPARATOR
24
- /[#{Regexp.quote File::ALT_SEPARATOR}#{Regexp.quote File::SEPARATOR}]/
25
- else
26
- /#{Regexp.quote File::SEPARATOR}/
27
- end
28
- ).freeze
29
-
30
- module_function
31
-
32
- # Predicate method for testing whether a path is absolute.
33
- # It returns +true+ if the pathname begins with a slash.
34
- def absolute?(path)
35
- !relative?(path)
36
- end
37
-
38
- # The opposite of #absolute?
39
- def relative?(path)
40
- while r = chop_basename(path.to_s)
41
- path, _ = r
42
- end
43
- path == ''
44
- end
45
-
46
- # List File.split, but preserves the file separators.
47
- #
48
- # FileTest.chop_basename('/usr/lib') #=> ['/usr/', 'lib']
49
- # FileTest.chop_basename('/') #=> nil
50
- #
51
- # Returns Array of `[pre-basename, basename]` or `nil`.
52
- #
53
- # This method is here simply to support the #relative? and #absolute? methods.
54
- def chop_basename(path)
55
- base = File.basename(path)
56
- if /\A#{SEPARATOR_PATTERN}?\z/ =~ base
57
- return nil
58
- else
59
- return path[0, path.rindex(base)], base
60
- end
61
- end
62
- end