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 CHANGED
@@ -25,6 +25,7 @@ puppet_generators/module/templates/README
25
25
  puppet_generators/module/templates/manifests/init.pp
26
26
  script/destroy
27
27
  script/generate
28
+ tasks/host.pp
28
29
  tasks/log.rake
29
30
  tasks/puppet.rake
30
31
  tasks/sandbox.pp
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
- * sudo gem install gepetto
182
+ sudo gem install gepetto
182
183
 
183
- or to use the development release :
184
+ or to use the development release:
184
185
 
185
- * gem sources -a http://gems.github.com
186
- * sudo gem install albanpeignier-gepetto
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
 
@@ -30,6 +30,11 @@ cd $modules_dir
30
30
 
31
31
  case $command in
32
32
  install)
33
+ if [ ! -x "/usr/bin/git" ]; then
34
+ echo "You must install git to retrieve modules managed with it (apt-get install git-core)"
35
+ exit 1
36
+ fi
37
+
33
38
  module_url=$1
34
39
  [ -z "$module_url" ] && usage
35
40
 
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.3"
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-31}
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
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module Gepetto
5
- VERSION = '0.0.3'
5
+ VERSION = '0.0.4'
6
6
  end
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
- @@puppet_file = File.dirname(__FILE__) + '/sandbox.pp'
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
- # experimental qemu required to work with kqemu
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/ { print gensub(\"+\", \"\", \"\", $5) }'"
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(@@puppet_file)
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
- sh "sed -i '/#{hostname},#{ip_address}/ d' ~/.ssh/known_hosts"
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 wget telnet cron logrotate exim4 exim4-base exim4-config exim4-daemon-light pciutils modconf tasksel}
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.3
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-31 00:00:00 -08:00
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