albanpeignier-gepetto 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +1 -0
- data/README.rdoc +5 -4
- data/Rakefile +2 -0
- data/app_generators/gepetto/gepetto_generator.rb +1 -1
- data/app_generators/gepetto/templates/script/module +5 -0
- data/gepetto.gemspec +9 -3
- data/lib/gepetto.rb +1 -1
- data/tasks/host.pp +79 -0
- data/tasks/sandbox.pp +0 -14
- data/tasks/sandbox.rake +12 -24
- metadata +21 -2
data/Manifest.txt
CHANGED
data/README.rdoc
CHANGED
@@ -174,16 +174,17 @@ Destroy sandbox files:
|
|
174
174
|
|
175
175
|
== REQUIREMENTS:
|
176
176
|
|
177
|
+
* puppet and puppetmaster: http://reductivelabs.com/trac/puppet/
|
177
178
|
* rubigen: http://rubigen.rubyforge.org/
|
178
179
|
|
179
180
|
== INSTALL:
|
180
181
|
|
181
|
-
|
182
|
+
sudo gem install gepetto
|
182
183
|
|
183
|
-
or to use the development release
|
184
|
+
or to use the development release:
|
184
185
|
|
185
|
-
|
186
|
-
|
186
|
+
gem sources -a http://gems.github.com
|
187
|
+
sudo gem install albanpeignier-gepetto
|
187
188
|
|
188
189
|
== LICENSE:
|
189
190
|
|
data/Rakefile
CHANGED
@@ -9,6 +9,8 @@ $hoe = Hoe.new('gepetto', Gepetto::VERSION) do |p|
|
|
9
9
|
p.rubyforge_name = p.name # TODO this is default value
|
10
10
|
p.extra_deps = [
|
11
11
|
['rubigen',">= #{RubiGen::VERSION}"],
|
12
|
+
['echoe',">= 3.0.2"],
|
13
|
+
['cucumber',">= 0.1.8"],
|
12
14
|
]
|
13
15
|
p.extra_dev_deps = [
|
14
16
|
['newgem', ">= #{::Newgem::VERSION}"]
|
@@ -16,7 +16,7 @@ class GepettoGenerator < RubiGen::Base
|
|
16
16
|
# Root directory and all subdirectories.
|
17
17
|
m.directory ''
|
18
18
|
|
19
|
-
%w{script config manifests files templates tasks}.each { |path| m.directory path }
|
19
|
+
%w{script config manifests files templates log tasks}.each { |path| m.directory path }
|
20
20
|
|
21
21
|
m.template_copy_each %w( Rakefile )
|
22
22
|
|
data/gepetto.gemspec
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{gepetto}
|
5
|
-
s.version = "0.0.
|
5
|
+
s.version = "0.0.4"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Alban Peignier"]
|
9
|
-
s.date = %q{2009-01
|
9
|
+
s.date = %q{2009-02-01}
|
10
10
|
s.default_executable = %q{gepetto}
|
11
11
|
s.description = %q{A helper suite for Puppet projects to create, manage and help daily development More information about Puppet: http://reductivelabs.com/trac/puppet/}
|
12
12
|
s.email = ["alban.peignier@free.fr"]
|
13
13
|
s.executables = ["gepetto"]
|
14
14
|
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.rdoc"]
|
15
|
-
s.files = ["History.txt", "Manifest.txt", "README.rdoc", "Rakefile", "app_generators/gepetto/USAGE", "app_generators/gepetto/gepetto_generator.rb", "app_generators/gepetto/templates/Rakefile", "app_generators/gepetto/templates/config/fileserver.conf", "app_generators/gepetto/templates/config/puppet.conf", "app_generators/gepetto/templates/manifests/nodes.pp", "app_generators/gepetto/templates/manifests/site.pp", "app_generators/gepetto/templates/manifests/templates.pp", "app_generators/gepetto/templates/script/module", "app_generators/gepetto/templates/script/puppetca", "app_generators/gepetto/templates/script/puppetmasterd", "app_generators/gepetto/templates/script/puppetrun", "bin/gepetto", "gepetto.gemspec", "lib/gepetto.rb", "lib/gepetto/module.rb", "lib/gepetto/tasks.rb", "puppet_generators/module/USAGE", "puppet_generators/module/module_generator.rb", "puppet_generators/module/templates/README", "puppet_generators/module/templates/manifests/init.pp", "script/destroy", "script/generate", "tasks/log.rake", "tasks/puppet.rake", "tasks/sandbox.pp", "tasks/sandbox.rake", "tasks/tmp.rake", "tasks/utils.rake"]
|
15
|
+
s.files = ["History.txt", "Manifest.txt", "README.rdoc", "Rakefile", "app_generators/gepetto/USAGE", "app_generators/gepetto/gepetto_generator.rb", "app_generators/gepetto/templates/Rakefile", "app_generators/gepetto/templates/config/fileserver.conf", "app_generators/gepetto/templates/config/puppet.conf", "app_generators/gepetto/templates/manifests/nodes.pp", "app_generators/gepetto/templates/manifests/site.pp", "app_generators/gepetto/templates/manifests/templates.pp", "app_generators/gepetto/templates/script/module", "app_generators/gepetto/templates/script/puppetca", "app_generators/gepetto/templates/script/puppetmasterd", "app_generators/gepetto/templates/script/puppetrun", "bin/gepetto", "gepetto.gemspec", "lib/gepetto.rb", "lib/gepetto/module.rb", "lib/gepetto/tasks.rb", "puppet_generators/module/USAGE", "puppet_generators/module/module_generator.rb", "puppet_generators/module/templates/README", "puppet_generators/module/templates/manifests/init.pp", "script/destroy", "script/generate", "tasks/host.pp", "tasks/log.rake", "tasks/puppet.rake", "tasks/sandbox.pp", "tasks/sandbox.rake", "tasks/tmp.rake", "tasks/utils.rake"]
|
16
16
|
s.has_rdoc = true
|
17
17
|
s.homepage = %q{http://github.com/albanpeignier/gepetto/}
|
18
18
|
s.rdoc_options = ["--main", "README.rdoc"]
|
@@ -27,15 +27,21 @@ Gem::Specification.new do |s|
|
|
27
27
|
|
28
28
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
29
29
|
s.add_runtime_dependency(%q<rubigen>, [">= 1.5.2"])
|
30
|
+
s.add_runtime_dependency(%q<echoe>, [">= 3.0.2"])
|
31
|
+
s.add_runtime_dependency(%q<cucumber>, [">= 0.1.8"])
|
30
32
|
s.add_development_dependency(%q<newgem>, [">= 1.2.3"])
|
31
33
|
s.add_development_dependency(%q<hoe>, [">= 1.8.0"])
|
32
34
|
else
|
33
35
|
s.add_dependency(%q<rubigen>, [">= 1.5.2"])
|
36
|
+
s.add_dependency(%q<echoe>, [">= 3.0.2"])
|
37
|
+
s.add_dependency(%q<cucumber>, [">= 0.1.8"])
|
34
38
|
s.add_dependency(%q<newgem>, [">= 1.2.3"])
|
35
39
|
s.add_dependency(%q<hoe>, [">= 1.8.0"])
|
36
40
|
end
|
37
41
|
else
|
38
42
|
s.add_dependency(%q<rubigen>, [">= 1.5.2"])
|
43
|
+
s.add_dependency(%q<echoe>, [">= 3.0.2"])
|
44
|
+
s.add_dependency(%q<cucumber>, [">= 0.1.8"])
|
39
45
|
s.add_dependency(%q<newgem>, [">= 1.2.3"])
|
40
46
|
s.add_dependency(%q<hoe>, [">= 1.8.0"])
|
41
47
|
end
|
data/lib/gepetto.rb
CHANGED
data/tasks/host.pp
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
Exec { path => "/usr/bin:/usr/sbin/:/bin:/sbin" }
|
2
|
+
|
3
|
+
# install qemu
|
4
|
+
|
5
|
+
package { qemu:
|
6
|
+
ensure => installed
|
7
|
+
}
|
8
|
+
|
9
|
+
# compile kqemu module
|
10
|
+
|
11
|
+
package { [module-assistant, kqemu-common]:
|
12
|
+
ensure => installed
|
13
|
+
}
|
14
|
+
|
15
|
+
case $lsbdistdescription {
|
16
|
+
"Ubuntu 8.10": { # fix for ubuntu
|
17
|
+
notice("Use debian kqemu 1.4.0 (kqemu-source 1.3.0 is broken on intreprid):")
|
18
|
+
$debian_kqemu_url="http://ftp.debian.org/debian/pool/main/k/kqemu/kqemu-source_1.4.0~pre1-1_all.deb"
|
19
|
+
exec { "backport-kqemu":
|
20
|
+
command => "wget -O /tmp/kqemu-source.deb $debian_kqemu_url && dpkg -i /tmp/kqemu-source.deb",
|
21
|
+
unless => "dpkg -l kqemu-source | grep 1.4.0",
|
22
|
+
before => Exec["modass-kqemu"],
|
23
|
+
require => [Package[debhelper], Package[dpatch]]
|
24
|
+
}
|
25
|
+
package { [debhelper, dpatch]: ensure => installed }
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
exec { "modass-kqemu":
|
30
|
+
command => "module-assistant a-i kqemu",
|
31
|
+
unless => 'dpkg -l "kqemu-modules-`uname -r`" | grep ^ii',
|
32
|
+
require => [Package[module-assistant], Package[kqemu-common]]
|
33
|
+
}
|
34
|
+
|
35
|
+
exec { "add kqemu in /etc/modules":
|
36
|
+
command => "echo kqemu >> /etc/modules",
|
37
|
+
unless => "grep kqemu /etc/modules",
|
38
|
+
require => Exec["modass-kqemu"]
|
39
|
+
}
|
40
|
+
|
41
|
+
file { "/dev/kqemu":
|
42
|
+
# default permissions on debian, but not on ubuntu
|
43
|
+
mode => 666
|
44
|
+
}
|
45
|
+
|
46
|
+
# install uml-utilities for tunctl
|
47
|
+
|
48
|
+
package { uml-utilities: }
|
49
|
+
|
50
|
+
exec { "add tun in /etc/modules":
|
51
|
+
command => "echo tun >> /etc/modules",
|
52
|
+
unless => "grep tun /etc/modules"
|
53
|
+
}
|
54
|
+
|
55
|
+
exec { "modprobe tun":
|
56
|
+
unless => "lsmod | grep tun"
|
57
|
+
}
|
58
|
+
|
59
|
+
file { "/dev/net/tun":
|
60
|
+
mode => 666
|
61
|
+
}
|
62
|
+
|
63
|
+
# provide a basic qemu-ifup
|
64
|
+
|
65
|
+
file { "/etc/qemu-ifup":
|
66
|
+
mode => 755,
|
67
|
+
content => '#!/bin/sh -x
|
68
|
+
|
69
|
+
if [ "$USER" != "root" -o "$1" != "sudo" ]; then
|
70
|
+
exec sudo -p "Password for $0:" $0 sudo $1
|
71
|
+
fi
|
72
|
+
|
73
|
+
[ "$1" = "sudo" ] && shift
|
74
|
+
|
75
|
+
/sbin/ifconfig $1 172.20.0.1
|
76
|
+
iptables -t nat -A POSTROUTING -s 172.20.0.1/24 -o eth0 -j MASQUERADE
|
77
|
+
sysctl -w net.ipv4.ip_forward=1
|
78
|
+
'
|
79
|
+
}
|
data/tasks/sandbox.pp
CHANGED
@@ -58,20 +58,6 @@ iface eth0 inet static
|
|
58
58
|
"
|
59
59
|
}
|
60
60
|
|
61
|
-
file { "/etc/resolv.conf":
|
62
|
-
content => "nameserver $host_ip
|
63
|
-
"
|
64
|
-
}
|
65
|
-
|
66
|
-
exec { "apt-get update":
|
67
|
-
alias => "apt-update"
|
68
|
-
}
|
69
|
-
|
70
|
-
package { [udev, resolvconf]:
|
71
|
-
ensure => present,
|
72
|
-
require => Exec["apt-update"]
|
73
|
-
}
|
74
|
-
|
75
61
|
# puppet configuration
|
76
62
|
|
77
63
|
file { "/etc/default/puppet":
|
data/tasks/sandbox.rake
CHANGED
@@ -14,7 +14,9 @@ class Sandbox < Rake::TaskLib
|
|
14
14
|
@@images_directory = directory
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
def puppet_file(name)
|
18
|
+
File.dirname(__FILE__) + "/#{name}.pp"
|
19
|
+
end
|
18
20
|
|
19
21
|
attr_reader :name
|
20
22
|
attr_accessor :bootstraper, :ip_address, :host_ip_address, :tap_device
|
@@ -46,22 +48,7 @@ class Sandbox < Rake::TaskLib
|
|
46
48
|
|
47
49
|
desc "Setup local machine to host sandbox"
|
48
50
|
task :setup => 'tmp:create' do
|
49
|
-
|
50
|
-
sudo "apt-get install -t experimental qemu"
|
51
|
-
sudo "module-assistant a-i kqemu"
|
52
|
-
sudo "apt-get install uml-utilities"
|
53
|
-
|
54
|
-
puts <<EOF
|
55
|
-
|
56
|
-
You need to route network traffic between your sandbox and your local network.
|
57
|
-
|
58
|
-
For example in your /etc/qemu-ifup:
|
59
|
-
|
60
|
-
/sbin/ifconfig $1 #{host_ip_address}
|
61
|
-
iptables -t nat -A POSTROUTING -s #{host_ip_address}/24 -o eth0 -j MASQUERADE
|
62
|
-
sysctl -w net.ipv4.ip_forward=1
|
63
|
-
|
64
|
-
EOF
|
51
|
+
sudo "puppet #{puppet_file(:host)}"
|
65
52
|
end
|
66
53
|
|
67
54
|
# Mix between these ways :
|
@@ -81,7 +68,7 @@ EOF
|
|
81
68
|
sudo "losetup -o #{fs_offset} /dev/loop0 #{disk_image}"
|
82
69
|
|
83
70
|
# because '/sbin/sfdisk -s /dev/loop0' returns a wrong value :
|
84
|
-
extract_fs_block_size = "/sbin/sfdisk -l #{disk_image} 2> /dev/null | awk '/img1/ {
|
71
|
+
extract_fs_block_size = "/sbin/sfdisk -l #{disk_image} 2> /dev/null | awk '/img1/ { gsub(\"\\+\", \"\", $5); print $5 }'"
|
85
72
|
|
86
73
|
sudo "/sbin/mke2fs -jqF /dev/loop0 `#{extract_fs_block_size}`"
|
87
74
|
ensure
|
@@ -107,7 +94,7 @@ EOF
|
|
107
94
|
Tempfile.open('sandbox_puppet_file') do |sandbox_puppet_file|
|
108
95
|
sandbox_puppet_file.puts "$host_ip='#{host_ip_address}'"
|
109
96
|
sandbox_puppet_file.puts "$sandbox_ip='#{ip_address}'"
|
110
|
-
sandbox_puppet_file.puts IO.read(
|
97
|
+
sandbox_puppet_file.puts IO.read(puppet_file(:sandbox))
|
111
98
|
|
112
99
|
sandbox_puppet_file.close
|
113
100
|
|
@@ -140,7 +127,7 @@ EOF
|
|
140
127
|
end
|
141
128
|
|
142
129
|
desc "Start sandbox"
|
143
|
-
task :start => 'create:tap_device' do
|
130
|
+
task :start => ['create:tap_device', 'tmp:create'] do
|
144
131
|
start
|
145
132
|
end
|
146
133
|
|
@@ -172,7 +159,8 @@ EOF
|
|
172
159
|
|
173
160
|
task :clean => 'puppet:clean' do
|
174
161
|
# clean known_hosts
|
175
|
-
|
162
|
+
known_hosts_file="#{ENV['HOME']}/.ssh/known_hosts"
|
163
|
+
sh "sed -i '/#{hostname},#{ip_address}/ d' #{known_hosts_file}" if File.exists?(known_hosts_file)
|
176
164
|
end
|
177
165
|
|
178
166
|
task :status do
|
@@ -216,7 +204,7 @@ EOF
|
|
216
204
|
|
217
205
|
if options[:daemonize]
|
218
206
|
options = {
|
219
|
-
:pidfile => "tmp/run/#{name}.pid", :serial => "file:log/#{name}.log"
|
207
|
+
:pidfile => File.expand_path("tmp/run/#{name}.pid"), :serial => "file:" + File.expand_path("log/#{name}.log")
|
220
208
|
}.update(options)
|
221
209
|
end
|
222
210
|
|
@@ -326,7 +314,7 @@ class DebianBoostraper
|
|
326
314
|
options = {
|
327
315
|
:arch => 'i386',
|
328
316
|
:exclude => debootstrap_excludes,
|
329
|
-
:include => %w{puppet ssh}
|
317
|
+
:include => %w{puppet ssh udev resolvconf}
|
330
318
|
}
|
331
319
|
|
332
320
|
options_as_string = options.collect{|k,v| "--#{k} #{Array(v).join(',')}"}.join(' ')
|
@@ -335,7 +323,7 @@ class DebianBoostraper
|
|
335
323
|
|
336
324
|
def debootstrap_excludes
|
337
325
|
# excluded by qemu-make-debian-root
|
338
|
-
%w{syslinux at exim mailx libstdc++2.10-glibc2.2 mbr setserial fdutils info ipchains iptables lilo pcmcia-cs ppp pppoe pppoeconf pppconfig
|
326
|
+
%w{syslinux at exim mailx libstdc++2.10-glibc2.2 mbr setserial fdutils info ipchains iptables lilo pcmcia-cs ppp pppoe pppoeconf pppconfig telnet exim4 exim4-base exim4-config exim4-daemon-light pciutils modconf tasksel console-common console-tools console-data base-config man-db manpages}
|
339
327
|
end
|
340
328
|
|
341
329
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: albanpeignier-gepetto
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alban Peignier
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-01
|
12
|
+
date: 2009-02-01 00:00:00 -08:00
|
13
13
|
default_executable: gepetto
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -21,6 +21,24 @@ dependencies:
|
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 1.5.2
|
23
23
|
version:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: echoe
|
26
|
+
version_requirement:
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: 3.0.2
|
32
|
+
version:
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: cucumber
|
35
|
+
version_requirement:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.1.8
|
41
|
+
version:
|
24
42
|
- !ruby/object:Gem::Dependency
|
25
43
|
name: newgem
|
26
44
|
version_requirement:
|
@@ -78,6 +96,7 @@ files:
|
|
78
96
|
- puppet_generators/module/templates/manifests/init.pp
|
79
97
|
- script/destroy
|
80
98
|
- script/generate
|
99
|
+
- tasks/host.pp
|
81
100
|
- tasks/log.rake
|
82
101
|
- tasks/puppet.rake
|
83
102
|
- tasks/sandbox.pp
|