foreman_template_tasks 0.1.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.
data/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # Foreman Template Tasks
2
+
3
+ A small [Foreman](https://theforeman.org/) plugin to add tasks for automatic template handling.
4
+
5
+ ## Contributing
6
+
7
+ Bug reports and pull requests are welcome [on GitHub](https://github.com/ananace/foreman_template_tasks).
8
+
9
+ ## License
10
+
11
+ The gem is available as open source under the terms of the [GPL-3.0 License](https://opensource.org/licenses/GPL-3.0).
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/*_test.rb"]
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Actions
4
+ module ForemanTemplateTasks
5
+ class TemplateAction < Actions::Base
6
+ middleware.use Actions::Middleware::KeepCurrentUser
7
+
8
+ def plan(template_params = {})
9
+ input.update task_params: template_params
10
+ plan_self
11
+ end
12
+
13
+ def humanized_output
14
+ return unless output[:results]
15
+
16
+ exceptions = output[:results]
17
+ .reject { |r| r[:exception].nil? }
18
+ .group_by { |r| [r[:type], r[:additional_errors] || r[:exception]] }
19
+ .map do |k, v|
20
+ "#{v.size} templates#{k.first.nil? ? '' : " of type #{k.first}"} skipped: #{k.last}"
21
+ end
22
+
23
+ out = "#{humanized_action} finished, #{output[:results].select { |r| r[:exception].nil? }.count} templates handled"
24
+ if exceptions.empty?
25
+ out += '.'
26
+ else
27
+ out += ", #{output[:results].reject { |r| r[:exception].nil? }.count} skipped;"
28
+ out += "\n\n" + exceptions.join("\n")
29
+ end
30
+ out
31
+ end
32
+
33
+ def humanized_action
34
+ ''
35
+ end
36
+
37
+ def task_output
38
+ (output[:results] || []).map do |r|
39
+ {
40
+ name: r[:name],
41
+ type: r[:type],
42
+ changed: r[:changed],
43
+ imported: r[:imported],
44
+ error: r[:additional_errors] || r[:exception]
45
+ }
46
+ end
47
+ end
48
+
49
+ def rescue_strategy
50
+ Dynflow::Action::Rescue::Skip
51
+ end
52
+
53
+ def self.cleanup_after
54
+ '1d'
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Actions
4
+ module ForemanTemplateTasks
5
+ class TemplateExportAction < TemplateAction
6
+
7
+ def run
8
+ exporter = ForemanTemplates::TemplateExporter.new(input[:task_params])
9
+ output[:results] = exporter.export![:results].map(&:to_h)
10
+ end
11
+
12
+ def humanized_action
13
+ 'Export'
14
+ end
15
+
16
+ def humanized_name
17
+ _('Export Foreman Templates')
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Actions
4
+ module ForemanTemplateTasks
5
+ class TemplateImportAction < TemplateAction
6
+
7
+ def run
8
+ importer = ForemanTemplates::TemplateImporter.new(input[:task_params])
9
+ output[:results] = importer.import![:results].map(&:to_h)
10
+ end
11
+
12
+ def humanized_action
13
+ 'Import'
14
+ end
15
+
16
+ def humanized_name
17
+ _('Import Foreman Templates')
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dynflow'
4
+ require 'foreman-tasks'
5
+
6
+ module ForemanTemplateTasks
7
+ class Engine < ::Rails::Engine
8
+ engine_name 'foreman_template_tasks'
9
+
10
+ config.autoload_paths += Dir["#{config.root}/app/lib"]
11
+
12
+ initializer 'foreman_template_tasks.register_paths' do |_app|
13
+ ::ForemanTasks.dynflow.config.eager_load_paths.concat(%W[#{ForemanTemplateTasks::Engine.root}/app/lib/actions])
14
+ end
15
+
16
+ initializer 'foreman_template_tasks.register_plugin', before: :finisher_hook do |_app|
17
+ Foreman::Plugin.register :foreman_template_tasks do
18
+ requires_foreman '>= 1.19'
19
+ end
20
+ end
21
+
22
+ initializer 'foreman_template_tasks.dynflow_world', before: 'foreman_tasks.initialize_dynflow' do |_app|
23
+ ::ForemanTasks.dynflow.require!
24
+ end
25
+
26
+ # Include concerns in this config.to_prepare block
27
+ config.to_prepare do
28
+ begin
29
+ # ::
30
+ rescue StandardError => e
31
+ Rails.logger.warn "ForemanTemplateTasks: skipping engine hook (#{e})"
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ForemanTemplateTasks
4
+ VERSION = '0.1.0'.freeze
5
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'foreman_template_tasks/engine'
4
+
5
+ module ForemanTemplateTasks
6
+ end
metadata ADDED
@@ -0,0 +1,81 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: foreman_template_tasks
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Alexander Olofsson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-04-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: foreman-tasks
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: foreman_templates
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description:
42
+ email:
43
+ - alexander.olofsson@liu.se
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - LICENSE
49
+ - README.md
50
+ - Rakefile
51
+ - app/lib/actions/foreman_template_tasks/template_action.rb
52
+ - app/lib/actions/foreman_template_tasks/template_export_action.rb
53
+ - app/lib/actions/foreman_template_tasks/template_import_action.rb
54
+ - lib/foreman_template_tasks.rb
55
+ - lib/foreman_template_tasks/engine.rb
56
+ - lib/foreman_template_tasks/version.rb
57
+ homepage: https://github.com/ananace/foreman_template_tasks
58
+ licenses:
59
+ - GPL-3.0
60
+ metadata: {}
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ requirements: []
76
+ rubyforge_project:
77
+ rubygems_version: 2.7.9
78
+ signing_key:
79
+ specification_version: 4
80
+ summary: Foreman plug-in to automatically sync templates
81
+ test_files: []