foreman_templates 6.0.0 → 6.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 756a604ec2486b327c246ae19a1c2b153c4217b7
4
- data.tar.gz: 563b26321d12a2fad2b8d3f8f9202bcba689cf70
3
+ metadata.gz: d0c518e8c2822c6112f13654488a324eb9c2918a
4
+ data.tar.gz: b32fab2dde41371d5367c8d95db70fd2eb85d0ab
5
5
  SHA512:
6
- metadata.gz: 5cc02e60ced60af1126efed7dda4c89c167a8a59f8a009c3eb9c2fcd855d4f4c61cc4083d15c41993e4583f5fe367b5114c3fa38d9f44a388d8422385ca9f37b
7
- data.tar.gz: 8638ebcf4335c45bf137ece2bd534a94e3f7dbc30040e4d5ee7c9c020c1258a159d10a769acc89a19c99174fe13d479d450181bf0d16cdad168fc07f6b280fd4
6
+ metadata.gz: b647c76ec12f0262f6dc95703487fee408ab094bb918b77f0df6141080cb90b3373cb7d4c27620488b75aa66c0d39450c033ed9ae9145e2cf023656189c3ee18
7
+ data.tar.gz: '0981be0b744c1a1573fdf0c8c7cec0f82357679cb3873d7ff7264a5af6cc1348e8b8d38da4b9ea5e073b82366e2a79ca284f8b0a4e4037a9951b816c5d692902'
@@ -9,7 +9,6 @@ module Api
9
9
  param :filter, String, :required => false, :desc => N_("Export templates with names matching this regex (case-insensitive; snippets are not filtered).")
10
10
  param :negate, :bool, :required => false, :desc => N_("Negate the prefix (for purging).")
11
11
  param :dirname, String, :required => false, :desc => N_("The directory within Git repo containing the templates")
12
- param :verbose, :bool, :required => false, :desc => N_("Set verbosity of import")
13
12
  end
14
13
 
15
14
  api :POST, "/templates/import/", N_("Initiate Import")
@@ -17,21 +16,24 @@ module Api
17
16
  param :associate, Setting::TemplateSync.associate_types.keys, :required => false, :desc => N_("Associate to OS's, Locations & Organizations. Options are: always, new or never.")
18
17
  param :force, :bool, :required => false, :desc => N_("Update templates that are locked")
19
18
  param :lock, :bool, :required => false, :desc => N_("Lock imported templates")
19
+ param :verbose, :bool, :required => false, :desc => N_("Show template diff in response")
20
20
  param_group :foreman_template_sync_params
21
+ param_group :taxonomies, ::Api::V2::BaseController
21
22
  def import
22
- results = ForemanTemplates::TemplateImporter.new(template_import_params).import!
23
- render :json => { :message => results }
23
+ verbose = params['verbose']
24
+ @result = ForemanTemplates::TemplateImporter.new(template_import_params).import!
25
+ render :json => { :message => { :templates => @result[:results].map { |res| res.to_h(verbose) },
26
+ :repo => @result[:repo],
27
+ :branch => @result[:branch] } }
24
28
  end
25
29
 
26
30
  api :POST, "/templates/export", N_("Initiate Export")
27
31
  param :metadata_export_mode, Setting::TemplateSync.metadata_export_mode_types.keys, :required => false, :desc => N_("Specify how to handle metadata")
28
32
  param_group :foreman_template_sync_params
33
+ param_group :taxonomies, ::Api::V2::BaseController
29
34
  def export
30
- ForemanTemplates::TemplateExporter.new(template_export_params).export!
31
- render :json => { :message => _('Success') }
32
- rescue StandardError => e
33
- logger.debug e
34
- render :json => { :message => (_('Something went wrong during export: %s') % e.message) }, :status => :internal_server_error
35
+ @result = ForemanTemplates::TemplateExporter.new(template_export_params).export!
36
+ render :json => { :message => @result.to_h }, :status => @result.exported ? 200 : 500
35
37
  end
36
38
  end
37
39
  end
@@ -3,6 +3,7 @@ module Foreman
3
3
  module Parameters
4
4
  module TemplateParams
5
5
  extend ActiveSupport::Concern
6
+ include Foreman::Controller::Parameters::Taxonomix
6
7
 
7
8
  class_methods do
8
9
  def filter_params_list
@@ -25,11 +26,27 @@ module Foreman
25
26
  end
26
27
 
27
28
  def template_import_params
28
- self.class.template_params_filter(self.class.extra_import_params).filter_params(params, parameter_filter_context, :none)
29
+ add_taxonomy_params(self.class.template_params_filter(self.class.extra_import_params)
30
+ .filter_params(params, parameter_filter_context, :none).with_indifferent_access)
29
31
  end
30
32
 
31
33
  def template_export_params
32
- self.class.template_params_filter(self.class.extra_export_params).filter_params(params, parameter_filter_context, :none)
34
+ add_taxonomy_params(self.class.template_params_filter(self.class.extra_export_params)
35
+ .filter_params(params, parameter_filter_context, :none).with_indifferent_access)
36
+ end
37
+
38
+ def organization_params
39
+ self.class.organization_params_filter(Hash).filter_params(params, parameter_filter_context, :none)
40
+ end
41
+
42
+ def location_params
43
+ self.class.location_params_filter(Hash).filter_params(params, parameter_filter_context, :none)
44
+ end
45
+
46
+ private
47
+
48
+ def add_taxonomy_params(params)
49
+ params.merge(:organization_params => organization_params.to_h).merge(:location_params => location_params.to_h)
33
50
  end
34
51
  end
35
52
  end
@@ -19,20 +19,11 @@ module ForemanTemplates
19
19
  end
20
20
 
21
21
  def initialize(args = {})
22
+ @taxonomies = { :organizations => args[:organization_params] || {},
23
+ :locations => args[:location_params] || {} }
22
24
  assign_attributes args
23
25
  end
24
26
 
25
- def get_default_branch(repo)
26
- branch_names = repo.branches.map(&:name).uniq
27
-
28
- # Always use develop on Foreman-nightly, if present, or else relevant stable branch
29
- target = SETTINGS[:version].tag == 'develop' ? 'develop' : "#{SETTINGS[:version].short}-stable"
30
- return target if branch_names.include?(target)
31
-
32
- # stay on default branch as fallback
33
- nil
34
- end
35
-
36
27
  def git_repo?
37
28
  @repo.start_with?('http://', 'https://', 'git://', 'ssh://', 'git+ssh://', 'ssh+git://')
38
29
  end
@@ -0,0 +1,41 @@
1
+ module ForemanTemplates
2
+ class ExportResult
3
+ attr_accessor :exported, :error, :warning
4
+
5
+ def initialize(repo, branch, git_user)
6
+ @repo = repo
7
+ @branch = branch
8
+ @git_user = git_user
9
+ @error = nil
10
+ @warning = nil
11
+ @templates = []
12
+ @exported = false
13
+ end
14
+
15
+ def add_exported_templates(templates)
16
+ @templates.concat templates
17
+ end
18
+
19
+ def to_h
20
+ { :error => @error,
21
+ :warning => @warning,
22
+ :repo => @repo,
23
+ :branch => @branch,
24
+ :git_user => @git_user,
25
+ :templates => dumped_files_result }
26
+ end
27
+
28
+ private
29
+
30
+ def dumped_files_result
31
+ @templates.map { |template| to_template_h template }
32
+ end
33
+
34
+ def to_template_h(template)
35
+ { :id => template.id,
36
+ :name => template.name,
37
+ :exported => @exported,
38
+ :type => template.class.name.underscore }
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,92 @@
1
+ module ForemanTemplates
2
+ class ParseResult
3
+ attr_accessor :name, :template
4
+ attr_reader :imported, :diff, :exception, :additional_errors
5
+
6
+ def initialize(template_file)
7
+ @template_file = template_file.split('/').last
8
+ end
9
+
10
+ def to_h(verbose = false)
11
+ res = {
12
+ :name => @name,
13
+ :id => @template.present? ? @template.id : nil,
14
+ :changed => changed?,
15
+ :imported => @imported,
16
+ :additional_errors => @additional_errors,
17
+ :exception => @exception ? @exception.message : nil,
18
+ :validation_errors => errors.to_h,
19
+ :file => @template_file,
20
+ :type => @template.present? ? @template.class.name.underscore : nil
21
+ }
22
+
23
+ # false comes as a string when using rake tasks
24
+ res[:diff] = @diff if verbose && verbose != 'false'
25
+ res
26
+ end
27
+
28
+ def errors
29
+ @template ? @template.errors : nil
30
+ end
31
+
32
+ def corrupted_metadata
33
+ generic_error "Failed to parse metadata"
34
+ end
35
+
36
+ def matching_filter
37
+ generic_error "Skipping, 'name' filtered out based on 'filter' and 'negate' settings"
38
+ end
39
+
40
+ def no_metadata_name
41
+ generic_error "No 'name' found in metadata"
42
+ end
43
+
44
+ def missing_model
45
+ generic_error "No 'model' found in metadata"
46
+ end
47
+
48
+ def generic_error(additional_msg)
49
+ @imported = false
50
+ @additional_errors = additional_msg
51
+ Logging.logger('app').debug "Error in '#{@template_file}': #{additional_msg}"
52
+ self
53
+ end
54
+
55
+ def check_for_errors
56
+ @imported = @template.errors.blank?
57
+ self
58
+ end
59
+
60
+ def add_exception(exception)
61
+ @imported = false
62
+ @exception = exception
63
+ self
64
+ end
65
+
66
+ def name_error(exception, template_type)
67
+ @imported = false
68
+ @exception = exception
69
+ @additional_errors = "Template type #{template_type} was not found, are you missing a plugin?"
70
+ self
71
+ end
72
+
73
+ def determine_result_diff
74
+ return if @template.nil? || !@template.template_changed?
75
+ template_was = @template.template_was
76
+ template_is = @template.template
77
+ @diff = calculate_diff(template_was, template_is)
78
+ end
79
+
80
+ def changed?
81
+ @diff.present?
82
+ end
83
+
84
+ def calculate_diff(old, new)
85
+ if old.present? && new.present? && old != new
86
+ Diffy::Diff.new(old, new, :include_diff_info => true).to_s(:color)
87
+ else
88
+ nil
89
+ end
90
+ end
91
+ end
92
+ end
@@ -7,61 +7,69 @@ module ForemanTemplates
7
7
  end
8
8
 
9
9
  def export!
10
+ @export_result = ExportResult.new(@repo, @branch, foreman_git_user)
10
11
  if git_repo?
11
12
  export_to_git
12
13
  else
13
14
  export_to_files
14
15
  end
15
16
 
16
- return true
17
+ return @export_result
17
18
  end
18
19
 
19
20
  def export_to_files
20
21
  @dir = get_absolute_repo_path
21
22
  verify_path!(@dir)
22
23
  dump_files!
24
+ @export_result.exported = true
23
25
  end
24
26
 
25
27
  def export_to_git
26
28
  @dir = Dir.mktmpdir
27
-
29
+ return @export_result if branch_missing?
28
30
  git_repo = Git.clone(@repo, @dir)
29
- logger.debug "cloned #{@repo} to #{@dir}"
30
- branch = @branch ? @branch : get_default_branch(git_repo)
31
- # either checkout to existing or create a new one and checkout afterwards
32
- if branch
33
- if git_repo.is_branch?(branch)
34
- git_repo.checkout(branch)
35
- else
36
- git_repo.branch(branch).checkout
37
- if git_repo.is_remote_branch?(branch) # if we work with remote branch we need to sync it first
38
- git_repo.reset_hard("origin/#{branch}")
39
- end
40
- end
41
- end
31
+ logger.debug "cloned '#{@repo}' to '#{@dir}'"
42
32
 
33
+ setup_git_branch git_repo
43
34
  dump_files!
44
35
  git_repo.add
45
36
 
46
37
  status = git_repo.status
47
38
  if status.added.any? || status.changed.any? || status.deleted.any? || status.untracked.any?
48
- logger.debug 'committing changes in cloned repo'
49
- git_repo.commit "Templates export made by Foreman user #{User.current.try(:login) || User::ANONYMOUS_ADMIN}"
50
-
51
- logger.debug "pushing to branch #{branch} at origin #{@repo}"
39
+ git_repo.commit "Templates export made by Foreman user #{foreman_git_user}"
52
40
  git_repo.push 'origin', branch
41
+ @export_result.exported = true
53
42
  else
54
- logger.debug 'no change detected, skipping the commit and push'
43
+ @export_result.warning = 'No change detected, skipping the commit and push'
55
44
  end
45
+ rescue StandardError => e
46
+ @export_result.error = e.message
56
47
  ensure
57
48
  FileUtils.remove_entry_secure(@dir) if File.exist?(@dir)
49
+ @export_result
50
+ end
51
+
52
+ def setup_git_branch(git_repo)
53
+ logger.debug "checking out branch '#{@branch}'"
54
+ if git_repo.is_branch?(@branch)
55
+ git_repo.checkout(@branch)
56
+ else
57
+ git_repo.branch(@branch).checkout
58
+ if git_repo.is_remote_branch?(@branch) # if we work with remote branch we need to sync it first
59
+ git_repo.reset_hard("origin/#{@branch}")
60
+ end
61
+ end
62
+ end
63
+
64
+ def foreman_git_user
65
+ User.current.try(:login) || User::ANONYMOUS_ADMIN
58
66
  end
59
67
 
60
68
  def dump_files!
61
- templates_to_dump.map do |template|
69
+ templates = templates_to_dump
70
+ templates.map do |template|
62
71
  current_dir = get_dump_dir(template)
63
72
  FileUtils.mkdir_p current_dir
64
-
65
73
  filename = File.join(current_dir, get_template_filename(template))
66
74
  File.open(filename, 'w+') do |file|
67
75
  logger.debug "Writing to file #{filename}"
@@ -69,6 +77,7 @@ module ForemanTemplates
69
77
  logger.debug "finished writing #{bytes}"
70
78
  end
71
79
  end
80
+ @export_result.add_exported_templates templates
72
81
  end
73
82
 
74
83
  def get_template_filename(template)
@@ -77,13 +86,13 @@ module ForemanTemplates
77
86
 
78
87
  def get_dump_dir(template)
79
88
  kind = template.respond_to?(:template_kind) ? template.template_kind.try(:name) || 'snippet' : nil
80
- template_class_dir = template.model_name.human.pluralize.downcase.tr(' ', '_')
81
- template_class_dir += '_templates' if template_class_dir == 'partition_tables'
89
+ template_class_dir = template.model_name.plural
90
+ template_class_dir = 'partition_tables_templates' if template_class_dir == 'ptables'
82
91
  File.join(@dir, dirname.to_s, template_class_dir, kind.to_s)
83
92
  end
84
93
 
85
94
  def templates_to_dump
86
- base = Template.all
95
+ base = find_templates
87
96
  if filter.present?
88
97
  method = negate ? :reject : :select
89
98
  base.public_send(method) { |template| template.name.match(/#{filter}/i) }
@@ -92,6 +101,14 @@ module ForemanTemplates
92
101
  end
93
102
  end
94
103
 
104
+ def branch_missing?
105
+ if @branch.blank?
106
+ @export_result.error = "Please specify a branch when exporting into a git repo"
107
+ return true
108
+ end
109
+ false
110
+ end
111
+
95
112
  # * refresh - template.to_erb stripping existing metadata,
96
113
  # * remove - just template.template with stripping existing metadata,
97
114
  # * keep - taking the whole template.template
@@ -107,5 +124,36 @@ module ForemanTemplates
107
124
  raise "Unknown metadata export mode #{@metadata_export_mode}"
108
125
  end
109
126
  end
127
+
128
+ private
129
+
130
+ def find_templates
131
+ @taxonomies.values.all?(&:empty?) ? Template.all : find_taxed_templates
132
+ end
133
+
134
+ def find_taxed_templates
135
+ location_ids = taxes_ids('location')
136
+ organization_ids = taxes_ids('organization')
137
+ if location_ids.empty?
138
+ templates_query(organization_ids)
139
+ elsif organization_ids.empty?
140
+ templates_query(location_ids)
141
+ else
142
+ templates_query(organization_ids) & templates_query(location_ids)
143
+ end
144
+ end
145
+
146
+ def templates_query(tax_ids)
147
+ Template.where(:id => TaxableTaxonomy.where(:taxonomy_id => tax_ids,
148
+ :taxable_type => Template.subclasses.map(&:name)).pluck(:taxable_id))
149
+ end
150
+
151
+ def taxes_ids(tax_type)
152
+ tax_type.capitalize.constantize
153
+ .where(:name => @taxonomies[tax_type.pluralize.to_sym]["#{tax_type}_names".to_sym])
154
+ .pluck(:id)
155
+ .concat(@taxonomies[tax_type.pluralize.to_sym]["#{tax_type}_ids".to_sym] || [])
156
+ .uniq
157
+ end
110
158
  end
111
159
  end
@@ -11,6 +11,7 @@ module ForemanTemplates
11
11
  @verbose = parse_bool(@verbose)
12
12
  @force = parse_bool(@force)
13
13
  @lock = parse_bool(@lock)
14
+ @result_lines = []
14
15
  end
15
16
 
16
17
  def import!
@@ -24,7 +25,7 @@ module ForemanTemplates
24
25
  def import_from_files
25
26
  @dir = get_absolute_repo_path
26
27
  verify_path!(@dir)
27
- return parse_files!
28
+ parse_files!
28
29
  end
29
30
 
30
31
  def import_from_git
@@ -32,95 +33,117 @@ module ForemanTemplates
32
33
  @dir = Dir.mktmpdir
33
34
 
34
35
  begin
36
+ logger.debug "cloned '#{@repo}' to '#{@dir}'"
35
37
  gitrepo = Git.clone(@repo, @dir)
36
- branch = @branch ? @branch : get_default_branch(gitrepo)
37
- gitrepo.checkout(branch) if branch
38
+ if @branch
39
+ logger.debug "checking out branch '#{@branch}'"
40
+ gitrepo.checkout(@branch)
41
+ end
38
42
 
39
- return parse_files!
43
+ parse_files!
40
44
  ensure
41
45
  FileUtils.remove_entry_secure(@dir) if File.exist?(@dir)
42
46
  end
43
47
  end
44
48
 
45
49
  def parse_files!
46
- result_lines = []
47
-
48
- # Build a list of ERB files to parse
49
- Dir["#{@dir}#{@dirname}/**/*.erb"].each do |template|
50
- text = File.read(template)
51
- result_lines << 'Parsing: ' + template.gsub(/#{@dir}#{@dirname}/, '') if @verbose
50
+ Dir["#{@dir}#{@dirname}/**/*.erb"].each do |template_file|
51
+ logger.debug 'Parsing: ' + template_file.gsub(/#{@dir}#{@dirname}/, '')
52
+ parse_result = ParseResult.new(template_file)
52
53
 
54
+ text = File.read(template_file)
53
55
  metadata = Template.parse_metadata(text)
54
56
 
55
- # Get the name and filter
56
- name = metadata['name']
57
- name = auto_prefix(name)
58
- if @filter
59
- matching = name.match(/#{@filter}/i)
60
- matching = !matching if @negate
61
- unless matching
62
- result_lines << "Skipping template '#{name}' since it's name is matching filter condition" if @verbose
63
- next
64
- end
65
- end
57
+ next if metadata_corrupted?(metadata, parse_result)
58
+
59
+ next unless (name = auto_prefix_name(metadata, parse_result))
60
+
61
+ next if filtered_out name, parse_result
66
62
 
67
- options = { :force => @force, :associate => @associate, :lock => @lock }
68
- template_type = 'Unknown template type'
69
63
  begin
70
- if metadata.key?('model')
71
- template_type = metadata['model'].constantize
72
- else
73
- result_lines << "Metadata for template '#{name}' do not specify 'model', import failed"
74
- next
75
- end
76
-
77
- template = template_type.import_without_save(name, text, options)
78
-
79
- data = {}
80
- if template.template_changed?
81
- data[:old] = template.template_was
82
- data[:new] = template.template
83
- if data[:diff].nil? && data[:old].present? && data[:new].present?
84
- data[:diff] = calculate_diff(data[:old], data[:new])
85
- end
86
- end
87
-
88
- if options[:force]
89
- template.ignore_locking { template.save! }
90
- else
91
- template.save!
92
- end
93
-
94
- template_type = template.class.model_name.human
95
- data[:status] = template.errors.blank? ? "#{template_type} '#{name}' import successful" : "#{template_type} '#{name}' import failed"
96
- data[:errors] = template.errors.full_messages
97
-
98
- if @verbose
99
- result_lines << data[:diff] unless data[:diff].nil?
100
- end
101
- result_lines << data[:status]
102
- result_lines << data[:errors] unless data[:errors].empty?
64
+ next unless (template_type = template_model(metadata, parse_result))
65
+ template = template_type.import_without_save(name, text, import_options)
66
+ parse_result.template = template
67
+ parse_result.determine_result_diff
68
+
69
+ save_template template, @force
70
+ @result_lines << parse_result.check_for_errors
71
+ rescue NameError => e
72
+ @result_lines << parse_result.name_error(e, metadata['model'])
103
73
  rescue => e
104
- Foreman::Logging.exception 'error during template import', e, :level => :debug
105
- result_lines << "#{template_type} '#{name}' import failed - #{e.message}"
106
- next
74
+ @result_lines << parse_result.add_exception(e)
107
75
  end
108
76
  end
109
- result_lines
77
+ { :results => @result_lines, :repo => @repo, :branch => @branch }
110
78
  end
111
79
 
112
- def auto_prefix(name)
113
- name.start_with?(@prefix) ? name : [@prefix, name].compact.join
80
+ def import_options
81
+ { :force => @force,
82
+ :associate => @associate,
83
+ :lock => @lock,
84
+ :organization_params => @organizations,
85
+ :location_params => @locations }
114
86
  end
115
87
 
116
- def calculate_diff(old, new)
117
- if old != new
118
- Diffy::Diff.new(old, new, :include_diff_info => true).to_s(:color)
88
+ def template_model(metadata, parse_result)
89
+ if metadata.key?('model')
90
+ metadata['model'].constantize
119
91
  else
92
+ @result_lines << parse_result.missing_model
120
93
  nil
121
94
  end
122
95
  end
123
96
 
97
+ def save_template(template, force)
98
+ result = nil
99
+ if force
100
+ result = template.ignore_locking { template.save }
101
+ else
102
+ result = template.save
103
+ end
104
+
105
+ if result
106
+ logger.debug 'saved'
107
+ else
108
+ logger.error "couldn't save the template because of: #{template.errors.full_messages.join(', ')}"
109
+ end
110
+ result
111
+ end
112
+
113
+ def filtered_out(name, parse_result)
114
+ if @filter && !name_matching_filter?(name)
115
+ @result_lines << parse_result.matching_filter
116
+ true
117
+ end
118
+ end
119
+
120
+ def metadata_corrupted?(metadata, parse_result)
121
+ if metadata.empty?
122
+ @result_lines << parse_result.corrupted_metadata
123
+ return true
124
+ end
125
+ false
126
+ end
127
+
128
+ def name_matching_filter?(name)
129
+ matching = name.match(/#{@filter}/i)
130
+ return !matching if @negate
131
+ matching
132
+ end
133
+
134
+ def auto_prefix_name(metadata, parse_result)
135
+ unless (name = metadata['name'])
136
+ @result_lines << parse_result.no_metadata_name
137
+ return nil
138
+ end
139
+ parse_result.name = auto_prefix(name)
140
+ auto_prefix(name)
141
+ end
142
+
143
+ def auto_prefix(name)
144
+ name.start_with?(@prefix) ? name : [@prefix, name].compact.join
145
+ end
146
+
124
147
  def purge!
125
148
  clause = "name #{@negate ? 'NOT ' : ''}LIKE ?"
126
149
  ProvisioningTemplate.where(clause, "#{@prefix}%").each do |template|
@@ -1,3 +1,3 @@
1
1
  module ForemanTemplates
2
- VERSION = '6.0.0'.freeze
2
+ VERSION = '6.0.1'.freeze
3
3
  end
@@ -1,4 +1,6 @@
1
+ require 'pp'
1
2
  # Tasks
3
+ # rubocop:disable Metrics/BlockLength
2
4
  namespace :templates do
3
5
  desc 'Import templates according to settings'
4
6
  task :import => :environment do
@@ -15,11 +17,11 @@ namespace :templates do
15
17
  # * filter => Import names matching this regex (case-insensitive; snippets are not filtered)
16
18
  # * associate => Associate to OS's, Locations & Organizations. Options are: always, new or never [new]
17
19
  # * lock => Lock imported templates [false]
18
-
19
20
  User.current = User.anonymous_admin
21
+ verbose = ENV['verbose']
20
22
 
21
23
  results = ForemanTemplates::TemplateImporter.new({
22
- verbose: ENV['verbose'],
24
+ verbose: verbose,
23
25
  repo: ENV['repo'],
24
26
  branch: ENV['branch'],
25
27
  prefix: ENV['prefix'],
@@ -29,35 +31,31 @@ namespace :templates do
29
31
  lock: ENV['lock'],
30
32
  }).import!
31
33
 
32
- puts results.join("\n")
34
+ pp(results.map { |result| result.to_h(verbose) })
33
35
  end
34
36
 
35
37
  task :sync => :import
36
-
37
38
  desc 'Export templates according to settings'
38
39
  task :export => :environment do
39
40
  ActiveSupport::Deprecation.warn "You are using a deprecated behavior, 'rake templates:export' will be removed in a future version. Please use appropriate API endpoint for this functionality"
40
41
  User.current = User.anonymous_admin
41
42
 
42
- ForemanTemplates::TemplateExporter.new({
43
- verbose: ENV['verbose'],
43
+ result = ForemanTemplates::TemplateExporter.new({
44
44
  repo: ENV['repo'],
45
45
  branch: ENV['branch'],
46
46
  prefix: ENV['prefix'],
47
47
  dirname: ENV['dirname'],
48
48
  filter: ENV['filter'],
49
- # associate: ENV['associate'],
50
49
  metadata_export_mode: ENV['metadata_export_mode'],
51
50
  }).export!
52
51
 
53
- puts 'Export finished'
52
+ pp result
54
53
  end
55
54
 
56
55
  desc 'Purge unwanted templates from foreman'
57
56
  task :purge => :environment do
58
57
  ActiveSupport::Deprecation.warn "You are using a deprecated behavior, 'rake templates:purge' will be removed in a future version. Please use appropriate API endpoint for this functionality"
59
58
  User.current = User.anonymous_admin
60
-
61
59
  ForemanTemplates::TemplateImporter.new({
62
60
  # * negate => negate query [false]
63
61
  # * prefix => The string all templates to purge should ( or not ) begin with [Community ]
@@ -75,6 +73,7 @@ namespace :templates do
75
73
  puts 'Clean up finished, you can now remove the plugin from your system'
76
74
  end
77
75
  end
76
+ # rubocop:enable Metrics/BlockLength
78
77
 
79
78
  # Tests
80
79
  namespace :test do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_templates
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0
4
+ version: 6.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Sutcliffe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-10 00:00:00.000000000 Z
11
+ date: 2018-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diffy
@@ -68,6 +68,8 @@ files:
68
68
  - app/models/setting/template_sync.rb
69
69
  - app/services/foreman_templates/action.rb
70
70
  - app/services/foreman_templates/cleaner.rb
71
+ - app/services/foreman_templates/export_result.rb
72
+ - app/services/foreman_templates/parse_result.rb
71
73
  - app/services/foreman_templates/template_exporter.rb
72
74
  - app/services/foreman_templates/template_importer.rb
73
75
  - config/routes.rb