Changeset 2059 for trunk/LATMOS-Accounts/lib
- Timestamp:
- 08/17/17 14:04:41 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Task/Buildnet.pm
r2058 r2059 74 74 } 75 75 76 my %headers;77 76 foreach my $zone ($self->_base->search_objects('netzone', 'exported=*')) { 78 77 my $ozone = $self->_base->get_object('netzone', $zone) … … 83 82 next; 84 83 }; 85 my $header = $self->_pre_zone($ozone) or next; 86 $headers{$zone} = $header; 87 } 88 $self->_base->commit; 89 90 foreach (keys %headers) { 91 $self->gen_zone($_, $headers{$_}) or return; 92 } 93 $self->_base->rollback; 84 $self->gen_zone($zone) or do { 85 $self->_base->rollback; 86 return; 87 }; 88 $self->_base->commit; 89 } 94 90 95 91 if (my $cmd = $self->_la->val('_network_', 'post')) { … … 220 216 221 217 222 if ($ozone->get_attributes('t ype') !~ /^(dhcp|radius)$/ && $ozone->get_attributes('templateD')) {218 if ($ozone->get_attributes('templateD')) { 223 219 my $template = $self->_template_file($ozone); 224 220 my $output = $self->_output_file($ozone); 225 my @tstat = stat($template) ;221 my @tstat = stat($template) or return; 226 222 my @ostat = stat($output); 227 223 if (($ostat[9] || 0) <= ($tstat[9] || 0)) { … … 250 246 251 247 my $textzone = $self->_comment_zone($ozone); 252 if ($ozone->get_attributes('type') =~ /^(dns|reverse)$/) {253 my $tzone = $self->_read_template($ozone) or return;248 my $tzone = $self->_read_template($ozone); 249 if (defined($tzone)) { 254 250 $textzone .= $tzone; 255 } 251 } else { 252 return; 253 } 254 256 255 $self->_set_last_build($ozone); 257 256 … … 265 264 =cut 266 265 267 # TODO what is $header268 269 266 sub gen_zone { 270 my ($self, $zone , $header) = @_;267 my ($self, $zone) = @_; 271 268 272 269 my $ozone = $self->_base->get_object('netzone', $zone) … … 276 273 $ozone->get_attributes('type')); 277 274 278 $header ||= $self->_pre_zone($ozone) or return;275 my $header = $self->_pre_zone($ozone); 279 276 280 277 my $type = $ozone->get_attributes('type'); … … 287 284 undef; 288 285 289 if ($res) { 290 291 if (my $cmd = $self->_la->val('_network_', 'post_file', 292 $self->_la->val('_network_', 'post_zone'))) { 293 exec_command( 294 $cmd, 295 { 286 if (!defined($res)) { 287 } 288 289 my $textzone = 290 $header . 291 "\n" . 292 $self->_comment($ozone, "Comming from database:\n") . 293 $res . 294 $self->_comment($ozone, "End of data from database\n"); 295 296 297 if ($type =~ /^(dns|reverse)$/) { 298 if (!$self->_checkzone_output($ozone, $textzone)) { 299 la_log(LA_ERR, "Output of DNS zone %s not ok, not updating this zone", 300 $ozone->id); 301 return; 302 } 303 } 304 305 if (open(my $handle, '>', $self->_output_file($ozone))) { 306 print $handle $textzone; 307 close($handle); 308 la_log(LA_INFO, "zone %s written into %s", $ozone->id, 309 $self->_output_file($ozone)); 310 } else { 311 la_log(LA_ERR, "Can't open output file for zone %s", $ozone->id); 312 return; 313 } 314 315 if (my $cmd = $self->_la->val('_network_', 'post_file', 316 $self->_la->val('_network_', 'post_zone'))) { 317 exec_command( 318 $cmd, 319 { 296 320 TEMPLATE_DIR => $self->_la->val('_network_', 'template_dir', ''), 297 321 OUTPUT_DIR => $self->_la->val('_network_', 'output_dir', ''), … … 300 324 OUTPUT_FILE => $ozone->get_attributes('outputD'), 301 325 HOOK_TYPE => 'POSTFILE', 302 }, 303 ); 304 } 305 306 $self->_bnet_state->newval($ozone->id, 'dbrev', 307 $ozone->get_attributes('rev')); 308 la_log LA_DEBUG, "Zone rev build point is %d for %s", 309 $ozone->get_attributes('rev'), 310 $ozone->id; 311 $self->_bnet_state->SetParameterComment( 312 $ozone->id, 'dbrev', 313 scalar(localtime)); 314 $self->_write_state_file; 315 316 } else { 317 $self->_base->rollback; 318 } 319 $res 326 }, 327 ); 328 } 329 330 $self->_bnet_state->newval($ozone->id, 'dbrev', 331 $ozone->get_attributes('rev')); 332 la_log LA_DEBUG, "Zone rev build point is %d for %s", 333 $ozone->get_attributes('rev'), 334 $ozone->id; 335 $self->_bnet_state->SetParameterComment( 336 $ozone->id, 'dbrev', 337 scalar(localtime)); 338 $self->_write_state_file; 339 340 1; 320 341 } 321 342 … … 349 370 } 350 371 $res 372 } 373 374 sub _comment { 375 my ($self, $ozone, $message, @args) = @_; 376 my $com_prefix = 377 $ozone->get_attributes('type') =~ /^(dhcp|puppet|radius)$/ ? '#' : ';'; 378 379 if ($message) { 380 return(sprintf("$com_prefix $message", @args)); 381 } else { 382 $com_prefix 383 } 351 384 } 352 385 … … 398 431 } 399 432 433 434 # return undef on fatal error, depending zone type 400 435 sub _read_template { 401 436 my ($self, $ozone) = @_; 402 437 403 438 my $revision = $self->get_zone_rev($ozone) or return; 404 my $textzone = '';405 439 if (open(my $handle, '<', $self->_template_file($ozone))) { 440 my $textzone = ''; 406 441 while (my $line = <$handle>) { 407 442 $line =~ s/(\d+\s*;\s*)?\@REVISION@/$revision/; … … 409 444 } 410 445 close($handle); 446 return $textzone; 411 447 } else { 412 la_log(LA_ERR, "Can't open template file for zone %s", $ozone->id); 413 return; 414 } 415 return $textzone; 448 if ($ozone->get_attributes('type') =~ /^(dns|reverse)$/) { 449 la_log(LA_ERR, "Can't open template file for zone %s: %s", $ozone->id, $!); 450 return; 451 } else { 452 return ''; 453 } 454 } 416 455 } 417 456 418 457 sub _gen_dns_zone { 419 my ($self, $ozone , $textzone) = @_;420 421 my $dbzone = "\n; Comming from database:\n";458 my ($self, $ozone) = @_; 459 460 my $dbzone = ''; 422 461 if ($ozone->get_attributes('net')) { 423 462 my $findhost = $self->_base->db->prepare_cached(q{ … … 506 545 } 507 546 508 $dbzone .= "; End of data from database\n"; 509 510 if (!$self->_checkzone_output($ozone, $textzone . $dbzone)) { 511 la_log(LA_ERR, "Output of DNS zone %s not ok, not updating this zone", 512 $ozone->id); 513 return; 514 } 515 516 if (open(my $handle, '>', $self->_output_file($ozone))) { 517 print $handle $textzone; 518 print $handle $dbzone; 519 close($handle); 520 la_log(LA_INFO, "zone %s written into %s", $ozone->id, 521 $self->_output_file($ozone)); 522 } else { 523 la_log(LA_ERR, "Can't open output file for zone %s", $ozone->id); 524 return; 525 } 526 1; 547 return $dbzone; 527 548 } 528 549 529 550 sub _gen_reverse_zone { 530 my ($self, $ozone , $textzone) = @_;551 my ($self, $ozone) = @_; 531 552 532 553 my $domain = $ozone->get_attributes('domain') || ''; 533 my $dbzone = "\n; Comming from database:\n";554 my $dbzone = ''; 534 555 if ($ozone->get_attributes('net')) { 535 556 my $findhost = $self->_base->db->prepare_cached(q{ … … 605 626 } 606 627 607 $dbzone .= "; End of data from database\n"; 608 609 if (!$self->_checkzone_output($ozone, $textzone . $dbzone)) { 610 la_log(LA_ERR, "Output of DNS zone %s not ok, not updating this zone", 611 $ozone->id); 612 return; 613 } 614 615 if (open(my $handle, '>', $self->_output_file($ozone))) { 616 print $handle $textzone; 617 print $handle $dbzone; 618 close($handle); 619 la_log(LA_INFO, "zone %s written into %s", $ozone->id, 620 $self->_output_file($ozone)); 621 } else { 622 la_log(LA_ERR, "can't open output file %s (%s)", 623 $self->_output_file($ozone), $!); 624 return; 625 } 626 1; 628 return $dbzone; 627 629 } 628 630 629 631 sub _gen_dhcp_zone { 630 my ($self, $ozone , $output) = @_;632 my ($self, $ozone) = @_; 631 633 632 634 my $outzone = $ozone; 635 my $output = ''; 633 636 634 637 my @net; … … 771 774 } 772 775 773 $output .= "# End of data from database\n"; 774 if (open(my $handle, '>', $self->_output_file($outzone))) { 775 print $handle $output; 776 close($handle); 777 la_log(LA_INFO, "zone %s written into %s", $outzone->id, 778 $self->_output_file($outzone)); 779 } else { 780 la_log(LA_ERR, "Can't open output file for dhcp zone %s (%s)", 781 $outzone->id, $!); 782 return; 783 } 784 1; 776 $output 785 777 } 786 778 787 779 sub _gen_radius_zone { 788 my ($self, $ozone , $output) = @_;780 my ($self, $ozone) = @_; 789 781 790 782 my $outzone = $ozone; 783 my $output = ''; 791 784 792 785 my @net; … … 906 899 } 907 900 908 $output .= "# End of data from database\n"; 909 if (open(my $handle, '>', $self->_output_file($outzone))) { 910 print $handle $output; 911 close($handle); 912 la_log(LA_INFO, "zone %s written into %s", $outzone->id, 913 $self->_output_file($outzone)); 914 } else { 915 la_log(LA_ERR, "Can't open output file for dhcp zone %s (%s)", 916 $outzone->id, $!); 917 return; 918 } 919 1; 901 $output; 920 902 } 921 903 922 904 sub _gen_puppet_zone { 923 my ($self, $ozone, $output) = @_; 905 my ($self, $ozone) = @_; 906 907 my $output = ''; 924 908 925 909 if ($ozone->get_attributes('net')) { … … 970 954 } 971 955 972 $output .= "# End of data from database\n"; 973 my $file = $self->_output_file($ozone); 974 if (open(my $handle, '>', $file)) { 975 print $handle $output; 976 close($handle); 977 la_log(LA_INFO, "zone %s written into %s", $ozone->id, 978 $self->_output_file($ozone)); 979 } else { 980 la_log(LA_ERR, "Can't open output file for puppet zone %s (%s)", 981 $ozone->id, $!); 982 return; 983 } 984 1; 956 $output 985 957 } 986 958
Note: See TracChangeset
for help on using the changeset viewer.