foreman_templates 1.4.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -6
- data/lib/foreman_templates/engine.rb +1 -0
- data/lib/foreman_templates/version.rb +1 -1
- data/lib/templates.rake +59 -41
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13dc963ac08604e046539bf41fe0b6d8221d94c5
|
4
|
+
data.tar.gz: 6e037a128dd982bd13f9d0f793040973995f094e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f25a1b7948860f422816ff98683f80b7ac8bbd38b73e6d246dd66f1ea145b88c45a4278535a2ca9ba90c62c66b71eb6311c6fc479f31300ebe280d75eb9d94a8
|
7
|
+
data.tar.gz: b952bb1305484cfdab98352740bd6b7ddf42d94b0e4b291ff8292a46209b0227bd31a8b926eaa2eb551c9e6f0a480d5318f25e0a0414f41847d5dbea74a7cfe7
|
data/README.md
CHANGED
@@ -39,12 +39,17 @@ template will be automatically associated with the OS
|
|
39
39
|
|
40
40
|
# Rake options
|
41
41
|
|
42
|
-
* verbose
|
43
|
-
* repo
|
44
|
-
* branch
|
45
|
-
* prefix
|
46
|
-
* dirname
|
47
|
-
* filter
|
42
|
+
* verbose => Print extra information during the run [false]
|
43
|
+
* repo => Sync templates from a different Git repo [https://github.com/theforeman/community-templates]
|
44
|
+
* branch => Branch in Git repo [_see note below_]
|
45
|
+
* prefix => The string all imported templates should begin with [Community]
|
46
|
+
* dirname => The directory within the git tree containing the templates [/]
|
47
|
+
* filter => Import names matching this regex (case-insensitive; snippets are not filtered)
|
48
|
+
* associate => Associate to OS, "always", when "new" or "never" [new]
|
49
|
+
|
50
|
+
The `branch` default will use *develop* if you're on Foreman-nightly; or the
|
51
|
+
matching *1.X-stable* branch for your version of Foreman (if it exists); or
|
52
|
+
finally it will remain on the default branch as a fallback.
|
48
53
|
|
49
54
|
## Examples
|
50
55
|
|
data/lib/templates.rake
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'yaml'
|
3
3
|
require 'diffy'
|
4
|
+
require 'git'
|
4
5
|
|
5
6
|
class NoKindError < Exception ; end
|
6
7
|
|
@@ -37,24 +38,27 @@ def update_template
|
|
37
38
|
:snippet => false,
|
38
39
|
:template_kind_id => kind.id
|
39
40
|
}
|
41
|
+
string = db_template.new_record? ? "Created" : "Updated"
|
40
42
|
|
41
43
|
oses = map_oses
|
42
|
-
if db_template.new_record?
|
44
|
+
if (@associate == 'new' and db_template.new_record?) or (@associate == 'always')
|
43
45
|
data[:operatingsystem_ids] = oses.map(&:id)
|
44
|
-
string = "Created"
|
45
|
-
else
|
46
|
-
string = "Updated"
|
47
46
|
end
|
48
47
|
|
49
|
-
if @text
|
50
|
-
diff = nil
|
51
|
-
status = true
|
52
|
-
result = " No change to Template #{ ( 'id' + db_template.id ) rescue ''}:#{@name}"
|
53
|
-
else
|
48
|
+
if @text != db_template.template
|
54
49
|
diff = Diffy::Diff.new(db_template.template, @text, :include_diff_info => true).to_s(:color)
|
55
50
|
status = db_template.update_attributes(data)
|
56
51
|
result = " #{string} Template #{ 'id' + db_template.id rescue ''}:#{@name}"
|
57
52
|
result += "\n Operatingsystem Associations:\n - #{oses.map(&:fullname).join("\n - ")}" if !oses.empty?
|
53
|
+
elsif data[:operatingsystem_ids]
|
54
|
+
diff = nil
|
55
|
+
status = db_template.update_attributes(data)
|
56
|
+
result = " #{string} Template Associations #{ 'id' + db_template.id rescue ''}:#{@name}"
|
57
|
+
result += "\n Operatingsystem Associations:\n - #{oses.map(&:fullname).join("\n - ")}" if !oses.empty?
|
58
|
+
else
|
59
|
+
diff = nil
|
60
|
+
status = true
|
61
|
+
result = " No change to Template #{ ( 'id' + db_template.id ) rescue ''}:#{@name}"
|
58
62
|
end
|
59
63
|
{ :diff => diff, :status => status, :result => result }
|
60
64
|
end
|
@@ -62,23 +66,26 @@ end
|
|
62
66
|
def update_ptable
|
63
67
|
db_ptable = Ptable.find_or_initialize_by_name(@name)
|
64
68
|
data = { :layout => @text }
|
69
|
+
string = db_ptable.new_record? ? "Created" : "Updated"
|
65
70
|
|
66
71
|
oses = map_oses
|
67
|
-
if db_ptable.new_record?
|
72
|
+
if (@associate == 'new' and db_ptable.new_record?) or (@associate == 'always')
|
68
73
|
data[:os_family] = oses.map(&:family).uniq.first
|
69
|
-
string = "Created"
|
70
|
-
else
|
71
|
-
string = "Updated"
|
72
74
|
end
|
73
75
|
|
74
|
-
if @text
|
75
|
-
diff = nil
|
76
|
-
status = true
|
77
|
-
result = " No change to Ptable #{ ( 'id' + db_ptable.id ) rescue ''}:#{@name}"
|
78
|
-
else
|
76
|
+
if @text != db_ptable.layout
|
79
77
|
diff = Diffy::Diff.new(db_ptable.layout, @text, :include_diff_info => true).to_s(:color)
|
80
78
|
status = db_ptable.update_attributes(data)
|
81
79
|
result = " #{string} Ptable #{ ( 'id' + db_ptable.id ) rescue ''}:#{@name}"
|
80
|
+
elsif data[:os_family]
|
81
|
+
diff = nil
|
82
|
+
status = db_ptable.update_attributes(data)
|
83
|
+
result = " #{string} Ptable Associations #{ ( 'id' + db_ptable.id ) rescue ''}:#{@name}"
|
84
|
+
result += "\n Operatingsystem Family:\n - #{oses.map(&:family).uniq.first}" if !oses.empty?
|
85
|
+
else
|
86
|
+
diff = nil
|
87
|
+
status = true
|
88
|
+
result = " No change to Ptable #{ ( 'id' + db_ptable.id ) rescue ''}:#{@name}"
|
82
89
|
end
|
83
90
|
{ :diff => diff, :status => status, :result => result }
|
84
91
|
end
|
@@ -91,45 +98,56 @@ def update_snippet
|
|
91
98
|
}
|
92
99
|
string = db_snippet.new_record? ? "Created" : "Updated"
|
93
100
|
|
94
|
-
if @text
|
95
|
-
diff = nil
|
96
|
-
status = true
|
97
|
-
result = " No change to Snippet #{ 'id' + db_snippet.id rescue ''}:#{@name}"
|
98
|
-
else
|
101
|
+
if @text != db_snippet.template
|
99
102
|
diff = Diffy::Diff.new(db_snippet.template, @text, :include_diff_info => true).to_s(:color)
|
100
103
|
status = db_snippet.update_attributes(data)
|
101
104
|
result = " #{string} Snippet #{ ('id' + db_snippet.id) rescue ''}:#{@name}"
|
105
|
+
else
|
106
|
+
diff = nil
|
107
|
+
status = true
|
108
|
+
result = " No change to Snippet #{ 'id' + db_snippet.id rescue ''}:#{@name}"
|
102
109
|
end
|
103
110
|
{ :diff => diff, :status => status, :result => result }
|
104
111
|
end
|
105
112
|
|
113
|
+
def get_default_branch(repo)
|
114
|
+
branch_names = repo.branches.map(&:name).uniq
|
115
|
+
|
116
|
+
# Always use develop on Foreman-nightly, if present, or else relevant stable branch
|
117
|
+
target = SETTINGS[:version].tag == 'develop' ? 'develop' : "#{SETTINGS[:version].short}-stable"
|
118
|
+
return target if branch_names.include?(target)
|
119
|
+
|
120
|
+
# stay on default branch as fallback
|
121
|
+
return nil
|
122
|
+
end
|
123
|
+
|
106
124
|
desc <<-END_DESC
|
107
125
|
Synchronize templates from a git repo
|
108
126
|
END_DESC
|
109
127
|
namespace :templates do
|
110
128
|
task :sync => :environment do
|
111
129
|
# Available options:
|
112
|
-
#* verbose
|
113
|
-
#* repo
|
114
|
-
#* branch
|
115
|
-
#* prefix
|
116
|
-
#* dirname
|
117
|
-
#* filter
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
prefix
|
123
|
-
dirname
|
124
|
-
filter
|
130
|
+
#* verbose => Print extra information during the run [false]
|
131
|
+
#* repo => Sync templates from a different Git repo [https://github.com/theforeman/community-templates]
|
132
|
+
#* branch => Branch in Git repo [default branch]
|
133
|
+
#* prefix => The string all imported templates should begin with [Community]
|
134
|
+
#* dirname => The directory within the git tree containing the templates [/]
|
135
|
+
#* filter => Import names matching this regex (case-insensitive; snippets are not filtered)
|
136
|
+
#* associate => Associate to OS, always, new or never [new]
|
137
|
+
|
138
|
+
@verbose = ( ENV['verbose'] and ENV['verbose'] != 'false' ) ? true : false
|
139
|
+
@associate = ENV['associate'] ? ENV['associate'] : 'new'
|
140
|
+
prefix = ENV['prefix'] ? ENV['prefix'] : nil
|
141
|
+
dirname = ENV['dirname'] ? ENV['dirname'] : '/'
|
142
|
+
filter = ENV['filter'] ? ENV['filter'] : nil
|
143
|
+
repo = ENV['repo'] ? ENV['repo'] : "https://github.com/theforeman/community-templates.git"
|
125
144
|
|
126
145
|
# Check out the community templates to a temp location
|
127
146
|
begin
|
128
147
|
dir = Dir.mktmpdir
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
puts "#{status}" if @verbose
|
148
|
+
gitrepo = Git.clone(repo, dir)
|
149
|
+
branch = ENV['branch'] ? ENV['branch'] : get_default_branch(gitrepo)
|
150
|
+
gitrepo.checkout(branch) if branch
|
133
151
|
|
134
152
|
# Build a list of ERB files to parse
|
135
153
|
Dir["#{dir}#{dirname}/**/*.erb"].each do |template|
|
@@ -142,7 +160,7 @@ namespace :templates do
|
|
142
160
|
filename = template.split('/').last
|
143
161
|
title = filename.split('.').first
|
144
162
|
@name = @metadata ['name'] || title
|
145
|
-
@name = [prefix, @name].compact.join(
|
163
|
+
@name = [prefix, @name].compact.join()
|
146
164
|
next if filter and not @name.match(/#{filter}/i)
|
147
165
|
|
148
166
|
unless @metadata['kind']
|
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: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Greg Sutcliffe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: diffy
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: git
|
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'
|
27
41
|
description: Engine to sychronise provisioning templates from GitHub
|
28
42
|
email: gsutclif@redhat.com
|
29
43
|
executables: []
|
@@ -59,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
59
73
|
version: '0'
|
60
74
|
requirements: []
|
61
75
|
rubyforge_project:
|
62
|
-
rubygems_version: 2.
|
76
|
+
rubygems_version: 2.4.5
|
63
77
|
signing_key:
|
64
78
|
specification_version: 4
|
65
79
|
summary: Template-syncing engine for Foreman
|