foreman_template_tasks 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/lib/actions/foreman_template_tasks/template_action.rb +49 -11
- data/app/lib/actions/foreman_template_tasks/template_export_action.rb +0 -4
- data/app/lib/actions/foreman_template_tasks/template_import_action.rb +0 -4
- data/lib/foreman_template_tasks/version.rb +1 -1
- data/lib/tasks/foreman_template_tasks.rake +105 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5eff5ce29fff335a4fa0b9dac6d560e63df62c7cd9fa5c4b840c60dbe531395
|
4
|
+
data.tar.gz: 38f816dafb3024f06a1e05e572aebc95a248f0c7180d40e172f06ead59d7625b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6eaa275be6b95044235a179515d23f05ebcc4c8277676dcc75e050c81bb06193bbe49db38cb85ed7d6e4c7acc119be6f4472b040c205da70f3473576d4258dc8
|
7
|
+
data.tar.gz: 360d937f06920c91bbe618b231e26e345a07d49cae17851a2847b9719634d292fac00cb1d13f670eca1ecb212b3c38596f6815c38c9744370a47ebca02d332b7
|
@@ -3,35 +3,72 @@
|
|
3
3
|
module Actions
|
4
4
|
module ForemanTemplateTasks
|
5
5
|
class TemplateAction < Actions::Base
|
6
|
+
include Actions::RecurringAction
|
7
|
+
|
6
8
|
middleware.use Actions::Middleware::KeepCurrentUser
|
7
9
|
|
8
|
-
def
|
9
|
-
|
10
|
+
def delay(delay_options, context: nil, **task_params)
|
11
|
+
task_params = task_params.compact
|
12
|
+
input.update context: context
|
13
|
+
input.update task_params: task_params
|
14
|
+
|
15
|
+
super delay_options, { context: context, task_params: task_params }
|
16
|
+
end
|
17
|
+
|
18
|
+
# Rails passes hashes with keys as string by default
|
19
|
+
def plan(args = {})
|
20
|
+
_plan(args.deep_symbolize_keys)
|
21
|
+
end
|
22
|
+
|
23
|
+
def _plan(context: nil, **task_params)
|
24
|
+
input.update context: context
|
25
|
+
input.update task_params: task_params
|
26
|
+
|
10
27
|
plan_self
|
11
28
|
end
|
12
29
|
|
13
30
|
def humanized_output
|
14
31
|
return unless output[:results]
|
15
32
|
|
33
|
+
changes = output[:results]
|
34
|
+
.select { |r| (r[:imported] || r[:exported]) && r[:changed] }
|
35
|
+
|
16
36
|
exceptions = output[:results]
|
17
37
|
.reject { |r| r[:exception].nil? }
|
18
38
|
.group_by { |r| [r[:type], r[:additional_errors] || r[:exception]] }
|
19
39
|
.map do |k, v|
|
20
|
-
"#{v.size} templates#{k.first.nil? ? '' : " of type #{k.first}"} skipped: #{k.last}"
|
40
|
+
"#{v.size} templates#{k.first.nil? ? '' : " of type #{k.first}"} skipped because: #{k.last}"
|
21
41
|
end
|
22
42
|
|
23
|
-
out = "#{humanized_action} finished,
|
24
|
-
if
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
43
|
+
out = "#{humanized_action} finished, "
|
44
|
+
out += if changes.any?
|
45
|
+
"#{changes.count} templates changed"
|
46
|
+
else
|
47
|
+
location = self.class == TemplateImportAction ? 'local' : 'remote'
|
48
|
+
"no changes to #{location} templates"
|
49
|
+
end
|
50
|
+
|
51
|
+
out += if exceptions.any?
|
52
|
+
", #{output[:results].reject { |r| r[:exception].nil? }.count} templates skipped;\n- " + exceptions.join("\n- ")
|
53
|
+
else
|
54
|
+
'.'
|
55
|
+
end
|
56
|
+
|
57
|
+
if changes.any?
|
58
|
+
out += "\n\nTemplates changed:\n- " + changes.map { |ch| "#{ch[:type].camel_case} | #{ch[:name]}" }.join("\n- ")
|
29
59
|
end
|
60
|
+
|
30
61
|
out
|
31
62
|
end
|
32
63
|
|
33
64
|
def humanized_action
|
34
|
-
|
65
|
+
raise NotImplementedError
|
66
|
+
end
|
67
|
+
|
68
|
+
def humanized_name
|
69
|
+
format N_('%<action>s Foreman Templates%<context>s'),
|
70
|
+
action: humanized_action,
|
71
|
+
context: input[:context] ? " (#{input[:context]})" : ''
|
35
72
|
end
|
36
73
|
|
37
74
|
def task_output
|
@@ -41,8 +78,9 @@ module Actions
|
|
41
78
|
type: r[:type],
|
42
79
|
changed: r[:changed],
|
43
80
|
imported: r[:imported],
|
81
|
+
exported: r[:exported],
|
44
82
|
error: r[:additional_errors] || r[:exception]
|
45
|
-
}
|
83
|
+
}.compact
|
46
84
|
end
|
47
85
|
end
|
48
86
|
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'pp'
|
2
|
+
|
3
|
+
namespace :template_tasks do
|
4
|
+
desc 'Start a template import according to settings'
|
5
|
+
task import: :environment do
|
6
|
+
User.current = User.anonymous_admin
|
7
|
+
context = ENV['context']
|
8
|
+
|
9
|
+
r = ForemanTasks.delay Actions::ForemanTemplateTasks::TemplateImportAction,
|
10
|
+
{ start_at: Time.zone.now },
|
11
|
+
{
|
12
|
+
context: context,
|
13
|
+
repo: ENV['repo'],
|
14
|
+
branch: ENV['branch'],
|
15
|
+
prefix: ENV['prefix'],
|
16
|
+
dirname: ENV['dirname'],
|
17
|
+
filter: ENV['filter'],
|
18
|
+
associate: ENV['associate'],
|
19
|
+
lock: ENV['lock']
|
20
|
+
}.compact
|
21
|
+
|
22
|
+
url = Rails.application.routes.url_helpers.foreman_tasks_task_url(r, host: SETTINGS[:fqdn])
|
23
|
+
puts "Task running at #{url}"
|
24
|
+
pp r
|
25
|
+
end
|
26
|
+
|
27
|
+
desc 'Start a template export according to settings'
|
28
|
+
task export: :environment do
|
29
|
+
User.current = User.anonymous_admin
|
30
|
+
context = ENV['context']
|
31
|
+
|
32
|
+
r = ForemanTasks.delay Actions::ForemanTemplateTasks::TemplateExportAction,
|
33
|
+
{ start_at: Time.zone.now },
|
34
|
+
{
|
35
|
+
context: context,
|
36
|
+
repo: ENV['repo'],
|
37
|
+
branch: ENV['branch'],
|
38
|
+
prefix: ENV['prefix'],
|
39
|
+
dirname: ENV['dirname'],
|
40
|
+
filter: ENV['filter'],
|
41
|
+
metadata_export_mode: ENV['metadata_export_mode']
|
42
|
+
}.compact
|
43
|
+
|
44
|
+
url = Rails.application.routes.url_helpers.foreman_tasks_task_url(r, host: SETTINGS[:fqdn])
|
45
|
+
puts "Task running at #{url}"
|
46
|
+
pp r
|
47
|
+
end
|
48
|
+
|
49
|
+
namespace :import do
|
50
|
+
desc 'Schedule a recurring template import'
|
51
|
+
task schedule_recurring: :environment do
|
52
|
+
context = ENV['context']
|
53
|
+
cronline = ENV['cronline']
|
54
|
+
|
55
|
+
raise 'Need to specify a cronline' unless cronline
|
56
|
+
|
57
|
+
User.current = User.anonymous_admin
|
58
|
+
r = ForemanTasks::RecurringLogic.new_from_cronline(cronline)
|
59
|
+
|
60
|
+
r.start Actions::ForemanTemplateTasks::TemplateImportAction,
|
61
|
+
{
|
62
|
+
context: context,
|
63
|
+
repo: ENV['repo'],
|
64
|
+
branch: ENV['branch'],
|
65
|
+
prefix: ENV['prefix'],
|
66
|
+
dirname: ENV['dirname'],
|
67
|
+
filter: ENV['filter'],
|
68
|
+
associate: ENV['associate'],
|
69
|
+
lock: ENV['lock']
|
70
|
+
}.compact
|
71
|
+
|
72
|
+
url = Rails.application.routes.url_helpers.foreman_tasks_recurring_logic_url(r, host: SETTINGS[:fqdn])
|
73
|
+
puts "Recurring logic created at #{url}"
|
74
|
+
pp r
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
namespace :export do
|
79
|
+
desc 'Schedule a recurring template import'
|
80
|
+
task schedule_recurring: :environment do
|
81
|
+
context = ENV['context']
|
82
|
+
cronline = ENV['cronline']
|
83
|
+
|
84
|
+
raise 'Need to specify a cronline' unless cronline
|
85
|
+
|
86
|
+
User.current = User.anonymous_admin
|
87
|
+
r = ForemanTasks::RecurringLogic.new_from_cronline(cronline)
|
88
|
+
|
89
|
+
r.start Actions::ForemanTemplateTasks::TemplateExportAction,
|
90
|
+
{
|
91
|
+
context: context,
|
92
|
+
repo: ENV['repo'],
|
93
|
+
branch: ENV['branch'],
|
94
|
+
prefix: ENV['prefix'],
|
95
|
+
dirname: ENV['dirname'],
|
96
|
+
filter: ENV['filter'],
|
97
|
+
metadata_export_mode: ENV['metadata_export_mode']
|
98
|
+
}.compact
|
99
|
+
|
100
|
+
url = Rails.application.routes.url_helpers.foreman_tasks_recurring_logic_url(r, host: SETTINGS[:fqdn])
|
101
|
+
puts "Recurring logic created at #{url}"
|
102
|
+
pp r
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_template_tasks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Olofsson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: foreman-tasks
|
@@ -54,6 +54,7 @@ files:
|
|
54
54
|
- lib/foreman_template_tasks.rb
|
55
55
|
- lib/foreman_template_tasks/engine.rb
|
56
56
|
- lib/foreman_template_tasks/version.rb
|
57
|
+
- lib/tasks/foreman_template_tasks.rake
|
57
58
|
homepage: https://github.com/ananace/foreman_template_tasks
|
58
59
|
licenses:
|
59
60
|
- GPL-3.0
|
@@ -73,8 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
74
|
- !ruby/object:Gem::Version
|
74
75
|
version: '0'
|
75
76
|
requirements: []
|
76
|
-
|
77
|
-
rubygems_version: 2.7.9
|
77
|
+
rubygems_version: 3.0.3
|
78
78
|
signing_key:
|
79
79
|
specification_version: 4
|
80
80
|
summary: Foreman plug-in to automatically sync templates
|