puppet-retrospec 0.11.0 → 0.12.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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +17 -0
  3. data/CHANGELOG.md +11 -0
  4. data/DEVELOPMENT.md +3 -0
  5. data/Gemfile +10 -9
  6. data/Gemfile.lock +2 -0
  7. data/README.md +211 -273
  8. data/Rakefile +8 -8
  9. data/VERSION +1 -1
  10. data/lib/retrospec-puppet.rb +3 -3
  11. data/lib/retrospec/plugins/v1/plugin/conditional.rb +5 -6
  12. data/lib/retrospec/plugins/v1/plugin/exceptions.rb +17 -0
  13. data/lib/retrospec/plugins/v1/plugin/generators.rb +7 -0
  14. data/lib/retrospec/plugins/v1/plugin/generators/fact_generator.rb +18 -10
  15. data/lib/retrospec/plugins/v1/plugin/generators/function_generator.rb +187 -0
  16. data/lib/retrospec/plugins/v1/plugin/generators/module_generator.rb +25 -26
  17. data/lib/retrospec/plugins/v1/plugin/generators/{facter.rb → parsers/facter.rb} +28 -35
  18. data/lib/retrospec/plugins/v1/plugin/generators/parsers/function.rb +91 -0
  19. data/lib/retrospec/plugins/v1/plugin/generators/parsers/type.rb +79 -0
  20. data/lib/retrospec/plugins/v1/plugin/generators/provider_generator.rb +107 -0
  21. data/lib/retrospec/plugins/v1/plugin/generators/schema_generator.rb +221 -0
  22. data/lib/retrospec/plugins/v1/plugin/generators/type_generator.rb +118 -0
  23. data/lib/retrospec/plugins/v1/plugin/helpers.rb +3 -7
  24. data/lib/retrospec/plugins/v1/plugin/puppet.rb +141 -60
  25. data/lib/retrospec/plugins/v1/plugin/puppet_module.rb +29 -26
  26. data/lib/retrospec/plugins/v1/plugin/resource.rb +6 -7
  27. data/lib/retrospec/plugins/v1/plugin/spec_object.rb +5 -8
  28. data/lib/retrospec/plugins/v1/plugin/template_helpers.rb +9 -10
  29. data/lib/retrospec/plugins/v1/plugin/templates/clone-hook +15 -8
  30. data/lib/retrospec/plugins/v1/plugin/type_code.rb +4 -4
  31. data/lib/retrospec/plugins/v1/plugin/variable_store.rb +26 -30
  32. data/lib/retrospec/plugins/v1/plugin/version.rb +1 -1
  33. data/puppet-retrospec.gemspec +43 -4
  34. data/spec/fixtures/facts/oracle_controls.rb +38 -0
  35. data/spec/fixtures/fixture_modules/required_parameters/manifests/init.pp +8 -0
  36. data/spec/fixtures/fixture_modules/sample_module/lib/facter/fix_installed.rb +11 -0
  37. data/spec/fixtures/fixture_modules/sample_module/lib/puppet/functions/awesome_parser.rb +13 -0
  38. data/spec/fixtures/fixture_modules/sample_module/lib/puppet/functions/reduce.rb +31 -0
  39. data/spec/fixtures/fixture_modules/sample_module/lib/puppet/parser/functions/bad_sha1.rb +6 -0
  40. data/spec/fixtures/fixture_modules/sample_module/lib/puppet/parser/functions/defined.rb +94 -0
  41. data/spec/fixtures/fixture_modules/sample_module/lib/puppet/parser/functions/sha1.rb +6 -0
  42. data/spec/fixtures/fixture_modules/sample_module/spec/unit/facter/fix_installed_spec.rb +21 -0
  43. data/spec/fixtures/modules/tomcat/files/.gitkeep +0 -0
  44. data/spec/fixtures/modules/tomcat/templates/.gitkeep +0 -0
  45. data/spec/fixtures/modules/tomcat/tests/.gitkeep +0 -0
  46. data/spec/fixtures/providers/bmc/ipmitool.rb +188 -0
  47. data/spec/fixtures/providers/bmcuser/ipmitool.rb +140 -0
  48. data/spec/fixtures/types/bmc.rb +102 -0
  49. data/spec/fixtures/types/bmcuser.rb +46 -0
  50. data/spec/fixtures/types/db_opatch.rb +93 -0
  51. data/spec/integration/retrospec_spec.rb +1 -3
  52. data/spec/spec_helper.rb +33 -6
  53. data/spec/unit/conditional_spec.rb +12 -15
  54. data/spec/unit/generators/fact_generater_spec.rb +49 -17
  55. data/spec/unit/generators/function_generator_spec.rb +301 -0
  56. data/spec/unit/generators/function_spec.rb +67 -0
  57. data/spec/unit/generators/parsers/fact_spec.rb +62 -0
  58. data/spec/unit/generators/parsers/provider_spec.rb +44 -0
  59. data/spec/unit/generators/parsers/type_spec.rb +93 -0
  60. data/spec/unit/generators/provider_generator_spec.rb +120 -0
  61. data/spec/unit/generators/schema_generator_spec.rb +122 -0
  62. data/spec/unit/generators/type_generator_spec.rb +173 -0
  63. data/spec/unit/module_spec.rb +7 -10
  64. data/spec/unit/plugin_spec.rb +213 -15
  65. data/spec/unit/puppet-retrospec_spec.rb +81 -100
  66. data/spec/unit/resource_spec.rb +16 -17
  67. data/spec/unit/spec_object_spec.rb +46 -0
  68. data/spec/unit/type_code_spec.rb +9 -11
  69. data/spec/unit/variable_store_spec.rb +41 -43
  70. metadata +54 -4
  71. data/spec/unit/generators/fact_spec.rb +0 -58
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ begin
6
6
  Bundler.setup(:default, :development)
7
7
  rescue Bundler::BundlerError => e
8
8
  $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
9
+ $stderr.puts 'Run `bundle install` to install missing gems'
10
10
  exit e.status_code
11
11
  end
12
12
  require 'rake'
@@ -14,13 +14,13 @@ require 'rake'
14
14
  require 'jeweler'
15
15
  Jeweler::Tasks.new do |gem|
16
16
  # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "puppet-retrospec"
18
- gem.homepage = "http://github.com/nwops/puppet-retrospec"
19
- gem.license = "MIT"
20
- gem.summary = %Q{Generates puppet rspec test code based on the classes and defines inside the manifests directory. Aims to reduce some of the boilerplate coding with default test patterns.}
21
- gem.description = %Q{Retrofits and generates valid puppet rspec test code to existing modules}
22
- gem.email = "corey@logicminds.biz"
23
- gem.authors = ["Corey Osman"]
17
+ gem.name = 'puppet-retrospec'
18
+ gem.homepage = 'http://github.com/nwops/puppet-retrospec'
19
+ gem.license = 'MIT'
20
+ gem.summary = %(Generates puppet rspec test code based on the classes and defines inside the manifests directory. Aims to reduce some of the boilerplate coding with default test patterns.)
21
+ gem.description = %(Retrofits and generates valid puppet rspec test code to existing modules)
22
+ gem.email = 'corey@logicminds.biz'
23
+ gem.authors = ['Corey Osman']
24
24
  # dependencies defined in Gemfile
25
25
  end
26
26
  Jeweler::RubygemsDotOrgTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.11.0
1
+ 0.12.0
@@ -1,4 +1,4 @@
1
- vendor = File.join(File.dirname(File.dirname(__FILE__)),'vendor')
2
- $:.unshift(File.expand_path(File.join([vendor, "gems", "puppet-3.7.3", "lib"])))
1
+ vendor = File.join(File.dirname(File.dirname(__FILE__)), 'vendor')
2
+ $LOAD_PATH.unshift(File.expand_path(File.join([vendor, 'gems', 'puppet-3.7.3', 'lib'])))
3
3
  require 'retrospec/plugins/v1/plugin/puppet'
4
- require 'awesome_print' # required for printing templates
4
+ require 'awesome_print' # required for printing templates
@@ -8,8 +8,8 @@ class Conditional
8
8
  # those that can be changed
9
9
  # those that can be influenced (facts, other variables that contain variables)
10
10
  # takes a subtype of Puppet::AST::Branch that contains conditional logic
11
- def initialize(branch, parameters)
12
- @statements = branch.statements
11
+ def initialize(branch, _parameters)
12
+ @statements = branch.statements
13
13
  end
14
14
 
15
15
  # get the attributes for the given resources found in the type code passed in
@@ -24,7 +24,7 @@ class Conditional
24
24
 
25
25
  # a array of types the are known to contain conditional code and statements
26
26
  def self.types
27
- #test, statement, value
27
+ # test, statement, value
28
28
  # if I don't have a statement that I am part of a bigger code block
29
29
  # [Puppet::Parser::AST::IfStatement, Puppet::Parser::AST::CaseStatement, Puppet::Parser::AST::Else,
30
30
  # Puppet::Parser::AST::CaseOpt, Puppet::Parser::AST::Selector]
@@ -35,7 +35,7 @@ class Conditional
35
35
  def self.find_conditionals(type)
36
36
  conds = []
37
37
  if type.code.respond_to?(:find_all)
38
- conds = type.code.find_all {|c| types.include?(c.class) }
38
+ conds = type.code.find_all { |c| types.include?(c.class) }
39
39
  end
40
40
  conds
41
41
  end
@@ -49,5 +49,4 @@ class Conditional
49
49
  end
50
50
  conditionals
51
51
  end
52
-
53
- end
52
+ end
@@ -0,0 +1,17 @@
1
+ module Retrospec
2
+ module Puppet
3
+ class ParserError < Exception
4
+ end
5
+ class NoManifestDirError < Exception
6
+ end
7
+ class InvalidModulePathError < Exception
8
+ end
9
+ module Generators
10
+ class CoreTypeException < Exception
11
+ def message
12
+ "You cannot use a core puppet type, bad stuff will happen"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ require_relative 'generators/fact_generator'
2
+ require_relative 'generators/module_generator'
3
+ require_relative 'generators/function_generator'
4
+ require_relative 'generators/type_generator'
5
+ require_relative 'generators/provider_generator'
6
+ require_relative 'generators/schema_generator'
7
+ require_relative 'exceptions'
@@ -1,15 +1,14 @@
1
- require_relative 'facter'
1
+ require_relative 'parsers/facter'
2
2
 
3
3
  module Retrospec
4
4
  module Puppet
5
5
  module Generators
6
6
  class FactGenerator < Retrospec::Plugins::V1::Plugin
7
-
8
7
  attr_reader :template_dir, :context, :module_path, :fact_name, :config_data
9
8
 
10
9
  # retrospec will initilalize this class so its up to you
11
10
  # to set any additional variables you need to get the job done.
12
- def initialize(module_path, spec_object={})
11
+ def initialize(module_path, spec_object = {})
13
12
  # below is the Spec Object which serves as a context for template rendering
14
13
  # you will need to initialize this object, so the erb templates can get the binding
15
14
  # the SpecObject can be customized to your liking as its different for every plugin gem.
@@ -22,13 +21,13 @@ module Retrospec
22
21
  # the global options are passed in for your usage
23
22
  # http://trollop.rubyforge.org
24
23
  # all options here are available in the config passed into config object
25
- def self.run_cli(global_opts)
26
- sub_command_opts = Trollop::options do
24
+ def self.run_cli(global_opts, args=ARGV)
25
+ sub_command_opts = Trollop.options(args) do
27
26
  banner <<-EOS
28
27
  Generates a new fact with the given name
29
28
 
30
29
  EOS
31
- opt :name, "The name of the fact you wish to create", :type => :string, :require => :true, :short => '-n'
30
+ opt :name, 'The name of the fact you wish to create', :type => :string, :require => :true, :short => '-n'
32
31
  end
33
32
  unless sub_command_opts[:name]
34
33
  Trollop.educate
@@ -60,17 +59,26 @@ Generates a new fact with the given name
60
59
  generate_fact_spec_files
61
60
  end
62
61
 
62
+ # returns an array of fact files found in the facter directory
63
+ def fact_files
64
+ @fact_files ||= Dir.glob(File.join(facter_dir, '*.rb')).sort
65
+ end
66
+
63
67
  # generates spec files for each fact defined in the fact file
68
+ # returns a array of generated spec files
64
69
  def generate_fact_spec_files
65
- fact_files = Dir.glob(File.join(facter_dir, '*.rb')).sort
70
+ spec_files = []
71
+ template_file = File.join(template_dir, 'fact_spec.rb.retrospec.erb')
66
72
  fact_files.each do | fact_file|
67
73
  fact_file_data = Retrospec::Puppet::Generators::Facter.load_fact(fact_file)
68
74
  fact_file_data.facts.each do |name, fact_data|
69
75
  # because many facts can be in a single file we want to create a unique file for each fact
70
76
  fact_spec_path = File.join(facter_spec_dir, "#{name}_spec.rb")
71
- safe_create_template_file(fact_spec_path, File.join(template_dir, 'fact_spec.rb.retrospec.erb'), fact_data)
77
+ safe_create_template_file(fact_spec_path,template_file , fact_data)
78
+ spec_files << fact_spec_path
72
79
  end
73
80
  end
81
+ spec_files
74
82
  end
75
83
 
76
84
  # the template directory located inside the your retrospec plugin gem
@@ -79,7 +87,7 @@ Generates a new fact with the given name
79
87
  def template_dir
80
88
  unless @template_dir
81
89
  external_templates = File.expand_path(File.join(config_data[:template_dir], 'facts', 'fact.rb.retrospec.erb'))
82
- if File.exists?(external_templates)
90
+ if File.exist?(external_templates)
83
91
  @template_dir = File.join(config_data[:template_dir], 'facts')
84
92
  else
85
93
  @template_dir = File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'templates', 'facts'))
@@ -90,4 +98,4 @@ Generates a new fact with the given name
90
98
  end
91
99
  end
92
100
  end
93
- end
101
+ end
@@ -0,0 +1,187 @@
1
+ require_relative 'parsers/function'
2
+
3
+ module Retrospec
4
+ module Puppet
5
+ module Generators
6
+ class FunctionGenerator < Retrospec::Plugins::V1::Plugin
7
+ attr_reader :template_dir, :context
8
+
9
+ # retrospec will initilalize this class so its up to you
10
+ # to set any additional variables you need to get the job done.
11
+ def initialize(module_path, spec_object = {})
12
+ super
13
+ # below is the Spec Object which serves as a context for template rendering
14
+ # you will need to initialize this object, so the erb templates can get the binding
15
+ # the SpecObject can be customized to your liking as its different for every plugin gem.
16
+ @context = OpenStruct.new(:name => spec_object[:name], :return_type => spec_object[:return_type],
17
+ :function_type => spec_object[:type], :test_type => spec_object[:test_type])
18
+ end
19
+
20
+ # Puppet currently has two versions of functions (v3, v4). At the time of writing v4 is still new
21
+ # and not used very much. Because of this we will want to allow the user to pick which version of puppet function dsl
22
+ # they wish to use. Based on the version, a slightly different template will be rendered. This method will return
23
+ # the template dir based on the version passed in.
24
+ # By default this method looks inside the user supplied template dir for existence of a template and if true returns that base path, if
25
+ # false returns the template directory inside the gem location which is mainly used for development only.
26
+ def template_dir
27
+ external_templates = File.expand_path(File.join(config_data[:template_dir], 'functions',function_type, 'function_template.rb.retrospec.erb'))
28
+ if File.exist?(external_templates)
29
+ File.join(config_data[:template_dir], 'functions', function_type)
30
+ else
31
+ File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'templates', 'functions', function_type))
32
+ end
33
+ end
34
+
35
+ # returns v3 or v4 to specify the function type
36
+ def function_type
37
+ context.function_type
38
+ end
39
+
40
+ # used to display subcommand options to the cli
41
+ # the global options are passed in for your usage
42
+ # http://trollop.rubyforge.org
43
+ # all options here are available in the config passed into config object
44
+ # returns the parameters
45
+ def self.run_cli(global_opts, args=ARGV)
46
+ func_types = ['v3', 'v4']
47
+ func_type = global_opts['plugins::puppet::default_function_version'] || 'v3'
48
+ test_type = global_opts['plugins::puppet::default_function_test_type'] || 'rspec'
49
+ sub_command_opts = Trollop.options(args) do
50
+ banner <<-EOS
51
+ Generates a new function with the given name.
52
+
53
+ EOS
54
+ opt :name, 'The name of the function you wish to create', :type => :string, :required => true, :short => '-n'
55
+ opt :type, 'The version type of the function (v3, v4)', :type => :string, :required => false, :short => '-t',
56
+ :default => func_type
57
+ opt :test_type, 'The type of test file to create (rspec, ruby)', :default => test_type, :type => :string, :short => '-u'
58
+ opt :return_type, 'The return type of the function (rvalue, statement)', :type => :string, :required => false,
59
+ :short => '-r', :default => 'rvalue'
60
+ end
61
+
62
+ unless func_types.include? sub_command_opts[:type].downcase
63
+ puts "Invalid type, must be one of #{func_types.join(',')}"
64
+ Trollop.educate
65
+ exit 1
66
+ end
67
+ unless sub_command_opts[:name]
68
+ Trollop.educate
69
+ exit 1
70
+ end
71
+ plugin_data = global_opts.merge(sub_command_opts)
72
+ plugin_data
73
+ end
74
+
75
+ # returns the function directory to create the the function in
76
+ def function_dir
77
+ if function_type == 'v3'
78
+ v3_function_dir
79
+ else
80
+ v4_function_dir
81
+ end
82
+ end
83
+
84
+ # returns the path to the v3 function directory
85
+ def v3_function_dir
86
+ @v3_function_dir || File.join(module_path, 'lib', 'puppet', 'parser', 'functions')
87
+ end
88
+
89
+ # returns the path to the v4 function directory
90
+ def v4_function_dir
91
+ @v4_function_dir || File.join(module_path, 'lib', 'puppet', 'functions')
92
+ end
93
+
94
+ # returns the path to the function using the function directory
95
+ def function_path
96
+ File.join(function_dir, "#{function_name}.rb")
97
+ end
98
+
99
+ # returns the name of the function
100
+ def function_name
101
+ context.name
102
+ end
103
+
104
+ # generates the function file based on the template and context
105
+ def generate_function_file
106
+ safe_create_template_file(function_path, File.join(template_dir, 'function_template.rb.retrospec.erb'), context)
107
+ function_path
108
+ end
109
+
110
+ # returns the path to the spec directory
111
+ # because this can vary between test types and function types
112
+ # there are many supporting functions to determine which directory to use
113
+ def spec_file_dir
114
+ if function_type == 'v3'
115
+ v3_spec_dir
116
+ else
117
+ v4_spec_dir
118
+ end
119
+ end
120
+
121
+ # returns the path to the v3 spec directory if using using rspec test type
122
+ # the spec/functions is returned
123
+ def v3_spec_dir
124
+ if context[:test_type] == 'ruby'
125
+ File.join(module_path, 'spec', 'unit', 'puppet', 'parser', 'functions')
126
+ else
127
+ File.join(module_path, 'spec', 'functions')
128
+ end
129
+ end
130
+
131
+ # returns the path to the v4 spec directory if using using rspec test type
132
+ # the spec/functions is returned
133
+ def v4_spec_dir
134
+ if context[:test_type] == 'ruby'
135
+ File.join(module_path, 'spec', 'unit', 'puppet', 'functions')
136
+ else
137
+ File.join(module_path, 'spec', 'functions')
138
+ end
139
+ end
140
+
141
+ # returns an array of functions found in either the v3 or v4 directories
142
+ def discovered_functions
143
+ Dir.glob([File.join(v3_function_dir, '*.rb'), File.join(v4_function_dir, '*.rb')]).sort
144
+ end
145
+
146
+ def is_v3_function?(function_file)
147
+ File.basename(Pathname.new(function_file).parent.parent) == 'parser'
148
+ end
149
+
150
+ # returns the template file name based on the test type
151
+ def template_file
152
+ if context[:test_type] == 'rspec'
153
+ 'function_rspec_template.retrospec.erb'
154
+ else
155
+ 'function_ruby_template.retrospec.erb'
156
+ end
157
+ end
158
+
159
+ # creates the spec files for the discovered_functions
160
+ def generate_spec_files
161
+ spec_files = []
162
+ discovered_functions.each do |file|
163
+ begin
164
+ if is_v3_function?(file)
165
+ context.function_type = 'v3'
166
+ file_data = Retrospec::Puppet::Parser::Functions.load_function(file)
167
+ else
168
+ context.function_type = 'v4'
169
+ file_data = Retrospec::Puppet::Functions.load_function(file)
170
+ end
171
+ rescue NoMethodError => e
172
+ puts "Error evaluating function for #{file}, skipping".warning
173
+ next
174
+ rescue SyntaxError => e
175
+ puts "Function syntax is bad for #{file}, skipping".warning
176
+ next # lets skip functions that have bad syntax
177
+ end
178
+ spec_path = File.join(spec_file_dir, "#{file_data.name}_spec.rb")
179
+ spec_files << spec_path
180
+ safe_create_template_file(spec_path, File.join(template_dir, template_file), file_data)
181
+ end
182
+ spec_files
183
+ end
184
+ end
185
+ end
186
+ end
187
+ end
@@ -5,12 +5,11 @@ module Retrospec
5
5
  module Puppet
6
6
  module Generators
7
7
  class ModuleGenerator < Retrospec::Plugins::V1::Plugin
8
-
9
- attr_reader :template_dir, :context, :module_path, :fact_name, :config_data
8
+ attr_reader :template_dir, :context, :fact_name, :config_data
10
9
 
11
10
  # retrospec will initilalize this class so its up to you
12
11
  # to set any additional variables you need to get the job done.
13
- def initialize(module_path, spec_object={})
12
+ def initialize(module_path, spec_object = {})
14
13
  super
15
14
  # below is the Spec Object which serves as a context for template rendering
16
15
  # you will need to initialize this object, so the erb templates can get the binding
@@ -24,27 +23,28 @@ module Retrospec
24
23
  # http://trollop.rubyforge.org
25
24
  # all options here are available in the config passed into config object
26
25
  # returns a new instance of this class
27
- def self.run_cli(global_opts)
26
+ def self.run_cli(global_opts, args=ARGV)
28
27
  namespace = global_opts['plugins::puppet::namespace'] || 'namespace'
29
28
  author = global_opts['plugins::puppet::author'] || 'author_name'
30
- sub_command_opts = Trollop::options do
29
+ license = global_opts['plugins::puppet::default_license'] || 'Apache-2.0'
30
+ sub_command_opts = Trollop.options(args) do
31
31
  banner <<-EOS
32
32
  Generates a new module with the given name and namespace
33
33
 
34
34
  EOS
35
- opt :name, "The name of the module you wish to create", :type => :string, :required => false, :short => '-n',
36
- :default => File.basename(global_opts[:module_path])
37
- opt :namespace, "The namespace to use only when creating a new module", :default => namespace, :required => false,
38
- :type => :string
39
- opt :author, "The full name of the module author", :default => author, :required => false, :short => '-a',
40
- :type => :string
35
+ opt :name, 'The name of the module you wish to create', :type => :string, :required => true, :short => '-n',
36
+ :default => File.basename(global_opts[:module_path])
37
+ opt :namespace, 'The namespace to use only when creating a new module', :default => namespace, :required => false,
38
+ :type => :string
39
+ opt :author, 'The full name of the module author', :default => author, :required => false, :short => '-a',
40
+ :type => :string
41
+ opt :license, "The license type for the module", :default => license, :type => :string, :short => '-l'
41
42
  end
42
43
  unless sub_command_opts[:name]
43
44
  Trollop.educate
44
45
  exit 1
45
46
  end
46
47
  plugin_data = global_opts.merge(sub_command_opts)
47
- Retrospec::Puppet::Generators::ModuleGenerator.new(plugin_data[:module_path], plugin_data)
48
48
  end
49
49
 
50
50
  def run(manifest_dir)
@@ -54,9 +54,7 @@ Generates a new module with the given name and namespace
54
54
  unless ENV['RETROSPEC_PUPPET_AUTO_GENERATE'] == 'true'
55
55
  print "The module located at: #{module_path} does not exist, do you wish to create it? (y/n): "
56
56
  answer = gets.chomp
57
- unless answer =~ /y/i
58
- exit 1
59
- end
57
+ exit 1 unless answer =~ /y/i
60
58
  end
61
59
 
62
60
  create_manifest_file(init_class, content)
@@ -77,28 +75,30 @@ Generates a new module with the given name and namespace
77
75
  end
78
76
 
79
77
  # generates the metadata file in the module directory
80
- def generate_metadata_file(mod_name,config_data)
78
+ def generate_metadata_file(mod_name, config_data)
81
79
  require 'puppet/module_tool/metadata'
82
80
  # make sure the metadata file exists
83
81
  module_path = config_data[:module_path]
82
+ license = config_data[:license] || config_data['plugins::puppet::default_license'] || 'Apache-2.0'
84
83
  author = config_data[:author] || config_data['plugins::puppet::author'] || 'your_name'
85
84
  namespace = config_data[:namespace] || config_data['plugins::puppet::namespace'] || 'namespace'
86
85
  metadata_file = File.join(module_path, 'metadata.json')
87
- unless File.exists?(metadata_file)
86
+ unless File.exist?(metadata_file)
88
87
  # by default the module tool metadata checks for a namespece
89
- if ! mod_name.include?('-')
88
+ if !mod_name.include?('-')
90
89
  name = "#{namespace}-#{mod_name}"
91
90
  else
92
91
  name = mod_name
93
92
  end
94
93
  begin
95
94
  metadata = ::Puppet::ModuleTool::Metadata.new.update(
96
- 'name' => name.downcase,
97
- 'version' => '0.1.0',
98
- 'author' => author,
99
- 'dependencies' => [
100
- { 'name' => 'puppetlabs-stdlib', 'version_requirement' => '>= 4.9.0' }
101
- ]
95
+ 'name' => name.downcase,
96
+ 'version' => '0.1.0',
97
+ 'author' => author,
98
+ 'license' => license,
99
+ 'dependencies' => [
100
+ { 'name' => 'puppetlabs-stdlib', 'version_requirement' => '>= 4.11.0' }
101
+ ]
102
102
  )
103
103
  rescue ArgumentError => e
104
104
  puts e.message
@@ -107,8 +107,7 @@ Generates a new module with the given name and namespace
107
107
  safe_create_file(metadata_file, metadata.to_json)
108
108
  end
109
109
  end
110
-
111
110
  end
112
111
  end
113
112
  end
114
- end
113
+ end