Skip to content

Commit

Permalink
correctly generates package stanzas
Browse files Browse the repository at this point in the history
  • Loading branch information
kharmajbird committed Nov 21, 2012
1 parent 06c6cf0 commit c6667e6
Showing 1 changed file with 111 additions and 84 deletions.
195 changes: 111 additions & 84 deletions genpuppet.pl
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/perl

use Data::Dumper;
use Warnings;

our %resources;
our @requires, @includes;
Expand All @@ -9,125 +10,110 @@
my $var;


#
# start genpuppet.pl
#

print "Name of manifest? ";
chomp ($manifest = <>);
open FP, ">$manifest";

print "Name of class? ";
chomp ($classname = <>);
printf FP "class $classname {\n";

do_toplevel();
get_packages();
write_packages();

# get as many top-level requires and includes as necessary
# write end class
#
print "Top level require? ";
chomp ($var = <>);

while ($var) {
push (@requires, $var);
print "Top level require? ";
chomp ($var = <>);
}

print "Top level include? ";
chomp ($var = <>);

while ($var) {
push (@include, $var);
print "Top level include? ";
chomp ($var = <>);
}
printf FP "}\n";
close FP;


# Use class nullmailer or exec set-semaphore?
#
print "Use class nullmailer? [no] ";
chomp ($var = <>);
if ($var) { $nullmailer=1; }

print "Use exec set-semaphore? [no] ";
chomp ($var = <>);
if ($var) { $semaphore=1; }

get_packages();




open FP, ">$manifest";

printf FP "class $classname {\n";

while (@requires) {
my $req = shift (@requires);

printf FP " require $req\n";
}
printf FP "\n";

while (@includes) {
my $inc = shift (@includes);

printf FP " include $inc\n";
}
printf FP "\n";

if ($nullmailer) {
printf FP " class 'nullmailer': {\n";
printf FP " admin => jlewis@pavlovmedia.com,\n";
printf FP " relay => mail@pavlovmedia.com,\n";
printf FP " }\n\n";
}



# Get as many top-level requires and includes as necessary
# Grok class nullmailer or exec set-semaphore options
#
sub do_toplevel {
my $a, $r;

# write package stanzas
print "Top level require? ";
chomp ($var = <>);

while ($var) {
push (@requires, $var);
print "Top level require? ";
chomp ($var = <>);
}
while (@requires) {
my $inc = shift (@requires);

foreach my $var (reverse keys $resources {'package'}) {
printf FP " package { '$var':\n";
printf FP " ensure => $resources{'package'}{$var}{'ensure'},\n";
printf FP " require $inc\n";
}
printf FP "\n";

if ($resources{'package'}{$var}{'before'}) {
my @ary = $resources{'package'}{$var}{'before'};

printf FP " before => [\n";
print "Top level include? ";
chomp ($var = <>);

while (@ary) {
my $bf = shift (@ary);
printf FP " $bf,\n";
}
printf FP " ],\n";
while ($var) {
push (@includes, $var);
print "Top level include? ";
chomp ($var = <>);
}
printf FP " }\n\n";
}
while (@includes) {
my $inc = shift (@includes);

printf FP " include $inc\n";
}
printf FP "\n";


print "Use class nullmailer? [no] ";
chomp ($var = <>);
if ($var) {
print "adminaddr => ";
chomp ($a = <>);
print "remoterelay => ";
chomp ($r = <>);

printf FP " class { 'nullmailer':\n";
printf FP " adminaddr => '$a',\n";
printf FP " remoterelay => '$r',\n";
printf FP " }\n\n";
}

# write end class
printf FP "}\n";

close FP;
print "Use exec set-semaphore? [no] ";
chomp ($var = <>);

# need to handle this just before the end of the class"
#
if ($var) { $semaphore=1; }
}

print Dumper (%resources);

#
# get "package" resources and all metaparameters
# get all package resources and their metaparameters
#
sub get_packages {
my $pname, $ensure, @require, @before;
my $pname, $ensure;
my $var;

print "Package name? ";
chomp ($pname = <>);

while ($pname) {
my @before, @require;

print "ensure => ";
chomp ($var = <>);

$resources {'package'} -> {$pname} -> {'ensure'} = $var;
if ($var) {
$resources{'package'}->{$pname}->{'ensure'} = $var;
}

print "before => ";
chomp ($var = <>);
Expand All @@ -137,8 +123,9 @@ sub get_packages {
print "before => ";
chomp ($var = <>);
}
#$resources {'package'} -> {$pname} -> {'before'} = \@before;
$resources {'package'} -> {$pname} -> {'before'} = @before;
if (@before) {
@{ $resources{'package'}->{$pname}->{'before'} } = @before;
}

print "require => ";
chomp ($var = <>);
Expand All @@ -148,10 +135,50 @@ sub get_packages {
print "require => ";
chomp ($var = <>);
}
#$resources {'package'} -> {$pname} -> {'require'} = \@require;
$resources {'package'} -> {$pname} -> {'require'} = @require;
if (@require) {
@{ $resources{'package'}->{$pname}->{'require'} } = @require;
}

print "Package name? ";
chomp ($pname = <>);
}
}



#
# write package stanzas
#
sub write_packages {
foreach my $var (reverse keys %{ $resources{'package'} }) {
printf FP " package { '$var':\n";
printf FP " ensure => $resources{'package'}{$var}{'ensure'},\n";

# do before =>
#
if ($resources{'package'}{$var}{'before'}) {
my @ary = @{ $resources{'package'}{$var}{'before'} };

printf FP " before => [\n";
while (@ary) {
my $bf = shift (@ary);
printf FP " $bf,\n";
}
printf FP " ],\n";
}

# do require =>
#
if ($resources{'package'}{$var}{'require'}) {
my @ary = @{ $resources{'package'}{$var}{'require'} };

printf FP " require => [\n";
while (@ary) {
my $bf = shift (@ary);
printf FP " $bf,\n";
}
printf FP " ],\n";
}
printf FP " }\n\n";
}
}

0 comments on commit c6667e6

Please sign in to comment.