puppet_generator 0.5.4
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.
- data/.gitignore +17 -0
- data/.rdebugrc +7 -0
- data/.rspec +2 -0
- data/.simplecov +8 -0
- data/.travis.yml +6 -0
- data/.yardopts +5 -0
- data/CONTRIBUTING.md +8 -0
- data/Gemfile +34 -0
- data/LICENSE.md +22 -0
- data/README.DEVELOPER.md +11 -0
- data/README.md +477 -0
- data/Rakefile +3 -0
- data/TODO.md +2 -0
- data/bin/ppgen +16 -0
- data/cucumber.yml +2 -0
- data/features/generate_file_definition.feature +357 -0
- data/features/generate_module_directories.feature +36 -0
- data/features/generate_package_definition.feature +206 -0
- data/features/generate_role_definitions.feature +64 -0
- data/features/generate_user_definition.feature +193 -0
- data/features/list.feature +22 -0
- data/features/log_actions.feature +93 -0
- data/features/step_definitions.rb +3 -0
- data/features/support/env.rb +7 -0
- data/features/tasks.feature +25 -0
- data/gemfiles/Gemfile.default +34 -0
- data/gemfiles/Gemfile.travis +17 -0
- data/lib/puppet_generator/actions/copy_files_to_module_directory.rb +23 -0
- data/lib/puppet_generator/actions/null.rb +9 -0
- data/lib/puppet_generator/api.rb +108 -0
- data/lib/puppet_generator/definition.rb +10 -0
- data/lib/puppet_generator/entry_converters/file.rb +9 -0
- data/lib/puppet_generator/entry_converters/package.rb +9 -0
- data/lib/puppet_generator/entry_converters/role.rb +9 -0
- data/lib/puppet_generator/entry_converters/user.rb +9 -0
- data/lib/puppet_generator/exceptions.rb +104 -0
- data/lib/puppet_generator/export_filters/build_role_includes_for_directory.rb +35 -0
- data/lib/puppet_generator/export_filters/filesystem_attributes.rb +57 -0
- data/lib/puppet_generator/export_filters/null.rb +9 -0
- data/lib/puppet_generator/exporters/directory.rb +23 -0
- data/lib/puppet_generator/exporters/file.rb +17 -0
- data/lib/puppet_generator/exporters/stdout.rb +16 -0
- data/lib/puppet_generator/import_filters/null.rb +9 -0
- data/lib/puppet_generator/import_filters/passwd.rb +22 -0
- data/lib/puppet_generator/import_filters/yaml.rb +20 -0
- data/lib/puppet_generator/importers/directory.rb +21 -0
- data/lib/puppet_generator/importers/file.rb +17 -0
- data/lib/puppet_generator/importers/stdin.rb +16 -0
- data/lib/puppet_generator/logger.rb +62 -0
- data/lib/puppet_generator/main.rb +36 -0
- data/lib/puppet_generator/middleware/apply_export_filters.rb +33 -0
- data/lib/puppet_generator/middleware/check_for_empty_source.rb +16 -0
- data/lib/puppet_generator/middleware/configure_logging.rb +30 -0
- data/lib/puppet_generator/middleware/create_module_directories.rb +42 -0
- data/lib/puppet_generator/middleware/create_output.rb +46 -0
- data/lib/puppet_generator/middleware/create_puppet_object_from_entry.rb +24 -0
- data/lib/puppet_generator/middleware/enable_debugging_libraries.rb +15 -0
- data/lib/puppet_generator/middleware/execute_actions.rb +34 -0
- data/lib/puppet_generator/middleware/filter_imported_data.rb +22 -0
- data/lib/puppet_generator/middleware/handle_errors.rb +62 -0
- data/lib/puppet_generator/middleware/output_debug_information_for_models.rb +21 -0
- data/lib/puppet_generator/middleware/read_input.rb +27 -0
- data/lib/puppet_generator/models/action.rb +36 -0
- data/lib/puppet_generator/models/base.rb +115 -0
- data/lib/puppet_generator/models/class_based_model.rb +56 -0
- data/lib/puppet_generator/models/entry_converter.rb +39 -0
- data/lib/puppet_generator/models/error_message.rb +60 -0
- data/lib/puppet_generator/models/export_filter.rb +44 -0
- data/lib/puppet_generator/models/exporter.rb +51 -0
- data/lib/puppet_generator/models/filesystem_based_model.rb +63 -0
- data/lib/puppet_generator/models/import_filter.rb +44 -0
- data/lib/puppet_generator/models/importer.rb +52 -0
- data/lib/puppet_generator/models/logger.rb +11 -0
- data/lib/puppet_generator/models/template.rb +120 -0
- data/lib/puppet_generator/puppet_helper.rb +19 -0
- data/lib/puppet_generator/puppet_objects/file.rb +29 -0
- data/lib/puppet_generator/puppet_objects/package.rb +24 -0
- data/lib/puppet_generator/puppet_objects/role.rb +27 -0
- data/lib/puppet_generator/puppet_objects/user.rb +27 -0
- data/lib/puppet_generator/setup/bare.rb +25 -0
- data/lib/puppet_generator/setup/default_actions.rb +9 -0
- data/lib/puppet_generator/setup/default_entry_converter.rb +8 -0
- data/lib/puppet_generator/setup/default_error_messages.rb +10 -0
- data/lib/puppet_generator/setup/default_export_filter.rb +9 -0
- data/lib/puppet_generator/setup/default_exporter.rb +11 -0
- data/lib/puppet_generator/setup/default_import_filter.rb +10 -0
- data/lib/puppet_generator/setup/default_importer.rb +10 -0
- data/lib/puppet_generator/setup/file.rb +29 -0
- data/lib/puppet_generator/setup/module.rb +22 -0
- data/lib/puppet_generator/setup/package.rb +27 -0
- data/lib/puppet_generator/setup/role.rb +28 -0
- data/lib/puppet_generator/setup/user.rb +27 -0
- data/lib/puppet_generator/task.rb +39 -0
- data/lib/puppet_generator/ui/commandline_parser_helper.rb +31 -0
- data/lib/puppet_generator/ui/create.rb +59 -0
- data/lib/puppet_generator/ui/runner.rb +23 -0
- data/lib/puppet_generator/ui/tasks.rb +16 -0
- data/lib/puppet_generator/version.rb +4 -0
- data/lib/puppet_generator.rb +79 -0
- data/puppet_generator.gemspec +35 -0
- data/rakefiles/default.rake +3 -0
- data/rakefiles/travis.rake +3 -0
- data/script/console +8 -0
- data/script/terminal +16 -0
- data/spec/examples/actions/missing_method.rb +7 -0
- data/spec/examples/apply_export_filters/file.txt +0 -0
- data/spec/examples/entry_converters/missing_method.rb +7 -0
- data/spec/examples/execute_actions/file.txt +0 -0
- data/spec/examples/export_filter/invalid_filter_1.rb +8 -0
- data/spec/examples/export_filter/invalid_filter_2.rb +7 -0
- data/spec/examples/export_filter/missing_method.rb +7 -0
- data/spec/examples/exporter/missing_method.rb +7 -0
- data/spec/examples/exporter/test.d/.gitkeep +0 -0
- data/spec/examples/exporter/test_file.txt +1 -0
- data/spec/examples/import_filter/forbidden_keyword.rb +0 -0
- data/spec/examples/import_filter/invalid_filter_1.rb +8 -0
- data/spec/examples/import_filter/invalid_filter_2.rb +7 -0
- data/spec/examples/import_filter/missing_method.rb +7 -0
- data/spec/examples/importer/missing_method.rb +7 -0
- data/spec/examples/importer/test.d/.gitkeep +0 -0
- data/spec/examples/importer/test_file.txt +1 -0
- data/spec/examples/templates/invalid_template.pp.erb +1 -0
- data/spec/examples/templates/missing_method.rb +7 -0
- data/spec/export_filters/build_role_includes_for_directory_spec.rb +39 -0
- data/spec/middleware/apply_export_filters_spec.rb +45 -0
- data/spec/middleware/execute_actions_spec.rb +44 -0
- data/spec/middleware/handle_errors_spec.rb +12 -0
- data/spec/models/action_spec.rb +37 -0
- data/spec/models/entry_converter_spec.rb +59 -0
- data/spec/models/error_message_spec.rb +78 -0
- data/spec/models/export_filter_spec.rb +36 -0
- data/spec/models/exporter_spec.rb +71 -0
- data/spec/models/import_filter_spec.rb +33 -0
- data/spec/models/importer_spec.rb +66 -0
- data/spec/models/template_spec.rb +47 -0
- data/spec/puppet_generator_spec.rb +7 -0
- data/spec/setup/role_spec.rb +22 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/support/filesystem_helper.rb +12 -0
- data/spec/support/libraries.rb +10 -0
- data/spec/support/rspec_configuration.rb +5 -0
- data/templates/puppet/many_per_file/file.pp.erb +16 -0
- data/templates/puppet/many_per_file/package.pp.erb +10 -0
- data/templates/puppet/many_per_file/role.pp.erb +7 -0
- data/templates/puppet/many_per_file/user.pp.erb +23 -0
- data/templates/puppet/one_per_file/file.pp.erb +14 -0
- data/templates/puppet/one_per_file/package.pp.erb +8 -0
- data/templates/puppet/one_per_file/role.pp.erb +5 -0
- data/templates/puppet/one_per_file/user.pp.erb +21 -0
- metadata +374 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
module Models
|
|
3
|
+
# model for import filter
|
|
4
|
+
class Importer < FeduxOrg::Stdlib::Models::BaseModel
|
|
5
|
+
|
|
6
|
+
include FeduxOrg::Stdlib::Models::FilesystemBasedModel
|
|
7
|
+
include FeduxOrg::Stdlib::Models::ClassBasedModel
|
|
8
|
+
|
|
9
|
+
extend Forwardable
|
|
10
|
+
|
|
11
|
+
#@!method convert
|
|
12
|
+
# converts an object using the convert method of
|
|
13
|
+
# the stored filter
|
|
14
|
+
def_delegator :@importer, :read, :read
|
|
15
|
+
def_delegator :@importer, :reads_from?, :reads_from?
|
|
16
|
+
|
|
17
|
+
#create new instance of filter model
|
|
18
|
+
def initialize( name , importer )
|
|
19
|
+
super(name)
|
|
20
|
+
|
|
21
|
+
@importer = importer
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class << self
|
|
25
|
+
|
|
26
|
+
def existing_source?(source)
|
|
27
|
+
return true if find( reads_from: source )
|
|
28
|
+
|
|
29
|
+
false
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def valid_source?(source)
|
|
33
|
+
return true if find( reads_from: source, enabled: true )
|
|
34
|
+
|
|
35
|
+
false
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def check_method
|
|
41
|
+
:read
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def path
|
|
45
|
+
__FILE__
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
module Models
|
|
3
|
+
class Template < FeduxOrg::Stdlib::Models::BaseModel
|
|
4
|
+
|
|
5
|
+
include FeduxOrg::Stdlib::Models::FilesystemBasedModel
|
|
6
|
+
|
|
7
|
+
#create new instance of template model
|
|
8
|
+
def initialize( name , template_path, suitable_outputs=[], tags=[] )
|
|
9
|
+
super(name)
|
|
10
|
+
|
|
11
|
+
@template_path = template_path
|
|
12
|
+
@suitable_outputs = suitable_outputs
|
|
13
|
+
@tags = tags
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
#output path to template
|
|
17
|
+
def path
|
|
18
|
+
@template_path
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
#check if a template is suitable for
|
|
22
|
+
#a given output
|
|
23
|
+
def is_suitable_for?(output)
|
|
24
|
+
@suitable_outputs.include? output
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
#check if a template is tagged
|
|
28
|
+
def is_tagged_with?(asked_tags)
|
|
29
|
+
if asked_tags
|
|
30
|
+
return asked_tags.all? { |t| @tags.include? t }
|
|
31
|
+
else
|
|
32
|
+
return true
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# render the template based on files
|
|
37
|
+
def render(items)
|
|
38
|
+
|
|
39
|
+
if @tags.include? :many_per_file
|
|
40
|
+
return [ Definition.new( nil , template.evaluate( items: items ) ) ]
|
|
41
|
+
elsif @tags.include? :one_per_file
|
|
42
|
+
return items.collect { |item| Definition.new( item.suggested_file_name, template.evaluate( item: item ) ) }
|
|
43
|
+
else
|
|
44
|
+
raise
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
rescue Exception => e
|
|
48
|
+
raise Exceptions::InvalidTemplate, "An invalid template \"#{@template_path}\" was used. Please check and correct the syntax and try again. The original error message was: #{e.message}."
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
def template
|
|
54
|
+
Erubis::Eruby.new( template_content )
|
|
55
|
+
rescue
|
|
56
|
+
raise Exceptions::InvalidTemplate, "An invalid template \"#{@template_path}\" was used. Please check and correct the syntax and try again."
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def template_content
|
|
60
|
+
File.read( @template_path )
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
public
|
|
64
|
+
|
|
65
|
+
class << self
|
|
66
|
+
|
|
67
|
+
private
|
|
68
|
+
|
|
69
|
+
def suffix
|
|
70
|
+
'.pp.erb'
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def path_to_instances
|
|
74
|
+
path = File.expand_path("../../../../#{model_name.downcase.pluralize}/puppet", __FILE__ )
|
|
75
|
+
|
|
76
|
+
File.join(path,'**', "*#{ suffix }")
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def suffix
|
|
80
|
+
'.pp.erb'
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def load_from_filesystem
|
|
84
|
+
files = Dir.glob( path_to_instances )
|
|
85
|
+
|
|
86
|
+
raise FeduxOrg::Stdlib::Models::Exceptions::NoImplementationsForModelFound, "You might need to store files at \"#{File.dirname(path_to_instances)}\" to make the library work." if files.blank?
|
|
87
|
+
|
|
88
|
+
files.each do |f|
|
|
89
|
+
create( name( f ) , f, suitable_outputs_for_path( f ), create_tags( f ) )
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def create_tags(path)
|
|
95
|
+
return case path
|
|
96
|
+
when %r[one_per_file]
|
|
97
|
+
[ :one_per_file ]
|
|
98
|
+
when %r[many_per_file]
|
|
99
|
+
[ :many_per_file ]
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def suitable_outputs_for_path(path)
|
|
104
|
+
return case path
|
|
105
|
+
when %r[one_per_file]
|
|
106
|
+
[ :directory, :dir, :stdout , :file ]
|
|
107
|
+
when %r[many_per_file]
|
|
108
|
+
[ :file , :stdout ]
|
|
109
|
+
else
|
|
110
|
+
[ :file , :stdout ]
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def path
|
|
115
|
+
__FILE__
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
module PuppetHelper
|
|
3
|
+
def puppet_class_name(string)
|
|
4
|
+
string.sub(/.pp$/, '' ).camelcase.downcase
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def puppet_module_name(string)
|
|
8
|
+
string.sub(/.pp$/, '' ).camelcase.downcase
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def puppet_module_path(string)
|
|
12
|
+
string.underscore
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def puppet_manifest_path(string)
|
|
16
|
+
string.underscore + '.pp'
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
module PuppetObjects
|
|
3
|
+
class File
|
|
4
|
+
|
|
5
|
+
include PuppetHelper
|
|
6
|
+
|
|
7
|
+
attr_reader :path, :module_name, :class_name, :owner, :mode, :source, :type
|
|
8
|
+
|
|
9
|
+
def initialize(entry, module_name, class_name)
|
|
10
|
+
@path = entry[:name]
|
|
11
|
+
@module_name = module_name
|
|
12
|
+
@class_name = class_name
|
|
13
|
+
|
|
14
|
+
@owner = entry[:owner]
|
|
15
|
+
@mode = entry[:mode]
|
|
16
|
+
@type = entry.fetch( :type, 'file' )
|
|
17
|
+
@source = entry[:source]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def name
|
|
21
|
+
::File.basename(path)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def suggested_file_name
|
|
25
|
+
puppet_manifest_path( name )
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
module PuppetObjects
|
|
3
|
+
class Package
|
|
4
|
+
|
|
5
|
+
include PuppetHelper
|
|
6
|
+
|
|
7
|
+
attr_reader :name, :provider, :version, :module_name, :class_name
|
|
8
|
+
|
|
9
|
+
def initialize(entry, module_name, class_name)
|
|
10
|
+
@name = entry[:name]
|
|
11
|
+
@module_name = module_name
|
|
12
|
+
@class_name = class_name
|
|
13
|
+
|
|
14
|
+
@version = entry.fetch( :version, 'installed' )
|
|
15
|
+
@provider = entry[:provider]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def suggested_file_name
|
|
19
|
+
puppet_manifest_path( name )
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
module PuppetObjects
|
|
3
|
+
class Role
|
|
4
|
+
|
|
5
|
+
include PuppetHelper
|
|
6
|
+
|
|
7
|
+
attr_reader :name, :path, :module_name, :class_name, :includes
|
|
8
|
+
|
|
9
|
+
def initialize(entry, module_name, class_name)
|
|
10
|
+
@path = entry[:name]
|
|
11
|
+
@module_name = entry.fetch(:module_name, module_name )
|
|
12
|
+
@class_name = entry.fetch(:class_name, class_name )
|
|
13
|
+
|
|
14
|
+
@includes = entry[:includes] || []
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def suggested_file_name
|
|
18
|
+
puppet_manifest_path( path )
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def name
|
|
22
|
+
"#{module_name}::#{::File.basename( @path )}"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
module PuppetObjects
|
|
3
|
+
class User
|
|
4
|
+
|
|
5
|
+
include PuppetHelper
|
|
6
|
+
|
|
7
|
+
attr_reader :name, :userid, :homedir, :groupid, :shell, :provider, :module_name, :class_name
|
|
8
|
+
|
|
9
|
+
def initialize(entry, module_name, class_name)
|
|
10
|
+
@name = entry[:name]
|
|
11
|
+
@module_name = module_name
|
|
12
|
+
@class_name = class_name
|
|
13
|
+
|
|
14
|
+
@userid = entry[:userid]
|
|
15
|
+
@groupid = entry[:groupid]
|
|
16
|
+
@shell = entry[:shell]
|
|
17
|
+
@homedir = entry[:homedir]
|
|
18
|
+
@provider = entry[:provider]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def suggested_file_name
|
|
22
|
+
puppet_manifest_path( name )
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
module Setup
|
|
3
|
+
class Bare
|
|
4
|
+
|
|
5
|
+
def initialize(options)
|
|
6
|
+
@options = options
|
|
7
|
+
|
|
8
|
+
PuppetGenerator::Models.logger = PuppetGenerator.logger
|
|
9
|
+
|
|
10
|
+
Models::Template.init
|
|
11
|
+
Models::ImportFilter.init
|
|
12
|
+
Models::Action.init
|
|
13
|
+
Models::ErrorMessage.init
|
|
14
|
+
Models::Importer.init
|
|
15
|
+
Models::Exporter.init
|
|
16
|
+
Models::ExportFilter.init
|
|
17
|
+
Models::EntryConverter.init
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def create_task
|
|
21
|
+
Task.new(@options)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
module Setup
|
|
3
|
+
class File < Bare
|
|
4
|
+
|
|
5
|
+
def initialize(options)
|
|
6
|
+
super
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def setup_environment
|
|
10
|
+
DefaultErrorMessages.use
|
|
11
|
+
DefaultImportFilter.use
|
|
12
|
+
DefaultActions.use
|
|
13
|
+
DefaultImporter.use
|
|
14
|
+
DefaultExportFilter.use
|
|
15
|
+
|
|
16
|
+
Models::Action.enable :copy_files_to_module_directory
|
|
17
|
+
Models::Template.find_all(:file).collect { |t| t.enable }
|
|
18
|
+
Models::ExportFilter.enable :filesystem_attributes
|
|
19
|
+
Models::Importer.enable :directory
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def create_task
|
|
23
|
+
Task.new(
|
|
24
|
+
HashWithIndifferentAccess.new( { command: :file } ).merge @options
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
module Setup
|
|
3
|
+
class Module < Bare
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def initialize(options)
|
|
7
|
+
super
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def setup_environment
|
|
11
|
+
DefaultErrorMessages.use
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def create_task
|
|
15
|
+
Task.new(
|
|
16
|
+
HashWithIndifferentAccess.new( { command: :module } ).merge @options
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
module Setup
|
|
3
|
+
class Package < Bare
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def initialize(options)
|
|
7
|
+
super
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def setup_environment
|
|
11
|
+
DefaultErrorMessages.use
|
|
12
|
+
DefaultImportFilter.use
|
|
13
|
+
DefaultActions.use
|
|
14
|
+
DefaultImporter.use
|
|
15
|
+
DefaultExportFilter.use
|
|
16
|
+
|
|
17
|
+
Models::Template.find_all(:package).collect { |t| t.enable }
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def create_task
|
|
21
|
+
Task.new(
|
|
22
|
+
HashWithIndifferentAccess.new( { command: :package } ).merge @options
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
module Setup
|
|
3
|
+
class Role < Bare
|
|
4
|
+
|
|
5
|
+
def initialize(options)
|
|
6
|
+
super
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def setup_environment
|
|
10
|
+
DefaultErrorMessages.use
|
|
11
|
+
DefaultImportFilter.use
|
|
12
|
+
DefaultActions.use
|
|
13
|
+
DefaultImporter.use
|
|
14
|
+
DefaultExportFilter.use
|
|
15
|
+
|
|
16
|
+
Models::Template.find_all(:role).collect { |t| t.enable }
|
|
17
|
+
Models::Importer.enable :directory
|
|
18
|
+
Models::ExportFilter.enable :build_role_includes_for_directory
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def create_task
|
|
22
|
+
Task.new(
|
|
23
|
+
HashWithIndifferentAccess.new( { command: :role } ).merge @options
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
module Setup
|
|
3
|
+
class User < Bare
|
|
4
|
+
def initialize(options)
|
|
5
|
+
super
|
|
6
|
+
@task = Task.new(options)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def setup_environment
|
|
10
|
+
DefaultErrorMessages.use
|
|
11
|
+
DefaultImportFilter.use
|
|
12
|
+
DefaultActions.use
|
|
13
|
+
DefaultImporter.use
|
|
14
|
+
DefaultExportFilter.use
|
|
15
|
+
|
|
16
|
+
Models::ImportFilter.enable :passwd
|
|
17
|
+
Models::Template.find_all(:user).collect { |t| t.enable }
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def create_task
|
|
21
|
+
Task.new(
|
|
22
|
+
HashWithIndifferentAccess.new( { command: :user } ).merge @options
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
class Task
|
|
3
|
+
|
|
4
|
+
include PuppetHelper
|
|
5
|
+
|
|
6
|
+
attr_reader :meta
|
|
7
|
+
attr_accessor :body
|
|
8
|
+
|
|
9
|
+
def initialize(options={})
|
|
10
|
+
@meta = {}
|
|
11
|
+
@body = nil
|
|
12
|
+
|
|
13
|
+
@meta[:source] = options[:source]
|
|
14
|
+
@meta[:destination] = options[:destination]
|
|
15
|
+
@meta[:module] = puppet_module_name( options[:module] )
|
|
16
|
+
@meta[:class] = puppet_class_name( options[:class] )
|
|
17
|
+
@meta[:requested_import_filter] = options[:import_filter]
|
|
18
|
+
@meta[:requested_export_filter] = options[:export_filter]
|
|
19
|
+
@meta[:requested_actions] = options[:action]
|
|
20
|
+
@meta[:logging_mode] = log_level(options)
|
|
21
|
+
@meta[:command] = options[:command]
|
|
22
|
+
@meta[:template_tagged_with] = options[:template_tagged_with].split(/:/).map(&:to_sym) if options[:template_tagged_with]
|
|
23
|
+
@meta[:debug] = true if options[:debug]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def log_level(options)
|
|
29
|
+
if options[:silent]
|
|
30
|
+
return :silent
|
|
31
|
+
elsif options[:debug]
|
|
32
|
+
return :debug
|
|
33
|
+
else
|
|
34
|
+
return :info
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module PuppetGenerator
|
|
2
|
+
module Ui
|
|
3
|
+
module CommandlineParserHelper
|
|
4
|
+
|
|
5
|
+
@runner_options = {}
|
|
6
|
+
@runner_options[:module] = { type: :string, default: 'mymodule', desc: 'the module prefix in puppet class name' }
|
|
7
|
+
@runner_options[:class] = { type: :string, default: 'myclass', desc: 'the class suffix in puppet class name' }
|
|
8
|
+
@runner_options[:debug] = { type: :boolean, default: false, desc: 'enable debug logging and debugging libraries' }
|
|
9
|
+
@runner_options[:silent] = { type: :boolean, default: false, desc: 'disable logging' }
|
|
10
|
+
|
|
11
|
+
@subcommand_options = {}
|
|
12
|
+
@subcommand_options[:source] = { type: :string, default: 'input.txt', desc: 'enter the source which should be used to generate the puppet output' }
|
|
13
|
+
@subcommand_options[:import_filter] = { type: :string, default: 'null', desc: 'make it possible to pipe structured data into command' }
|
|
14
|
+
@subcommand_options[:destination] = { type: :string, default: 'dir:out.d', desc: 'where should the information be stored. Valid input is "file|dir:<dest>" or "stdout"' }
|
|
15
|
+
@subcommand_options[:action] = { type: :array, default: [ :null ], desc: 'what action should be run after filtering the input: <action>( <action>)*' }
|
|
16
|
+
@subcommand_options[:template_tagged_with] = { type: :string, desc: 'use a template which is tagged with "<tag>(:<tag>)+"' }
|
|
17
|
+
@subcommand_options[:export_filter] = { type: :array, default: [ :null ], desc: 'modify the data before exporting it (to add some more value to it): <filter>( <filter>)*' }
|
|
18
|
+
|
|
19
|
+
class << self
|
|
20
|
+
attr_reader :runner_options
|
|
21
|
+
attr_reader :subcommand_options
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.pretty_subcommands(cmds)
|
|
25
|
+
cmds.keys.join(', ')
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|