pf-tools commit: r786 [ccaillet-guest] - in /branches/next-gen: doc/networkfile-syntax lib/PFTools/Net.pm sbin/mk_sitezone
parmelan-guest at users.alioth.debian.org
parmelan-guest at users.alioth.debian.org
Tue Jul 27 15:16:25 UTC 2010
Author: ccaillet-guest
Date: Tue Jul 27 15:16:09 2010
New Revision: 786
URL: http://svn.debian.org/wsvn/pf-tools/?sc=1&rev=786
Log:
UPDATE:
* sbin/mk_sitezone
- moving __Mk_zoneheader and Mk_zone_for_site from Net.pm only used by this script
- use Retrieve_GLOBAL for accessing to global structure instead of parsing all files
* lib/PFTools/Net.pm
- removing useless code
DOC:
* doc/networkfile-syntax
- removing netmask and netmask6 key which are useless according to CIDR format
- now netmask, broadcast ... are computed from NetAddr::IP object from Net.pm
Modified:
branches/next-gen/doc/networkfile-syntax
branches/next-gen/lib/PFTools/Net.pm
branches/next-gen/sbin/mk_sitezone
Modified: branches/next-gen/doc/networkfile-syntax
URL: http://svn.debian.org/wsvn/pf-tools/branches/next-gen/doc/networkfile-syntax?rev=786&op=diff
==============================================================================
--- branches/next-gen/doc/networkfile-syntax (original)
+++ branches/next-gen/doc/networkfile-syntax Tue Jul 27 15:16:09 2010
@@ -29,10 +29,8 @@
? comment ::= <STR>
! site ::= <STR>
? tag ::= <INT> 802.1q tag
- ! network ::= <NETWORK> define here the network in IPv4 format if CIDR format is used netmask key is not needed
- ? network6 ::= <NETWORK> define here the prefix in IPv6 format
- ? netmask ::= <NETMASK> define here the netmask in IPv4 format or in CIDR format e.g. /XX
- ? netmask6 ::= <NETMASK> define here the netmask in IPv6 format or in CIDR format e.g. /XX
+ ! network ::= <NETWORK> define here the network in IPv4 format in CIDR format
+ ? network6 ::= <NETWORK> define here the prefix in IPv6 format in CIDR format
! scope ::= private|public, if private is defined this network will be ONLY added on zone private for site
? gateway ::= <IPV4>
Modified: branches/next-gen/lib/PFTools/Net.pm
URL: http://svn.debian.org/wsvn/pf-tools/branches/next-gen/lib/PFTools/Net.pm?rev=786&op=diff
==============================================================================
--- branches/next-gen/lib/PFTools/Net.pm (original)
+++ branches/next-gen/lib/PFTools/Net.pm Tue Jul 27 15:16:09 2010
@@ -30,38 +30,14 @@
our @ISA = ('Exporter');
our @EXPORT = qw(
- Init_lib_net
-
- Get_Active_Filename
- Get_Active_Systemmap
- Get_PXE_Filename
- Get_Ordered_Filtered_Hosts
- Get_dns_from_hostname
- Get_dns_from_zone
- Get_If
- Get_UM_If
- Get_Dhcp_Infos
- Get_Cmdline
- Get_Initrd_Filename
- Get_Ramdisk_size_from_Initrd
- Resolv
-
- Mk_interfaces
- Mk_zone
- Parse_routing_table
- Cmp_routing_table
-
- cmpif
-
- Add_network
- Add_site
- Add_zone
- Add_server
- Add_host
- Get_site_list
- Get_site_zone_from_GLOBAL
-
- Mk_zone_for_site
+ Mk_interfaces
+ Add_network
+ Add_site
+ Add_zone
+ Add_server
+ Add_host
+ Get_site_list
+ Get_site_zone_from_GLOBAL
);
our @EXPORT_OK = qw();
@@ -69,7 +45,6 @@
use Fcntl ':mode';
use POSIX qw(ceil floor);
-# use PFTools::Conf;
use PFTools::Logger;
use PFTools::Parser;
use NetAddr::IP;
@@ -77,39 +52,6 @@
use Data::Dumper;
#$Data::Dumper::Sortkeys = 1;
#$Data::Dumper::Useperl = 1;
-
-our $HOST_CONFIG_REGEX = qr{
- \A
- ( # HOSTTYPE
- (
- ( # POPNAME (optional)
- [a-z]{3}\d{1}
- )
- -
- )?
- (
- [a-z0-9-]+[a-z-] # host type (without the POP name)
- )
- )
- %* # % sign designate the number of digit at the end of real hostname
- \z
-}xms;
-our $HOSTTYPE_CONFIG_REGEX = qr{
- \A
- ( # HOSTTYPE
- (
- ( # POPNAME (optional)
- [a-z]{3}\d{1}
- )
- -
- )?
- (
- [a-z0-9-]+[a-z-] # host type (without the POP name)
- )
- )
- \z
-}xms;
-
my @DEFAULTDHCPVLAN = ('vlan-7');
@@ -832,28 +774,6 @@
#########################################################################
#
-# STR Get_site_zone_from_GLOBAL ( STR , HASHREF )
-#
-# This function returns the zone name which is defined for the specified site
-# Inputs :
-# - $site : site name
-# - $global_config : hashref where is stored global configuration
-#
-# Output :
-# Return a string containing the zone defined for this site.
-#
-sub Get_site_zone_from_GLOBAL ($$) {
- my ( $site, $global_config ) = @_;
-
- if ( ! defined $global_config->{'SITE'}->{'BY_NAME'}->{$site} ) {
- Abort ( $CODE->{'UNDEF_KEY'},
- "" );
- }
- return $global_config->{'SITE'}->{'BY_NAME'}->{$site}->{'zone'};
-}
-
-#########################################################################
-#
# ARRAYREF __Get_site_list ( HASHREF , HASHREF )
#
# This function adds build the site list for a given section
@@ -988,7 +908,7 @@
$net_part->{$netaddr_key}->{$net_block->cidr()} = $net_name;
$net_part->{'BY_TAG'}->{$ref_net->{'tag'}} = $net_name if ( $ref_net->{'tag'} );
# Adding entries for network, netmask, broadcast etc. into the DNS zone
- my $zone = Get_site_zone_from_GLOBAL ( $site, $global_config );
+ my $zone = $global_config->{'SITE'}->{'BY_NAME'}->{$site}->{'zone'};
my $zone_part = $global_config->{$zone_key}->{'BY_NAME'}->{$zone};
push ( @{$zone_part->{'__network_order'}->{$site}}, $net_name );
$zone_part->{'BY_SITE'}->{$site}->{$net_name} = {};
@@ -1393,7 +1313,7 @@
$site_part->{'HOST'}->{'BY_NAME'}->{$hostclass} = {};
}
my $srv_part = $site_part->{'HOST'}->{'BY_NAME'}->{$hostclass};
- my $zone = Get_site_zone_from_GLOBAL ( $site, $global_config );
+ my $zone = $site_part->{'zone'};
my $prefix = __Get_site_prefix ( $site, $global_config->{'SITE'}->{'BY_NAME'}->{$site} );
my $vlan_list = __Get_vlan_list_from_server ( $srv2add );
foreach my $hostnum ( 0 .. $host_last ) {
@@ -1650,7 +1570,7 @@
$site_part->{'HOST'}->{'BY_NAME'}->{$hostclass} = {};
}
my $host_part = $site_part->{'HOST'}->{'BY_NAME'}->{$hostclass};
- my $zone = Get_site_zone_from_GLOBAL ( $site, $global_config );
+ my $zone = $site_part->{'zone'};
my $prefix = __Get_site_prefix ( $site, $global_config->{'SITE'}->{'BY_NAME'}->{$site} );
foreach my $hostnum ( 0 .. $host_last ) {
foreach my $hostnode ( 0 .. $node_last ) {
@@ -1790,7 +1710,7 @@
}
}
my $site_part = $global_config->{'SITE'}->{'BY_NAME'}->{$site};
- my $zone = Get_site_zone_from_GLOBAL ( $site, $global_config );
+ my $zone = $site_part->{'zone'};
$hostname =~ /^([^.]+)(\.([^.]+))?(\.$zone)?$/ ;
my ( $hostshort, $hostvlan ) = ( $1, $3 ) ;
my $hosttype = Get_hosttype_from_hostname ( $hostname, $global_config );
@@ -1802,100 +1722,6 @@
my ( $hostname, $global_config, $site ) = @_ ;
return Get_host_config_from_CONFIG ( $hostname, $global_config, $site );
-}
-
-
-###############################################################
-### Building zone file for IPv4 entries
-
-sub __Mk_zoneheader ($$$) {
- my ( $zone_name, $zone_site, $zone_part ) = @_;
- my $zone_result = [];
-
- # SOA
- push ( @{$zone_result}, ";;" );
- push ( @{$zone_result}, ";; BIND configuration file for zone : ".$zone_name );
- push ( @{$zone_result}, ";; Site : ".$zone_site );
- push ( @{$zone_result}, ";;" );
- push ( @{$zone_result}, ";; ", $zone_part->{'SOA'}->{'comment'} );
- push ( @{$zone_result}, "\n;;============================================================================\n" );
- push ( @{$zone_result}, "\$TTL ".$zone_part->{'SOA'}->{'ttl'} );
- push ( @{$zone_result}, "\@\t\tIN SOA ".$zone_part->{'SOA'}->{'soa'}." ".$zone_part->{'SOA'}->{'mail'}." (" );
- my $serial = ( $zone_part->{'SOA'}->{'serial'} eq 'AUTO' ) ? time."\t; Serial" : $zone_part->{'SOA'}->{'serial'};
- push ( @{$zone_result}, "\t\t\t".$serial );
- foreach my $spec ( 'refresh', 'retry', 'expire', 'negttl' ) {
- push ( @{$zone_result}, "\t\t\t".$zone_part->{'SOA'}->{$spec} );
- }
- push ( @{$zone_result}, "\t\t)" );
- push ( @{$zone_result}, "\n" );
- # NS fields
- foreach my $nameserver ( @{ $zone_part->{'SOA'}->{'@ns'} } ) {
- push ( @{$zone_result}, "\t\tIN NS\t".$nameserver );
- }
- push ( @{$zone_result}, "\n" );
- # MX fields
- foreach my $mx ( @{ $zone_part->{'SOA'}->{'@mx'} } ) {
- push ( @{$zone_result}, "\t\tIN MX\t".$mx );
- }
- push ( @{$zone_result}, "\n" );
- return $zone_result;
-}
-
-#
-# VOID Mk_zone (STRING $fic_zone, HASHREF $Z)
-#
-# Construit un le fichier $fic_zone pour la zone DNS decrite par la structure $Z
-#
-#==============================================================================================
-sub Mk_zone_for_site ($$$) {
- my ( $zone_name, $zone_site, $global_config ) = @_;
- my $zone_result = [];
-
- # Building Header (SOA, NS an MX fileds)
- $zone_result = __Mk_zoneheader( $zone_name, $zone_site, $global_config->{'ZONE'}->{'BY_NAME'}->{$zone_name} );
- my $zone_part = $global_config->{'ZONE'}->{'BY_NAME'}->{$zone_name}->{'BY_SITE'}->{$zone_site};
-
- ### Building Networks part
- push ( @{$zone_result}, "\n\n;;" );
- push ( @{$zone_result}, ";; Networks" );
- push ( @{$zone_result}, ";;============================================================================\n" );
-
- foreach my $network ( @{$global_config->{'ZONE'}->{'BY_NAME'}->{$zone_name}->{'__network_order'}->{$zone_site}} ) {
- my $head = $network;
- $head .= " : ".$zone_part->{$network}->{'comment'} if ( $zone_part->{$network}->{'comment'} );
- push ( @{$zone_result}, "; ".$head );
- push ( @{$zone_result}, ";----------------------------------------------------------------------------" );
- foreach my $spec ( 'network', 'netmask', 'broadcast', 'gateway' ) {
- next if ( ! defined $zone_part->{$network}->{$spec} );
- push ( @{$zone_result}, $spec.".".$network."\t\t".$zone_part->{$network}->{$spec} );
- }
- push ( @{$zone_result}, "" );
- }
-
- ### Servers
- push ( @{$zone_result}, "\n\n;;" );
- push ( @{$zone_result}, ";; Servers" );
- push ( @{$zone_result}, ";;============================================================================\n" );
-
- foreach my $server ( @{$global_config->{'ZONE'}->{'BY_NAME'}->{$zone_name}->{'__hostclass_order'}->{$zone_site}} ) {
- my $head = $server;
- $head .= " : ".$zone_part->{$server}->{'comment'} if ( $zone_part->{$server}->{'comment'} );
- push ( @{$zone_result}, "; ".$head );
- push ( @{$zone_result}, ";----------------------------------------------------------------------------" );
- foreach my $field ( sort keys %{$zone_part->{$server}} ) {
- next if ( $field eq 'comment' );
- if ( ref $zone_part->{$server}->{$field} eq 'ARRAY' ) {
- foreach my $elt ( @{$zone_part->{$server}->{$field}} ) {
- push ( @{$zone_result}, $field."\t\t".$elt );
- }
- }
- else {
- push ( @{$zone_result}, $field."\t".$zone_part->{$server}->{$field} );
- }
- }
- push ( @{$zone_result}, "" );
- }
- return $zone_result;
}
#
Modified: branches/next-gen/sbin/mk_sitezone
URL: http://svn.debian.org/wsvn/pf-tools/branches/next-gen/sbin/mk_sitezone?rev=786&op=diff
==============================================================================
--- branches/next-gen/sbin/mk_sitezone (original)
+++ branches/next-gen/sbin/mk_sitezone Tue Jul 27 15:16:09 2010
@@ -27,9 +27,7 @@
use Getopt::Long qw( :config ignore_case_always bundling );
use PFTools::Conf;
-use PFTools::Net;
use PFTools::Logger;
-use Sys::Hostname;
#################################
# VARS
@@ -46,6 +44,9 @@
my $version = sprintf( "svn-r%s", q$Revision$ =~ /([\d.]+)/ );
+#################################################
+# Functions
+
sub Do_help {
print STDERR << "# ENDHELP";
$program - version $version
@@ -60,6 +61,102 @@
# ENDHELP
}
+###############################################################
+### Building zone file for IPv4 entries
+
+sub __Mk_zoneheader ($$$) {
+ my ( $zone_name, $zone_site, $zone_part ) = @_;
+ my $zone_result = [];
+
+ # SOA
+ push ( @{$zone_result}, ";;" );
+ push ( @{$zone_result}, ";; BIND configuration file for zone : ".$zone_name );
+ push ( @{$zone_result}, ";; Site : ".$zone_site );
+ push ( @{$zone_result}, ";;" );
+ push ( @{$zone_result}, ";; ", $zone_part->{'SOA'}->{'comment'} );
+ push ( @{$zone_result}, "\n;;============================================================================\n" );
+ push ( @{$zone_result}, "\$TTL ".$zone_part->{'SOA'}->{'ttl'} );
+ push ( @{$zone_result}, "\@\t\tIN SOA ".$zone_part->{'SOA'}->{'soa'}." ".$zone_part->{'SOA'}->{'mail'}." (" );
+ my $serial = ( $zone_part->{'SOA'}->{'serial'} eq 'AUTO' ) ? time."\t; Serial" : $zone_part->{'SOA'}->{'serial'};
+ push ( @{$zone_result}, "\t\t\t".$serial );
+ foreach my $spec ( 'refresh', 'retry', 'expire', 'negttl' ) {
+ push ( @{$zone_result}, "\t\t\t".$zone_part->{'SOA'}->{$spec} );
+ }
+ push ( @{$zone_result}, "\t\t)" );
+ push ( @{$zone_result}, "\n" );
+ # NS fields
+ foreach my $nameserver ( @{ $zone_part->{'SOA'}->{'@ns'} } ) {
+ push ( @{$zone_result}, "\t\tIN NS\t".$nameserver );
+ }
+ push ( @{$zone_result}, "\n" );
+ # MX fields
+ foreach my $mx ( @{ $zone_part->{'SOA'}->{'@mx'} } ) {
+ push ( @{$zone_result}, "\t\tIN MX\t".$mx );
+ }
+ push ( @{$zone_result}, "\n" );
+ return $zone_result;
+}
+
+#
+# VOID Mk_zone (STRING $fic_zone, HASHREF $Z)
+#
+# Construit un le fichier $fic_zone pour la zone DNS decrite par la structure $Z
+#
+#==============================================================================================
+sub Mk_zone_for_site ($$$) {
+ my ( $zone_name, $zone_site, $global_config ) = @_;
+ my $zone_result = [];
+
+ # Building Header (SOA, NS an MX fileds)
+ $zone_result = __Mk_zoneheader( $zone_name, $zone_site, $global_config->{'ZONE'}->{'BY_NAME'}->{$zone_name} );
+ my $zone_part = $global_config->{'ZONE'}->{'BY_NAME'}->{$zone_name}->{'BY_SITE'}->{$zone_site};
+
+ ### Building Networks part
+ push ( @{$zone_result}, "\n\n;;" );
+ push ( @{$zone_result}, ";; Networks" );
+ push ( @{$zone_result}, ";;============================================================================\n" );
+
+ foreach my $network ( @{$global_config->{'ZONE'}->{'BY_NAME'}->{$zone_name}->{'__network_order'}->{$zone_site}} ) {
+ my $head = $network;
+ $head .= " : ".$zone_part->{$network}->{'comment'} if ( $zone_part->{$network}->{'comment'} );
+ push ( @{$zone_result}, "; ".$head );
+ push ( @{$zone_result}, ";----------------------------------------------------------------------------" );
+ foreach my $spec ( 'network', 'netmask', 'broadcast', 'gateway' ) {
+ next if ( ! defined $zone_part->{$network}->{$spec} );
+ push ( @{$zone_result}, $spec.".".$network."\t\t".$zone_part->{$network}->{$spec} );
+ }
+ push ( @{$zone_result}, "" );
+ }
+
+ ### Servers
+ push ( @{$zone_result}, "\n\n;;" );
+ push ( @{$zone_result}, ";; Servers" );
+ push ( @{$zone_result}, ";;============================================================================\n" );
+
+ foreach my $server ( @{$global_config->{'ZONE'}->{'BY_NAME'}->{$zone_name}->{'__hostclass_order'}->{$zone_site}} ) {
+ my $head = $server;
+ $head .= " : ".$zone_part->{$server}->{'comment'} if ( $zone_part->{$server}->{'comment'} );
+ push ( @{$zone_result}, "; ".$head );
+ push ( @{$zone_result}, ";----------------------------------------------------------------------------" );
+ foreach my $field ( sort keys %{$zone_part->{$server}} ) {
+ next if ( $field eq 'comment' );
+ if ( ref $zone_part->{$server}->{$field} eq 'ARRAY' ) {
+ foreach my $elt ( @{$zone_part->{$server}->{$field}} ) {
+ push ( @{$zone_result}, $field."\t\t".$elt );
+ }
+ }
+ else {
+ push ( @{$zone_result}, $field."\t".$zone_part->{$server}->{$field} );
+ }
+ }
+ push ( @{$zone_result}, "" );
+ }
+ return $zone_result;
+}
+
+##########################################################""
+### MAIN
+
GetOptions (
'help' => \$HELP,
'site|s=s' => \$SITE,
@@ -99,15 +196,18 @@
Abort ( $CODE->{'UNDEF_KEY'},
"A site MUST BE defined for building DNS zone forward" );
}
-
-my $zone_name = Get_site_zone_from_GLOBAL ( $SITE, $GLOBAL_STRUCT );
-my $zone = Mk_zone_for_site ( $zone_name, $SITE, $GLOBAL_STRUCT );
-
-unless ( open ( ZONE, ">".$OUTPUT_FILE ) ) {
- Abort ( $CODE->{'OPEN'},
- "Unable to open zone file ".$OUTPUT_FILE );
-}
-print ZONE join ( "\n", @{$zone} );
-close ( ZONE );
+elsif ( ! defined $GLOBAL_STRUCT->{'SITE'}->{'BY_NAME'}->{$SITE} ) {
+ Abort ( $CODE->{'UNDEF_KEY'},
+ "Site ".$SITE." is not defined into global configuration" );
+}
+else {
+ my $zone = Mk_zone_for_site ( $GLOBAL_STRUCT->{'SITE'}->{'BY_NAME'}->{$SITE}->{'zone'}, $SITE, $GLOBAL_STRUCT );
+ unless ( open ( ZONE, ">".$OUTPUT_FILE ) ) {
+ Abort ( $CODE->{'OPEN'},
+ "Unable to open zone file ".$OUTPUT_FILE );
+ }
+ print ZONE join ( "\n", @{$zone} );
+ close ( ZONE );
+}
exit 0;
More information about the pf-tools-commits
mailing list