puppet-module 0.3.0

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 (159) hide show
  1. data/CHANGES.markdown +91 -0
  2. data/LICENSE +17 -0
  3. data/README.markdown +221 -0
  4. data/Rakefile +87 -0
  5. data/VERSION +1 -0
  6. data/bin/puppet-module +7 -0
  7. data/lib/puppet/module/tool.rb +124 -0
  8. data/lib/puppet/module/tool/applications.rb +18 -0
  9. data/lib/puppet/module/tool/applications/application.rb +83 -0
  10. data/lib/puppet/module/tool/applications/builder.rb +88 -0
  11. data/lib/puppet/module/tool/applications/checksummer.rb +38 -0
  12. data/lib/puppet/module/tool/applications/cleaner.rb +14 -0
  13. data/lib/puppet/module/tool/applications/freezer.rb +20 -0
  14. data/lib/puppet/module/tool/applications/generator.rb +117 -0
  15. data/lib/puppet/module/tool/applications/installer.rb +83 -0
  16. data/lib/puppet/module/tool/applications/registrar.rb +34 -0
  17. data/lib/puppet/module/tool/applications/releaser.rb +48 -0
  18. data/lib/puppet/module/tool/applications/searcher.rb +34 -0
  19. data/lib/puppet/module/tool/applications/unpacker.rb +69 -0
  20. data/lib/puppet/module/tool/applications/unreleaser.rb +42 -0
  21. data/lib/puppet/module/tool/cache.rb +56 -0
  22. data/lib/puppet/module/tool/checksums.rb +52 -0
  23. data/lib/puppet/module/tool/cli.rb +127 -0
  24. data/lib/puppet/module/tool/contents_description.rb +84 -0
  25. data/lib/puppet/module/tool/dependency.rb +26 -0
  26. data/lib/puppet/module/tool/metadata.rb +80 -0
  27. data/lib/puppet/module/tool/modulefile.rb +47 -0
  28. data/lib/puppet/module/tool/repository.rb +74 -0
  29. data/lib/puppet/module/tool/skeleton.rb +39 -0
  30. data/lib/puppet/module/tool/utils.rb +9 -0
  31. data/lib/puppet/module/tool/utils/interrogation.rb +39 -0
  32. data/lib/puppet/module/tool/utils/settings.rb +36 -0
  33. data/lib/puppet/module/tool/utils/uri.rb +16 -0
  34. data/spec/fixtures/releases/jamtur01-apache/Modulefile +2 -0
  35. data/spec/fixtures/releases/jamtur01-apache/files/httpd +24 -0
  36. data/spec/fixtures/releases/jamtur01-apache/files/test.vhost +18 -0
  37. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +21 -0
  38. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/type/a2mod.rb +12 -0
  39. data/spec/fixtures/releases/jamtur01-apache/manifests/dev.pp +5 -0
  40. data/spec/fixtures/releases/jamtur01-apache/manifests/init.pp +34 -0
  41. data/spec/fixtures/releases/jamtur01-apache/manifests/params.pp +17 -0
  42. data/spec/fixtures/releases/jamtur01-apache/manifests/php.pp +5 -0
  43. data/spec/fixtures/releases/jamtur01-apache/manifests/ssl.pp +15 -0
  44. data/spec/fixtures/releases/jamtur01-apache/manifests/vhost.pp +15 -0
  45. data/spec/fixtures/releases/jamtur01-apache/metadata.json +1 -0
  46. data/spec/fixtures/releases/jamtur01-apache/templates/vhost-default.conf.erb +20 -0
  47. data/spec/fixtures/releases/jamtur01-apache/tests/apache.pp +1 -0
  48. data/spec/fixtures/releases/jamtur01-apache/tests/dev.pp +1 -0
  49. data/spec/fixtures/releases/jamtur01-apache/tests/init.pp +1 -0
  50. data/spec/fixtures/releases/jamtur01-apache/tests/php.pp +1 -0
  51. data/spec/fixtures/releases/jamtur01-apache/tests/ssl.pp +1 -0
  52. data/spec/fixtures/releases/jamtur01-apache/tests/vhost.pp +2 -0
  53. data/spec/integration/cli_spec.rb +373 -0
  54. data/spec/spec.opts +1 -0
  55. data/spec/spec_helper.rb +15 -0
  56. data/spec/support/output_support.rb +19 -0
  57. data/spec/support/stub_http_support.rb +14 -0
  58. data/spec/support/testdir_support.rb +26 -0
  59. data/spec/unit/application_spec.rb +25 -0
  60. data/spec/unit/repository_spec.rb +51 -0
  61. data/templates/generator/Modulefile.erb +5 -0
  62. data/templates/generator/README.erb +3 -0
  63. data/templates/generator/files/README.markdown +22 -0
  64. data/templates/generator/lib/puppet/facter/README.markdown +22 -0
  65. data/templates/generator/lib/puppet/parser/functions/README.markdown +17 -0
  66. data/templates/generator/lib/puppet/provider/README.markdown +14 -0
  67. data/templates/generator/lib/puppet/type/README.markdown +14 -0
  68. data/templates/generator/manifests/README.markdown +28 -0
  69. data/templates/generator/manifests/init.pp.erb +17 -0
  70. data/templates/generator/metadata.json +12 -0
  71. data/templates/generator/spec/README.markdown +7 -0
  72. data/templates/generator/spec/spec.opts +6 -0
  73. data/templates/generator/spec/spec_helper.rb +18 -0
  74. data/templates/generator/spec/unit/puppet/provider/README.markdown +4 -0
  75. data/templates/generator/spec/unit/puppet/type/README.markdown +4 -0
  76. data/templates/generator/templates/README.markdown +23 -0
  77. data/templates/generator/tests/init.pp.erb +1 -0
  78. data/vendor/facets-2.8.2-partial/lib/facets/kernel/returning.rb +23 -0
  79. data/vendor/facets-2.8.2-partial/lib/facets/kernel/tap.rb +39 -0
  80. data/vendor/multipart-post-1.0/Manifest.txt +9 -0
  81. data/vendor/multipart-post-1.0/README.txt +61 -0
  82. data/vendor/multipart-post-1.0/Rakefile +21 -0
  83. data/vendor/multipart-post-1.0/lib/composite_io.rb +89 -0
  84. data/vendor/multipart-post-1.0/lib/multipartable.rb +13 -0
  85. data/vendor/multipart-post-1.0/lib/net/http/post/multipart.rb +27 -0
  86. data/vendor/multipart-post-1.0/lib/parts.rb +66 -0
  87. data/vendor/multipart-post-1.0/test/net/http/post/test_multipart.rb +55 -0
  88. data/vendor/multipart-post-1.0/test/test_composite_io.rb +50 -0
  89. data/vendor/thor-852190ae/CHANGELOG.rdoc +89 -0
  90. data/vendor/thor-852190ae/LICENSE +20 -0
  91. data/vendor/thor-852190ae/README.rdoc +297 -0
  92. data/vendor/thor-852190ae/REVISION +1 -0
  93. data/vendor/thor-852190ae/Thorfile +69 -0
  94. data/vendor/thor-852190ae/bin/rake2thor +86 -0
  95. data/vendor/thor-852190ae/bin/thor +6 -0
  96. data/vendor/thor-852190ae/lib/thor.rb +244 -0
  97. data/vendor/thor-852190ae/lib/thor/actions.rb +275 -0
  98. data/vendor/thor-852190ae/lib/thor/actions/create_file.rb +103 -0
  99. data/vendor/thor-852190ae/lib/thor/actions/directory.rb +91 -0
  100. data/vendor/thor-852190ae/lib/thor/actions/empty_directory.rb +134 -0
  101. data/vendor/thor-852190ae/lib/thor/actions/file_manipulation.rb +223 -0
  102. data/vendor/thor-852190ae/lib/thor/actions/inject_into_file.rb +104 -0
  103. data/vendor/thor-852190ae/lib/thor/base.rb +540 -0
  104. data/vendor/thor-852190ae/lib/thor/core_ext/file_binary_read.rb +9 -0
  105. data/vendor/thor-852190ae/lib/thor/core_ext/hash_with_indifferent_access.rb +75 -0
  106. data/vendor/thor-852190ae/lib/thor/core_ext/ordered_hash.rb +100 -0
  107. data/vendor/thor-852190ae/lib/thor/error.rb +30 -0
  108. data/vendor/thor-852190ae/lib/thor/group.rb +271 -0
  109. data/vendor/thor-852190ae/lib/thor/invocation.rb +180 -0
  110. data/vendor/thor-852190ae/lib/thor/parser.rb +4 -0
  111. data/vendor/thor-852190ae/lib/thor/parser/argument.rb +67 -0
  112. data/vendor/thor-852190ae/lib/thor/parser/arguments.rb +150 -0
  113. data/vendor/thor-852190ae/lib/thor/parser/option.rb +128 -0
  114. data/vendor/thor-852190ae/lib/thor/parser/options.rb +169 -0
  115. data/vendor/thor-852190ae/lib/thor/rake_compat.rb +66 -0
  116. data/vendor/thor-852190ae/lib/thor/runner.rb +314 -0
  117. data/vendor/thor-852190ae/lib/thor/shell.rb +83 -0
  118. data/vendor/thor-852190ae/lib/thor/shell/basic.rb +239 -0
  119. data/vendor/thor-852190ae/lib/thor/shell/color.rb +108 -0
  120. data/vendor/thor-852190ae/lib/thor/task.rb +102 -0
  121. data/vendor/thor-852190ae/lib/thor/util.rb +230 -0
  122. data/vendor/thor-852190ae/lib/thor/version.rb +3 -0
  123. data/vendor/thor-852190ae/spec/actions/create_file_spec.rb +170 -0
  124. data/vendor/thor-852190ae/spec/actions/directory_spec.rb +131 -0
  125. data/vendor/thor-852190ae/spec/actions/empty_directory_spec.rb +91 -0
  126. data/vendor/thor-852190ae/spec/actions/file_manipulation_spec.rb +271 -0
  127. data/vendor/thor-852190ae/spec/actions/inject_into_file_spec.rb +135 -0
  128. data/vendor/thor-852190ae/spec/actions_spec.rb +292 -0
  129. data/vendor/thor-852190ae/spec/base_spec.rb +263 -0
  130. data/vendor/thor-852190ae/spec/core_ext/hash_with_indifferent_access_spec.rb +43 -0
  131. data/vendor/thor-852190ae/spec/core_ext/ordered_hash_spec.rb +115 -0
  132. data/vendor/thor-852190ae/spec/fixtures/application.rb +2 -0
  133. data/vendor/thor-852190ae/spec/fixtures/bundle/execute.rb +6 -0
  134. data/vendor/thor-852190ae/spec/fixtures/bundle/main.thor +1 -0
  135. data/vendor/thor-852190ae/spec/fixtures/doc/%file_name%.rb.tt +1 -0
  136. data/vendor/thor-852190ae/spec/fixtures/doc/README +3 -0
  137. data/vendor/thor-852190ae/spec/fixtures/doc/config.rb +1 -0
  138. data/vendor/thor-852190ae/spec/fixtures/group.thor +83 -0
  139. data/vendor/thor-852190ae/spec/fixtures/invoke.thor +112 -0
  140. data/vendor/thor-852190ae/spec/fixtures/script.thor +140 -0
  141. data/vendor/thor-852190ae/spec/fixtures/task.thor +10 -0
  142. data/vendor/thor-852190ae/spec/group_spec.rb +171 -0
  143. data/vendor/thor-852190ae/spec/invocation_spec.rb +107 -0
  144. data/vendor/thor-852190ae/spec/parser/argument_spec.rb +47 -0
  145. data/vendor/thor-852190ae/spec/parser/arguments_spec.rb +64 -0
  146. data/vendor/thor-852190ae/spec/parser/option_spec.rb +202 -0
  147. data/vendor/thor-852190ae/spec/parser/options_spec.rb +292 -0
  148. data/vendor/thor-852190ae/spec/rake_compat_spec.rb +68 -0
  149. data/vendor/thor-852190ae/spec/runner_spec.rb +202 -0
  150. data/vendor/thor-852190ae/spec/shell/basic_spec.rb +205 -0
  151. data/vendor/thor-852190ae/spec/shell/color_spec.rb +41 -0
  152. data/vendor/thor-852190ae/spec/shell_spec.rb +34 -0
  153. data/vendor/thor-852190ae/spec/spec.opts +1 -0
  154. data/vendor/thor-852190ae/spec/spec_helper.rb +54 -0
  155. data/vendor/thor-852190ae/spec/task_spec.rb +69 -0
  156. data/vendor/thor-852190ae/spec/thor_spec.rb +237 -0
  157. data/vendor/thor-852190ae/spec/util_spec.rb +167 -0
  158. data/vendor/thor-852190ae/thor.gemspec +120 -0
  159. metadata +229 -0
@@ -0,0 +1,84 @@
1
+ module Puppet::Module::Tool
2
+
3
+ # = ContentsDescription
4
+ #
5
+ # This class populates +Metadata+'s Puppet type information.
6
+ class ContentsDescription
7
+
8
+ # Instantiate object for string +module_path+.
9
+ def initialize(module_path)
10
+ @module_path = module_path
11
+ end
12
+
13
+ # Update +Metadata+'s Puppet type information.
14
+ def annotate(metadata)
15
+ metadata.types.replace data.clone
16
+ end
17
+
18
+ # Return types for this module. Result is an array of hashes, each of which
19
+ # describes a Puppet type. The type description hash structure is:
20
+ # * :name => Name of this Puppet type.
21
+ # * :doc => Documentation for this type.
22
+ # * :properties => Array of hashes representing the type's properties, each
23
+ # containing :name and :doc.
24
+ # * :parameters => Array of hashes representing the type's parameters, each
25
+ # containing :name and :doc.
26
+ # * :providers => Array of hashes representing the types providers, each
27
+ # containing :name and :doc.
28
+ # TODO Write a TypeDescription to encapsulate these structures and logic?
29
+ def data
30
+ unless @data
31
+ @data = []
32
+ type_names = []
33
+ for module_filename in Dir[File.join(@module_path, "lib/puppet/type/*.rb")]
34
+ require module_filename
35
+ type_name = File.basename(module_filename, ".rb")
36
+ type_names << type_name
37
+
38
+ for provider_filename in Dir[File.join(@module_path, "lib/puppet/provider/#{type_name}/*.rb")]
39
+ require provider_filename
40
+ end
41
+ end
42
+
43
+ type_names.each do |type_name|
44
+ if type = Puppet::Type.type(type_name.to_sym)
45
+ type_hash = {:name => type_name, :doc => type.doc}
46
+ type_hash[:properties] = attr_doc(type, :property)
47
+ type_hash[:parameters] = attr_doc(type, :param)
48
+ if type.providers.size > 0
49
+ type_hash[:providers] = provider_doc(type)
50
+ end
51
+ @data << type_hash
52
+ else
53
+ puts "Could not find/load type: #{type_name}"
54
+ end
55
+ end
56
+ end
57
+ @data
58
+ end
59
+
60
+ # Return an array of hashes representing this +type+'s attrs of +kind+
61
+ # (e.g. :param or :property), each containing :name and :doc.
62
+ def attr_doc(type, kind)
63
+ returning([]) do |attrs|
64
+ type.allattrs.each do |name|
65
+ if type.attrtype(name) == kind && name != :provider
66
+ attrs.push(:name => name, :doc => type.attrclass(name).doc)
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ # Return an array of hashes representing this +type+'s providers, each
73
+ # containing :name and :doc.
74
+ def provider_doc(type)
75
+ returning([]) do |providers|
76
+ type.providers.sort_by{ |o| o.to_s }.each do |prov|
77
+ providers.push(:name => prov, :doc => type.provider(prov).doc)
78
+ end
79
+ end
80
+ end
81
+
82
+ end
83
+
84
+ end
@@ -0,0 +1,26 @@
1
+ module Puppet::Module::Tool
2
+
3
+ class Dependency
4
+
5
+ # Instantiates a new module dependency with a +full_name+ (e.g.
6
+ # "myuser-mymodule"), and optional +version_requirement+ (e.g. "0.0.1") and
7
+ # optional repository (a URL string).
8
+ def initialize(full_name, version_requirement = nil, repository = nil)
9
+ @full_name = full_name
10
+ # TODO: add error checking, the next line raises ArgumentError when +full_name+ is invalid
11
+ @username, @name = Puppet::Module::Tool.username_and_modname_from(full_name)
12
+ @version_requirement = version_requirement
13
+ @repository = repository ? Repository.new(repository) : nil
14
+ end
15
+
16
+ # Return PSON representation of this data.
17
+ def to_pson(*args)
18
+ result = { :name => @full_name }
19
+ result[:version_requirement] = @version_requirement if @version_requirement && ! @version_requirement.nil?
20
+ result[:repository] = @repository.to_s if @repository && ! @repository.nil?
21
+ result.to_pson(*args)
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,80 @@
1
+ module Puppet::Module::Tool
2
+
3
+ # = Metadata
4
+ #
5
+ # This class provides a data structure representing a module's metadata.
6
+ # It provides some basic parsing, but other data is injected into it using
7
+ # +annotate+ methods in other classes.
8
+ class Metadata
9
+
10
+ # The full name of the module, which is a dash-separated combination of the
11
+ # +username+ and module +name+.
12
+ attr_reader :full_name
13
+
14
+ # The name of the user that owns this module.
15
+ attr_reader :username
16
+
17
+ # The name of this module. See also +full_name+.
18
+ attr_reader :name
19
+
20
+ # The version of this module, a string like '0.1.0'.
21
+ attr_accessor :version
22
+
23
+ # Instantiate from a hash, whose keys are setters in this class.
24
+ def initialize(settings={})
25
+ settings.each do |key, value|
26
+ send("#{key}=", value)
27
+ end
28
+ end
29
+
30
+ # Set the full name of this module, and from it, the +username+ and
31
+ # module +name+.
32
+ def full_name=(full_name)
33
+ @full_name = full_name
34
+ @username, @name = Puppet::Module::Tool::username_and_modname_from(full_name)
35
+ end
36
+
37
+ # Return an array of the module's Dependency objects.
38
+ def dependencies
39
+ return @dependencies ||= []
40
+ end
41
+
42
+ # Return an array of the module's Puppet types, each one is a hash
43
+ # containing :name and :doc.
44
+ # TODO Shouldn't this be it's own class?
45
+ def types
46
+ return @types ||= []
47
+ end
48
+
49
+ # Return module's file checksums.
50
+ def checksums
51
+ return @checksums ||= {}
52
+ end
53
+
54
+ # Return the dashed name of the module, which may either be the
55
+ # dash-separated combination of the +username+ and module +name+, or just
56
+ # the module +name+.
57
+ def dashed_name
58
+ return [@username, @name].compact.join('-')
59
+ end
60
+
61
+ # Return the release name, which is the combination of the +dashed_name+
62
+ # of the module and its +version+ number.
63
+ def release_name
64
+ return [dashed_name, @version].join('-')
65
+ end
66
+
67
+ # Return the PSON record representing this instance.
68
+ def to_pson(*args)
69
+ return {
70
+ :name => @full_name,
71
+ :version => @version,
72
+ :dependencies => dependencies,
73
+ :types => types,
74
+ :checksums => checksums
75
+ }.to_pson(*args)
76
+ end
77
+
78
+ end
79
+
80
+ end
@@ -0,0 +1,47 @@
1
+ module Puppet::Module::Tool
2
+
3
+ # = Modulefile
4
+ #
5
+ # This class provides the DSL used for evaluating the module's 'Modulefile'.
6
+ # These methods are used to concisely define this module's attributes, which
7
+ # are later rendered as PSON into a 'metadata.json' file.
8
+ class Modulefile
9
+
10
+ # Read the +filename+ and eval its Ruby code to set values in the Metadata
11
+ # +metadata+ instance.
12
+ def self.evaluate(metadata, filename)
13
+ returning(new(metadata)) do |builder|
14
+ if File.file?(filename)
15
+ builder.instance_eval(File.read(filename.to_s), filename.to_s, 1)
16
+ else
17
+ puts "No Modulefile: #{filename}"
18
+ end
19
+ end
20
+ end
21
+
22
+ # Instantiate with the Metadata +metadata+ instance.
23
+ def initialize(metadata)
24
+ @metadata = metadata
25
+ end
26
+
27
+ # Set the +full_name+ (e.g. "myuser-mymodule"), which will also set the
28
+ # +username+ and module +name+. Required.
29
+ def name(name)
30
+ @metadata.full_name = name
31
+ end
32
+
33
+ # Set the module +version+ (e.g., "0.0.1"). Required.
34
+ def version(version)
35
+ @metadata.version = version
36
+ end
37
+
38
+ # Add a dependency with the full_name +name+ (e.g. "myuser-mymodule"), an
39
+ # optional +version_requirement+ (e.g. "0.0.1") and +repository+ (a URL
40
+ # string). Optional. Can be called multiple times to add many dependencies.
41
+ def dependency(name, version_requirement = nil, repository = nil)
42
+ @metadata.dependencies << Dependency.new(name, version_requirement, repository)
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,74 @@
1
+ require 'net/http'
2
+ require 'digest/sha1'
3
+
4
+ module Puppet::Module::Tool
5
+
6
+ # = Repository
7
+ #
8
+ # This class is a file for accessing remote repositories with modules.
9
+ class Repository
10
+ include Utils::URI
11
+ include Utils::Interrogation
12
+
13
+ attr_reader :uri, :cache
14
+
15
+ # Instantiate a new repository instance rooted at the optional string
16
+ # +url+, else an instance of the default Puppet modules repository.
17
+ def initialize(url=Puppet::Module::Tool::REPOSITORY_URL)
18
+ @uri = normalize(url)
19
+ @cache = Cache.new(self)
20
+ end
21
+
22
+ # Return a Net::HTTPResponse read for this +request+.
23
+ #
24
+ # Options:
25
+ # * :authenticate => Request authentication on the terminal. Defaults to false.
26
+ def contact(request, options = {})
27
+ if options[:authenticate]
28
+ authenticate(request)
29
+ end
30
+ if ! @uri.user.nil? && ! @uri.password.nil?
31
+ request.basic_auth(@uri.user, @uri.password)
32
+ end
33
+ return read_contact(request)
34
+ end
35
+
36
+ # Return a Net::HTTPResponse read from this HTTPRequest +request+.
37
+ def read_contact(request)
38
+ Net::HTTP.start(@uri.host, @uri.port) do |http|
39
+ http.request(request)
40
+ end
41
+ end
42
+
43
+ # Set the HTTP Basic Authentication parameters for the Net::HTTPRequest
44
+ # +request+ by asking the user for input on the console.
45
+ def authenticate(request)
46
+ header "Authenticating for #{@uri}"
47
+ email = prompt('Email Address')
48
+ password = prompt('Password', true)
49
+ request.basic_auth(email, password)
50
+ end
51
+
52
+ # Return the local file name containing the data downloaded from the
53
+ # repository at +release+ (e.g. "myuser-mymodule").
54
+ def retrieve(release)
55
+ return cache.retrieve(@uri + release)
56
+ end
57
+
58
+ # Return the URI string for this repository.
59
+ def to_s
60
+ return @uri.to_s
61
+ end
62
+
63
+ # Return the cache key for this repository, this a hashed string based on
64
+ # the URI.
65
+ def cache_key
66
+ return @cache_key ||= [
67
+ @uri.to_s.gsub(/[^[:alnum:]]+/, '_').sub(/_$/, ''),
68
+ Digest::SHA1.hexdigest(@uri.to_s)
69
+ ].join('-')
70
+ end
71
+
72
+ end
73
+
74
+ end
@@ -0,0 +1,39 @@
1
+ module Puppet::Module::Tool
2
+
3
+ # = Skeleton
4
+ #
5
+ # This class provides methods for finding templates for the 'generate' action.
6
+ class Skeleton
7
+
8
+ # TODO Review whether the 'freeze' feature should be fixed or deleted.
9
+ # def freeze!
10
+ # FileUtils.rm_fr custom_path rescue nil
11
+ # FileUtils.cp_r default_path, custom_path
12
+ # end
13
+
14
+ # Return Pathname with 'generate' templates.
15
+ def path
16
+ paths.detect { |path| path.directory? }
17
+ end
18
+
19
+ # Return Pathnames to look for 'generate' templates.
20
+ def paths
21
+ @paths ||= [
22
+ custom_path,
23
+ default_path
24
+ ]
25
+ end
26
+
27
+ # Return Pathname of custom templates directory.
28
+ def custom_path
29
+ Puppet::Module::Tool.working_dir + 'skeleton'
30
+ end
31
+
32
+ # Return Pathname of default template directory.
33
+ def default_path
34
+ Puppet::Module::Tool.root + 'templates' + 'generator'
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,9 @@
1
+ module Puppet::Module::Tool
2
+ module Utils
3
+
4
+ require 'puppet/module/tool/utils/uri'
5
+ require 'puppet/module/tool/utils/interrogation'
6
+ require 'puppet/module/tool/utils/settings'
7
+
8
+ end
9
+ end
@@ -0,0 +1,39 @@
1
+ module Puppet::Module::Tool
2
+ module Utils
3
+
4
+ # = Interrogation
5
+ #
6
+ # This module contains methods to emit text to the console, such as headers.
7
+ module Interrogation
8
+
9
+ def header(text)
10
+ $stderr.puts('=' * text.size, text, "-" * text.size)
11
+ end
12
+
13
+ def say(*args)
14
+ $stderr.puts(*args)
15
+ end
16
+
17
+ def subheader(line)
18
+ say line, ('-' * line.size)
19
+ end
20
+
21
+ def confirms?(question)
22
+ $stderr.print "#{question} [y/N]: "
23
+ $stdin.gets =~ /y/i
24
+ end
25
+
26
+ def prompt(question, quiet = false)
27
+ $stderr.print "#{question}: "
28
+ system 'stty -echo' if quiet
29
+ $stdin.gets.strip
30
+ ensure
31
+ if quiet
32
+ system 'stty echo'
33
+ say "\n---------"
34
+ end
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,36 @@
1
+ module Puppet::Module::Tool::Utils
2
+
3
+ # = Settings
4
+ #
5
+ # This module contains methods for interacting with Puppet's settings files.
6
+ module Settings
7
+
8
+ def prepare_settings(options = {})
9
+ return if @settings_prepared
10
+
11
+ if options[:config]
12
+ Puppet.settings.send(:set_value, :config, options[:config], :cli)
13
+ end
14
+
15
+ Puppet.setdefaults(:puppet_module,
16
+ :puppet_module_repository => [Puppet::Module::Tool::REPOSITORY_URL, "The module repository"],
17
+ :puppet_module_working_dir => ['$vardir/puppet-module', "The directory in which module tool data is stored"])
18
+
19
+ Puppet::Module::Tool.working_dir.mkpath
20
+
21
+ Puppet.settings.use(:puppet_module)
22
+
23
+ Puppet.settings.parse
24
+
25
+ [:puppet_module_repository].each do |key|
26
+ if options[key]
27
+ Puppet.settings.send(:set_value, key, options[key], :cli)
28
+ end
29
+ end
30
+
31
+ @settings_prepared = true
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,16 @@
1
+ require 'uri'
2
+
3
+ module Puppet::Module::Tool
4
+ module Utils
5
+ module URI
6
+
7
+ # Return a URI instance for the +uri+, a a string or URI object.
8
+ def normalize(url)
9
+ return url.is_a?(::URI) ?
10
+ url :
11
+ ::URI.parse(url)
12
+ end
13
+
14
+ end
15
+ end
16
+ end