foreman_templates 1.3.0 → 1.3.1
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.
- checksums.yaml +4 -4
- data/lib/foreman_templates/version.rb +1 -1
- data/lib/templates.rake +98 -67
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c93fb9f63e065e944c894b5eee5c54a32861ee11
|
|
4
|
+
data.tar.gz: b12db24a9e3518c844f2a46ca0714088ba470139
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a58d817020f22029463c89edfb7ebde7444e22a6d14492762fd50c11b63b93eb4b9adaf4f14c378fb9a9ef09f540807cf8ff80507c1cf8272cc2201a08ae2cd0
|
|
7
|
+
data.tar.gz: 6bb6a5454bf2bf53b455a7d663815868e44842a736092e4a3c72c839b9bc4489f24ab87c1e5aca754d00da6c35688be81c35827e0da38f8bff4e82f94c9f7422
|
data/lib/templates.rake
CHANGED
|
@@ -1,24 +1,33 @@
|
|
|
1
|
+
require 'fileutils'
|
|
1
2
|
require 'yaml'
|
|
2
3
|
require 'diffy'
|
|
3
4
|
|
|
4
5
|
class NoKindError < Exception ; end
|
|
5
6
|
|
|
7
|
+
def db_oses
|
|
8
|
+
@db_oses || Operatingsystem.all
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def metadata(text)
|
|
12
|
+
# Pull out the first erb comment only - /m is for a multiline regex
|
|
13
|
+
extracted = text.match(/<%\#(.+?)%>/m)
|
|
14
|
+
extracted == nil ? {} : YAML.load(extracted[1])
|
|
15
|
+
end
|
|
16
|
+
|
|
6
17
|
def map_oses
|
|
7
18
|
oses = if @metadata['oses']
|
|
8
19
|
@metadata['oses'].map do |os|
|
|
9
|
-
|
|
20
|
+
db_oses.map { |db| db.to_label =~ /^#{os}/ ? db : nil}
|
|
10
21
|
end.flatten.compact
|
|
11
22
|
else
|
|
12
23
|
[]
|
|
13
24
|
end
|
|
14
|
-
puts " Operatingsystem Associations: #{oses.map(&:fullname).join(',')}" if verbose
|
|
15
25
|
return oses
|
|
16
26
|
end
|
|
17
27
|
|
|
18
28
|
def update_template
|
|
19
29
|
# Get template type
|
|
20
30
|
unless kind = TemplateKind.find_by_name(@metadata['kind'])
|
|
21
|
-
puts " Error: Unknown template type '#{@metadata['kind']}'"
|
|
22
31
|
raise NoKindError
|
|
23
32
|
end
|
|
24
33
|
|
|
@@ -29,46 +38,49 @@ def update_template
|
|
|
29
38
|
:template_kind_id => kind.id
|
|
30
39
|
}
|
|
31
40
|
|
|
41
|
+
oses = map_oses
|
|
32
42
|
if db_template.new_record?
|
|
33
|
-
data[:operatingsystem_ids] =
|
|
43
|
+
data[:operatingsystem_ids] = oses.map(&:id)
|
|
34
44
|
string = "Created"
|
|
35
45
|
else
|
|
36
46
|
string = "Updated"
|
|
37
47
|
end
|
|
38
48
|
|
|
39
49
|
if @text == db_template.template
|
|
40
|
-
|
|
50
|
+
diff = nil
|
|
51
|
+
status = true
|
|
52
|
+
result = " No change to Template #{ ( 'id' + db_template.id ) rescue ''}:#{@name}"
|
|
41
53
|
else
|
|
42
|
-
|
|
43
|
-
db_template.update_attributes(data)
|
|
44
|
-
|
|
45
|
-
|
|
54
|
+
diff = Diffy::Diff.new(db_template.template, @text, :include_diff_info => true).to_s(:color)
|
|
55
|
+
status = db_template.update_attributes(data)
|
|
56
|
+
result = " #{string} Template #{ 'id' + db_template.id rescue ''}:#{@name}"
|
|
57
|
+
result += "\n Operatingsystem Associations:\n - #{oses.map(&:fullname).join("\n - ")}" if !oses.empty?
|
|
46
58
|
end
|
|
59
|
+
{ :diff => diff, :status => status, :result => result }
|
|
47
60
|
end
|
|
48
61
|
|
|
49
62
|
def update_ptable
|
|
50
|
-
oses = map_oses
|
|
51
|
-
|
|
52
63
|
db_ptable = Ptable.find_or_initialize_by_name(@name)
|
|
53
64
|
data = { :layout => @text }
|
|
65
|
+
|
|
66
|
+
oses = map_oses
|
|
54
67
|
if db_ptable.new_record?
|
|
55
68
|
data[:os_family] = oses.map(&:family).uniq.first
|
|
56
|
-
#no idea why this fails...
|
|
57
|
-
#data[:operatingsystems] = oses,
|
|
58
69
|
string = "Created"
|
|
59
70
|
else
|
|
60
71
|
string = "Updated"
|
|
61
72
|
end
|
|
62
73
|
|
|
63
74
|
if @text == db_ptable.layout
|
|
64
|
-
|
|
75
|
+
diff = nil
|
|
76
|
+
status = true
|
|
77
|
+
result = " No change to Ptable #{ ( 'id' + db_ptable.id ) rescue ''}:#{@name}"
|
|
65
78
|
else
|
|
66
|
-
|
|
67
|
-
db_ptable.update_attributes(data)
|
|
68
|
-
|
|
69
|
-
puts update if !db_ptable.new_record? and verbose
|
|
79
|
+
diff = Diffy::Diff.new(db_ptable.layout, @text, :include_diff_info => true).to_s(:color)
|
|
80
|
+
status = db_ptable.update_attributes(data)
|
|
81
|
+
result = " #{string} Ptable #{ ( 'id' + db_ptable.id ) rescue ''}:#{@name}"
|
|
70
82
|
end
|
|
71
|
-
|
|
83
|
+
{ :diff => diff, :status => status, :result => result }
|
|
72
84
|
end
|
|
73
85
|
|
|
74
86
|
def update_snippet
|
|
@@ -80,13 +92,15 @@ def update_snippet
|
|
|
80
92
|
string = db_snippet.new_record? ? "Created" : "Updated"
|
|
81
93
|
|
|
82
94
|
if @text == db_snippet.template
|
|
83
|
-
|
|
95
|
+
diff = nil
|
|
96
|
+
status = true
|
|
97
|
+
result = " No change to Snippet #{ 'id' + db_snippet.id rescue ''}:#{@name}"
|
|
84
98
|
else
|
|
85
|
-
|
|
86
|
-
db_snippet.update_attributes(data)
|
|
87
|
-
|
|
88
|
-
puts update if !db_snippet.new_record? and verbose
|
|
99
|
+
diff = Diffy::Diff.new(db_snippet.template, @text, :include_diff_info => true).to_s(:color)
|
|
100
|
+
status = db_snippet.update_attributes(data)
|
|
101
|
+
result = " #{string} Snippet #{ ('id' + db_snippet.id) rescue ''}:#{@name}"
|
|
89
102
|
end
|
|
103
|
+
{ :diff => diff, :status => status, :result => result }
|
|
90
104
|
end
|
|
91
105
|
|
|
92
106
|
desc <<-END_DESC
|
|
@@ -102,65 +116,82 @@ namespace :templates do
|
|
|
102
116
|
#* dirname => The directory within the git tree containing the templates [/]
|
|
103
117
|
#* filter => Import names matching this regex (case-insensitive; snippets are not filtered)
|
|
104
118
|
|
|
105
|
-
verbose = ( ENV['verbose'] and ENV['verbose'] != 'false' ) ? true : false
|
|
119
|
+
@verbose = ( ENV['verbose'] and ENV['verbose'] != 'false' ) ? true : false
|
|
106
120
|
repo = ENV['repo'] ? ENV['repo'] : "https://github.com/theforeman/community-templates.git"
|
|
107
121
|
branch = ENV['branch'] ? "-b #{ENV['branch']}" : ""
|
|
108
|
-
prefix = ENV['prefix'] ? ENV['prefix'] :
|
|
122
|
+
prefix = ENV['prefix'] ? ENV['prefix'] : nil
|
|
109
123
|
dirname = ENV['dirname'] ? ENV['dirname'] : '/'
|
|
110
124
|
filter = ENV['filter'] ? ENV['filter'] : nil
|
|
111
125
|
|
|
112
126
|
# Check out the community templates to a temp location
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
status = `#{command}`
|
|
117
|
-
puts "#{status}" if verbose
|
|
118
|
-
|
|
119
|
-
# Cache the list of OSes
|
|
120
|
-
@db_oses = Operatingsystem.all
|
|
121
|
-
|
|
122
|
-
# Build a list of ERB files to parse
|
|
123
|
-
Dir["#{dir}#{dirname}/**/*.erb"].each do |template|
|
|
124
|
-
# Parse Metadata in the template
|
|
125
|
-
options=""
|
|
126
|
-
strip_metadata=""
|
|
127
|
-
File.readlines(template).each do |line|
|
|
128
|
-
if line =~ /^#/
|
|
129
|
-
strip_metadata += line
|
|
130
|
-
options += line[1..-1]
|
|
131
|
-
else
|
|
132
|
-
break
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
@metadata = options == "" ? {} : YAML.load(options)
|
|
136
|
-
@text = File.read(template).gsub(/#{strip_metadata}/,'')
|
|
127
|
+
begin
|
|
128
|
+
dir = Dir.mktmpdir
|
|
129
|
+
command = "git clone #{branch} #{repo} #{dir}"
|
|
137
130
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
title = filename.split('.').first
|
|
141
|
-
@name = @metadata ['name'] || "#{prefix} #{title}"
|
|
142
|
-
next if filter and not name.match(/#{filter}/i)
|
|
131
|
+
status = `#{command}`
|
|
132
|
+
puts "#{status}" if @verbose
|
|
143
133
|
|
|
144
|
-
|
|
134
|
+
# Build a list of ERB files to parse
|
|
135
|
+
Dir["#{dir}#{dirname}/**/*.erb"].each do |template|
|
|
136
|
+
@text = File.read(template)
|
|
137
|
+
@metadata = metadata(@text)
|
|
145
138
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
139
|
+
# Get the name and filter
|
|
140
|
+
filename = template.split('/').last
|
|
141
|
+
title = filename.split('.').first
|
|
142
|
+
@name = @metadata ['name'] || title
|
|
143
|
+
@name = [prefix, @name].compact.join(' ')
|
|
144
|
+
next if filter and not @name.match(/#{filter}/i)
|
|
145
|
+
|
|
146
|
+
puts "Parsing: " + template.gsub(/#{dir}#{dirname}/,'') if @verbose
|
|
147
|
+
|
|
148
|
+
unless @metadata['kind']
|
|
149
|
+
puts " Error: Must specify template kind"
|
|
150
|
+
next
|
|
151
|
+
end
|
|
150
152
|
|
|
151
|
-
case @metadata['kind']
|
|
152
|
-
when 'ptable'
|
|
153
|
-
update_ptable
|
|
154
|
-
when 'snippet'
|
|
155
|
-
update_snippet
|
|
156
|
-
else
|
|
157
153
|
begin
|
|
158
|
-
|
|
154
|
+
case @metadata['kind']
|
|
155
|
+
when 'ptable'
|
|
156
|
+
data = update_ptable
|
|
157
|
+
when 'snippet'
|
|
158
|
+
data = update_snippet
|
|
159
|
+
else
|
|
160
|
+
data = update_template
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
if data[:status] == true && @verbose
|
|
164
|
+
puts data[:result]
|
|
165
|
+
puts data[:diff]
|
|
166
|
+
elsif data[:status] == false
|
|
167
|
+
puts "Error with #{@name}"
|
|
168
|
+
puts data[:result]
|
|
169
|
+
end
|
|
159
170
|
rescue NoKindError
|
|
171
|
+
puts " Error: Unknown template type '#{@metadata['kind']}'"
|
|
160
172
|
next
|
|
161
173
|
end
|
|
162
174
|
end
|
|
175
|
+
ensure
|
|
176
|
+
FileUtils.remove_entry_secure(dir)
|
|
163
177
|
end
|
|
164
178
|
|
|
165
179
|
end
|
|
166
180
|
end
|
|
181
|
+
|
|
182
|
+
# Setup Tests
|
|
183
|
+
namespace :test do
|
|
184
|
+
desc "Test ForemanTemplates plugin"
|
|
185
|
+
Rake::TestTask.new(:templates) do |t|
|
|
186
|
+
test_dir = File.join(File.dirname(__FILE__), '..', 'test')
|
|
187
|
+
t.libs << ["test",test_dir]
|
|
188
|
+
t.pattern = "#{test_dir}/**/*_test.rb"
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
Rake::Task[:test].enhance do
|
|
192
|
+
Rake::Task['test:templates'].invoke
|
|
193
|
+
end
|
|
194
|
+
load 'tasks/jenkins.rake'
|
|
195
|
+
Rake::Task["jenkins:unit"].enhance do
|
|
196
|
+
Rake::Task['test:templates'].invoke
|
|
197
|
+
end
|