puppetize 0.0.4 → 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/lib/puppetize.rb +1 -0
- data/lib/puppetize/puppetize.rb +151 -26
- data/lib/puppetize/version.rb +1 -1
- data/tpl/config.pp.erb +17 -0
- data/tpl/install.pp.erb +10 -0
- metadata +21 -4
data/lib/puppetize.rb
CHANGED
data/lib/puppetize/puppetize.rb
CHANGED
@@ -8,25 +8,7 @@ module Puppetize
|
|
8
8
|
# Check distribution dependency
|
9
9
|
puts "\nSorry, Distribution not supported, only redhat based at the moment \n\n" unless File.exist?('/etc/redhat-release')
|
10
10
|
|
11
|
-
# Create config dir if it doesn't exists:
|
12
|
-
@config_dir = File.join(File.expand_path('~'),'.puppetize')
|
13
|
-
@module_dir = File.join(File.expand_path('~'),'puppetize-module')
|
14
|
-
@rpm_db = File.join(@config_dir,'rpmlist.db')
|
15
|
-
FileUtils.mkdir @config_dir if Dir.glob(@config_dir).empty?
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def init
|
20
|
-
|
21
|
-
rpm_list = cmd "rpm -qa"
|
22
|
-
File.open(@rpm_db, 'w') {|f| f.write(rpm_list) }
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
def build
|
27
|
-
|
28
11
|
# Verify necessary commands are installed:
|
29
|
-
#
|
30
12
|
|
31
13
|
commands = ['puppet','git']
|
32
14
|
|
@@ -40,26 +22,83 @@ module Puppetize
|
|
40
22
|
|
41
23
|
if ! test.include? true
|
42
24
|
puts "ERROR - #{command} is not installed or not available on default path"
|
43
|
-
exit
|
25
|
+
exit 1
|
44
26
|
end
|
45
27
|
|
46
28
|
rescue => e
|
47
29
|
|
48
30
|
STDERR.puts "ERROR - #{e}"
|
49
|
-
exit
|
31
|
+
exit 1
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
# Create config dir if it doesn't exists:
|
38
|
+
@config_dir = File.join(File.expand_path('~'),'.puppetize')
|
39
|
+
@module_dir = File.join(File.expand_path('~'),'puppetize-module')
|
40
|
+
@rpm_db = File.join(@config_dir,'rpmlist.db')
|
41
|
+
@trackdirs = [
|
42
|
+
{
|
43
|
+
:path => '/etc',
|
44
|
+
:ignoredir => [
|
45
|
+
'group',
|
46
|
+
'gshadow',
|
47
|
+
'ld.so.cache',
|
48
|
+
'passwd',
|
49
|
+
'shadow',
|
50
|
+
'group-',
|
51
|
+
'gshadow-',
|
52
|
+
'passwd-',
|
53
|
+
'shadow-',
|
54
|
+
'rc.d'
|
55
|
+
]
|
56
|
+
}
|
57
|
+
]
|
58
|
+
|
59
|
+
FileUtils.mkdir @config_dir if Dir.glob(@config_dir).empty?
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
def init
|
64
|
+
|
65
|
+
# Remember what RPMs are installed
|
66
|
+
|
67
|
+
rpm_list = cmd "rpm -qa"
|
68
|
+
File.open(@rpm_db, 'w') {|f| f.write(rpm_list) }
|
69
|
+
|
70
|
+
# Add a git repo to track the filesystem
|
71
|
+
|
72
|
+
@trackdirs.each do |track|
|
73
|
+
|
74
|
+
File.open(File.join(track[:path],".gitignore"),'w') do |f|
|
75
|
+
f.write(track[:ignoredir].join("\n"))
|
76
|
+
end
|
77
|
+
|
78
|
+
Dir.chdir track[:path] do
|
79
|
+
|
80
|
+
cmd 'git init .'
|
81
|
+
cmd 'git add .'
|
82
|
+
cmd "git commit -am'puppetize: Initial Commit'"
|
50
83
|
|
51
84
|
end
|
52
85
|
|
53
86
|
end
|
54
87
|
|
88
|
+
end
|
89
|
+
|
90
|
+
def build
|
91
|
+
|
92
|
+
##################################
|
55
93
|
# Generate a standard empty module
|
56
94
|
|
57
|
-
cmd "puppet module generate puppetize-module"
|
58
|
-
|
95
|
+
cmd "cd /root && puppet module generate puppetize-module"
|
96
|
+
FileUtils.mkdir File.join(@module_dir,'files')
|
97
|
+
FileUtils.mkdir File.join(@module_dir,'templates')
|
59
98
|
|
60
99
|
#################################
|
61
100
|
# Generate the Package resources:
|
62
|
-
|
101
|
+
|
63
102
|
rpm_list = cmd("rpm -qa").split("\n")
|
64
103
|
init_rpm_list = File.read(@rpm_db).split("\n")
|
65
104
|
puppet_rpm_list = rpm_list - init_rpm_list
|
@@ -74,19 +113,105 @@ module Puppetize
|
|
74
113
|
end
|
75
114
|
|
76
115
|
# Generate install.pp based on ERB template
|
116
|
+
|
77
117
|
template = File.join(File.dirname(__FILE__), '..', '..', 'tpl', 'install.pp.erb')
|
78
|
-
renderer = ERB.new(File.read(template))
|
118
|
+
renderer = ERB.new(File.read(template),nil,'>')
|
79
119
|
output = renderer.result(binding)
|
80
120
|
File.open(File.join(@module_dir,'manifests','install.pp'),'w') {|f| f.write(output)}
|
81
121
|
|
122
|
+
|
82
123
|
######################################
|
83
124
|
# Generate the configuration resources
|
84
|
-
|
125
|
+
|
126
|
+
puppet_files = Array.new
|
127
|
+
|
128
|
+
@trackdirs.each do |track|
|
129
|
+
|
130
|
+
Dir.chdir track[:path] do
|
131
|
+
|
132
|
+
file_list = %x[git status --porcelain].split("\n").map {|f| f[3..-1]}
|
133
|
+
|
134
|
+
flisttmp = []
|
135
|
+
|
136
|
+
# If a file is a directory recurse inside as git does not provide that listing
|
137
|
+
file_list.each do |file|
|
138
|
+
if File.directory? file
|
139
|
+
Find.find(File.join(track[:path],file)) do |f|
|
140
|
+
flisttmp << f.split(File.join(track[:path],''))[1] if File.file? f
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
# Merge both lists:
|
146
|
+
file_list = (file_list + flisttmp).uniq
|
147
|
+
|
148
|
+
# If the file does not belong to any package or has been modified then include it in the list
|
149
|
+
|
150
|
+
file_list.each do |file|
|
151
|
+
|
152
|
+
filename = File.join(track[:path],file)
|
153
|
+
|
154
|
+
# If file does not belong to any package or it belongs but
|
155
|
+
# it has been modified then puppetize it
|
156
|
+
|
157
|
+
if not system "rpm -qf #{filename} > /dev/null 2>&1" or system "rpm -Vf #{filename}|grep #{filename} > /dev/null 2>&1"
|
158
|
+
puppet_files << filename
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
end
|
164
|
+
|
165
|
+
end
|
166
|
+
|
167
|
+
# Copy the files to the files directory:
|
168
|
+
|
169
|
+
puppet_files.each do |file|
|
170
|
+
|
171
|
+
if File.file? file
|
172
|
+
FileUtils.cp file, File.join(@module_dir,'files')
|
173
|
+
FileUtils.cp file, File.join(@module_dir,'templates',file.split('/').last + ".erb")
|
174
|
+
end
|
175
|
+
|
176
|
+
end
|
177
|
+
|
178
|
+
puppet_file_list = Array.new
|
179
|
+
|
180
|
+
puppet_files.each do |file|
|
181
|
+
|
182
|
+
stat = File.stat file
|
183
|
+
mode = stat.mode.to_s(8)[-3..-1]
|
184
|
+
owner = Etc.getpwuid(stat.uid).name
|
185
|
+
group = Etc.getgrgid(stat.gid).name
|
186
|
+
type = File.file?(file) ? "present" : "directory"
|
187
|
+
|
188
|
+
puppet_file_list << {
|
189
|
+
:path => file,
|
190
|
+
:ensure => type,
|
191
|
+
:owner => owner,
|
192
|
+
:group => group,
|
193
|
+
:mode => mode,
|
194
|
+
:name => file.split('/').last
|
195
|
+
}
|
196
|
+
|
197
|
+
end
|
198
|
+
|
199
|
+
# Generate config.pp based on ERB template
|
200
|
+
template = File.join(File.dirname(__FILE__), '..', '..', 'tpl', 'config.pp.erb')
|
201
|
+
renderer = ERB.new(File.read(template),nil,'>')
|
202
|
+
output = renderer.result(binding)
|
203
|
+
File.open(File.join(@module_dir,'manifests','config.pp'),'w') {|f| f.write(output)}
|
204
|
+
|
85
205
|
end
|
86
206
|
|
87
207
|
def reset
|
88
208
|
|
89
|
-
|
209
|
+
@trackdirs.each do |track|
|
210
|
+
FileUtils.rm_rf File.join(track[:path],'.git') if File.exists? File.join(track[:path],'.git')
|
211
|
+
end
|
212
|
+
|
213
|
+
FileUtils.rm @rpm_db if File.exists? @rpm_db
|
214
|
+
FileUtils.rm_rf 'puppetize-module' if File.exists? 'puppetize-module'
|
90
215
|
|
91
216
|
end
|
92
217
|
|
data/lib/puppetize/version.rb
CHANGED
data/tpl/config.pp.erb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
|
2
|
+
class module::config {
|
3
|
+
|
4
|
+
<% for file in puppet_file_list %>
|
5
|
+
file {'<%= file[:path] %>':
|
6
|
+
ensure => <%= file[:ensure] %>,
|
7
|
+
owner => '<%= file[:owner] %>',
|
8
|
+
group => '<%= file[:group] %>',
|
9
|
+
mode => '<%= file[:mode] %>',
|
10
|
+
<% if file[:ensure] == 'present' %>
|
11
|
+
content => template("${module_name}/<%= file[:name] %>.erb")
|
12
|
+
source => "puppet:///modules/${module_name}/<%= file[:name] %>"
|
13
|
+
<% end %>
|
14
|
+
}
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
}
|
data/tpl/install.pp.erb
ADDED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppetize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.4
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Juan Breinlinger
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2013-11-
|
18
|
+
date: 2013-11-05 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -33,6 +33,21 @@ dependencies:
|
|
33
33
|
version: "2.0"
|
34
34
|
type: :runtime
|
35
35
|
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: open4
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 15
|
45
|
+
segments:
|
46
|
+
- 1
|
47
|
+
- 0
|
48
|
+
version: "1.0"
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: *id002
|
36
51
|
description: Puppetize is a tool that can generate complete modules from systems
|
37
52
|
email: juan.brein@breins.net
|
38
53
|
executables:
|
@@ -48,6 +63,8 @@ files:
|
|
48
63
|
- lib/puppetize/stdlib.rb
|
49
64
|
- lib/puppetize/command_line.rb
|
50
65
|
- bin/puppetize
|
66
|
+
- tpl/config.pp.erb
|
67
|
+
- tpl/install.pp.erb
|
51
68
|
- README.md
|
52
69
|
- LICENSE
|
53
70
|
- CONTRIBUTORS
|