summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlutter <lutter@980ebf18-57e1-0310-9a29-db15c13687c0>2006-06-30 01:43:02 +0000
committerlutter <lutter@980ebf18-57e1-0310-9a29-db15c13687c0>2006-06-30 01:43:02 +0000
commit9bb9e1062a7bf747d1972d69eca9f00d2c0bd030 (patch)
tree07d69e7b1cba6f10cbf84e300bb4f7a36058ac20
parentf792a02aa153eedf5293791daaf355232f357cc4 (diff)
downloadpuppet-9bb9e1062a7bf747d1972d69eca9f00d2c0bd030.tar.gz
puppet-9bb9e1062a7bf747d1972d69eca9f00d2c0bd030.tar.xz
puppet-9bb9e1062a7bf747d1972d69eca9f00d2c0bd030.zip
Fix a small bug in mount where parsing fails if dump and pass are missing (they are optional on Linux) Revamp the tests slightly so that they parse fstabs provided in svn rather than relying on the fstab on the system the test is running on.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1343 980ebf18-57e1-0310-9a29-db15c13687c0
-rwxr-xr-xlib/puppet/type/parsedtype/mount.rb75
-rw-r--r--test/data/types/mount/freebsd.fstab7
-rw-r--r--test/data/types/mount/linux.fstab11
-rw-r--r--test/data/types/mount/solaris.fstab11
-rw-r--r--test/puppettest.rb10
-rwxr-xr-xtest/types/mount.rb17
6 files changed, 101 insertions, 30 deletions
diff --git a/lib/puppet/type/parsedtype/mount.rb b/lib/puppet/type/parsedtype/mount.rb
index 69254e1b6..f21348131 100755
--- a/lib/puppet/type/parsedtype/mount.rb
+++ b/lib/puppet/type/parsedtype/mount.rb
@@ -103,37 +103,47 @@ module Puppet
@doc = "Manages mounted mounts, including putting mount
information into the mount table."
- @instances = []
-
- @platform = Facter["operatingsystem"].value
- case @platform
- when "Solaris":
- @path = "/etc/vfstab"
- @fields = [:device, :blockdevice, :path, :fstype, :pass, :atboot,
- :options]
- when "Darwin":
- @filetype = Puppet::FileType.filetype(:netinfo)
- @filetype.format = "fstab"
- @path = "mounts"
- @fields = [:device, :path, :fstype, :options, :dump, :pass]
-
- # How to map the dumped table to what we want
- @fieldnames = {
- "name" => :device,
- "dir" => :path,
- "dump_freq" => :dump,
- "passno" => :pass,
- "vfstype" => :fstype,
- "opts" => :options
- }
- else
- @path = "/etc/fstab"
- @fields = [:device, :path, :fstype, :options, :dump, :pass]
+ def self.init
+ @platform = Facter["operatingsystem"].value
+ case @platform
+ when "Solaris":
+ @path = "/etc/vfstab"
+ @fields = [:device, :blockdevice, :path, :fstype, :pass, :atboot,
+ :options]
+ @defaults = [ nil ] * @fields.size
+ when "Darwin":
+ @filetype = Puppet::FileType.filetype(:netinfo)
+ @filetype.format = "fstab"
+ @path = "mounts"
+ @fields = [:device, :path, :fstype, :options, :dump, :pass]
+ @defaults = [ nil ] * @fields.size
+
+ # How to map the dumped table to what we want
+ @fieldnames = {
+ "name" => :device,
+ "dir" => :path,
+ "dump_freq" => :dump,
+ "passno" => :pass,
+ "vfstype" => :fstype,
+ "opts" => :options
+ }
+ else
+ @path = "/etc/fstab"
+ @fields = [:device, :path, :fstype, :options, :dump, :pass]
+ @defaults = [ nil ] * 4 + [ "0" ] * 2
+ end
+
+ # Allow Darwin to override the default filetype
+ unless defined? @filetype
+ @filetype = Puppet::FileType.filetype(:flat)
+ end
end
- # Allow Darwin to override the default filetype
- unless defined? @filetype
- @filetype = Puppet::FileType.filetype(:flat)
+ init
+
+ def self.clear
+ init
+ super
end
# Parse a mount tab.
@@ -156,10 +166,15 @@ module Puppet
comment(line)
else
values = line.split(/\s+/)
- unless @fields.length == values.length
+ if @fields.length < values.length
raise Puppet::Error, "Could not parse line %s" % line
end
+ values = @defaults.zip(values).collect { |d, v| v || d }
+ unless @fields.length == values.length
+ raise Puppet::Error, "Could not parse line %s" % line
+ end
+
@fields.zip(values).each do |field, value|
hash[field] = value
end
diff --git a/test/data/types/mount/freebsd.fstab b/test/data/types/mount/freebsd.fstab
new file mode 100644
index 000000000..c39416bc8
--- /dev/null
+++ b/test/data/types/mount/freebsd.fstab
@@ -0,0 +1,7 @@
+# Device Mountpoint FStype Options Dump Pass#
+/dev/ad0s1b none swap sw 0 0
+/dev/ad0s1a / ufs rw 1 1
+/dev/ad0s1e /tmp ufs rw 2 2
+/dev/ad0s1f /usr ufs rw 2 2
+/dev/ad0s1d /var ufs rw 2 2
+/dev/acd0 /cdrom cd9660 ro,noauto 0 0
diff --git a/test/data/types/mount/linux.fstab b/test/data/types/mount/linux.fstab
new file mode 100644
index 000000000..06afe1242
--- /dev/null
+++ b/test/data/types/mount/linux.fstab
@@ -0,0 +1,11 @@
+# A sample fstab, typical for a Fedora system
+/dev/vg00/lv00 / ext3 defaults 1 1
+LABEL=/boot /boot ext3 defaults 1 2
+devpts /dev/pts devpts gid=5,mode=620 0 0
+tmpfs /dev/shm tmpfs defaults 0 0
+LABEL=/home /home ext3 defaults 1 2
+/home /homes auto bind
+proc /proc proc defaults 0 0
+/dev/vg00/lv01 /spare ext3 defaults 1 2
+sysfs /sys sysfs defaults 0 0
+LABEL=SWAP-hda6 swap swap defaults 0 0
diff --git a/test/data/types/mount/solaris.fstab b/test/data/types/mount/solaris.fstab
new file mode 100644
index 000000000..c7de9671b
--- /dev/null
+++ b/test/data/types/mount/solaris.fstab
@@ -0,0 +1,11 @@
+#device device mount FS fsck mount mount
+#to mount to fsck point type pass at boot options
+#
+fd - /dev/fd fd - no -
+/proc - /proc proc - no -
+/dev/dsk/c0d0s0 /dev/rdsk/c0d0s0 / ufs 1 no -
+/dev/dsk/c0d0p0:boot - /boot pcfs - no -
+/devices - /devices devfs - no -
+ctfs - /system/contract ctfs - no -
+objfs - /system/object objfs - no -
+#swap - /tmp tmpfs - yes -
diff --git a/test/puppettest.rb b/test/puppettest.rb
index f601a3660..5cf247a63 100644
--- a/test/puppettest.rb
+++ b/test/puppettest.rb
@@ -320,6 +320,16 @@ module TestPuppet
return files
end
+ def fakefile(name)
+ ary = [$puppetbase, "test"]
+ ary += name.split("/")
+ file = File.join(ary)
+ unless FileTest.exists?(file)
+ raise Puppet::DevError, "No fakedata file %s" % file
+ end
+ return file
+ end
+
# wrap how to retrieve the masked mode
def filemode(file)
File.stat(file).mode & 007777
diff --git a/test/types/mount.rb b/test/types/mount.rb
index 0a6062ff7..70170289e 100755
--- a/test/types/mount.rb
+++ b/test/types/mount.rb
@@ -93,6 +93,7 @@ class TestMounts < Test::Unit::TestCase
unless Facter["operatingsystem"].value == "Darwin"
def test_mountsparse
+ use_fake_fstab
assert_nothing_raised {
@mounttype.retrieve
}
@@ -104,6 +105,7 @@ class TestMounts < Test::Unit::TestCase
def test_rootfs
fs = nil
+ use_fake_fstab
assert_nothing_raised {
Puppet.type(:mount).retrieve
}
@@ -121,6 +123,7 @@ class TestMounts < Test::Unit::TestCase
# Make sure it reads and writes correctly.
def test_readwrite
+ use_fake_fstab
assert_nothing_raised {
Puppet::Type.type(:mount).retrieve
}
@@ -272,6 +275,20 @@ class TestMounts < Test::Unit::TestCase
end
end
end
+
+ def use_fake_fstab
+ os = Facter['operatingsystem']
+ if os == "Solaris"
+ name = "solaris.fstab"
+ elsif os == "FreeBSD"
+ name = "freebsd.fstab"
+ else
+ # Catchall for other fstabs
+ name = "linux.fstab"
+ end
+ fstab = fakefile(File::join("data/types/mount", name))
+ Puppet::Type.type(:mount).path = fstab
+ end
end
# $Id$