###
###  Copyright 2000-2007 University of Illinois Board of Trustees
###  All rights reserved. 
###
###  dfstab.pm - psgconf action class for generating /etc/dfs/dfstab
###
###  Campus Information Technologies and Educational Services
###  University of Illinois at Urbana-Champaign
###


package PSGConf::Action::GenerateFile::dfstab;

use strict;

use PSGConf::Action::GenerateFile;

our @ISA = qw(PSGConf::Action::GenerateFile);


###############################################################################
###  generate() method
###############################################################################

sub generate
{
	my ($self, $fh, $psgconf) = @_;
	my ($path, $opt, @options, $exp);

	$exp = $self->{exports};

	foreach $path (sort keys %$exp)
	{
		@options = ();

		foreach $opt (keys %{$exp->{$path}})
		{
			if (! defined($exp->{$path}->{$opt}))
			{
				push(@options, $opt);
			}
			elsif (! ref($exp->{$path}->{$opt}))
			{
				push(@options, "$opt=$exp->{$path}->{$opt}");
			}
			elsif (ref($exp->{$path}->{$opt}) eq 'HASH')
			{
				push(@options, "$opt=" . join(':',
					sort keys %{$exp->{$path}->{$opt}}));
			}
		}

		print $fh '/usr/sbin/share -F nfs -o '
			  . join(',', @options)
			  . ' '
			  . $path
			  . "\n";
	}

	return 1;
}


###############################################################################
###  documentation
###############################################################################

1;

__END__

=head1 NAME

PSGConf::Action::GenerateFile::dfstab - action to generate /etc/dfs/dfstab

=head1 SYNOPSIS

  use PSGConf::Action::GenerateFile::dfstab;

  $psgconf->register_actions(
		PSGConf::Action::GenerateFile::dfstab->new(
			'name'		=> '/etc/dfs/dfstab',
			'exports'	=> {
				"/path/to/export"	=> {
					rw	=> { host1, host2, ... },
					ro	=> { host1, host2, ... },
					root	=> { host1, host2, ... },
					anon	=> 60001,
					nosuid	=> undef,
					...
				},
				...
			},
			...
		),
		...
	);

=head1 DESCRIPTION

The B<PSGConf::Action::GenerateFile::dfstab> module provides a
B<PSGConf> action class for generating the F</etc/dfs/dfstab> file.

The B<PSGConf::Action::GenerateFile::dfstab> class is derived from
the B<PSGConf::Action::GenerateFile> class, but it defines/overrides
the following methods:

=over 4

=item generate()

Generates the F</etc/dfs/dfstab> file based on the value of the
I<exports> attribute.

=back

In addition to the attributes supported by
the B<PSGConf::Action::GenerateFile> class, the
B<PSGConf::Action::GenerateFile::dfstab> class supports the
following attributes:

=over 4

=item I<exports>

A reference to a hash that maps absolute paths to a hash containing the
options for that path to be exported with.

In the sub-hash containing the export options, the value may be a scalar,
in which case it is encoded as the value of the option, or a reference
to a hash, in which case the keys of this sub-sub-hash will be considered
multiple values for the specified option.

=back

=head1 SEE ALSO

L<perl>

L<PSGConf>

L<PSGConf::Action::GenerateFile>

=cut




syntax highlighted by Code2HTML, v. 0.9.1