Index: /branches/ccl_branches/ipponly-20191108/console/Build.PL
===================================================================
--- /branches/ccl_branches/ipponly-20191108/console/Build.PL	(revision 41118)
+++ /branches/ccl_branches/ipponly-20191108/console/Build.PL	(revision 41118)
@@ -0,0 +1,26 @@
+use Module::Build;
+# See perldoc Module::Build for details of how this works
+
+Module::Build->new(
+    module_name         => 'console',
+    dist_version_from   => 'scripts/console',
+    author              => 'Joshua Hoblitt <jhoblitt@cpan.org>',
+    license             => 'gpl',
+    create_makefile_pl  => 'passthrough',
+    requires            => {
+        'Config::YAML'          => '1.42',
+    },
+    build_requires      => {
+        'Test::Cmd'             => '1.05',
+        'Test::More'            => 0,
+        'Test::Warn'            => '0.08',
+    },
+    recommends          => {
+        'Test::Distribution'    => '1.22',
+    },
+    script_files        => [qw(
+        scripts/console
+        scripts/console-config
+        scripts/console-ipp-defaults
+    )],
+)->create_build_script;
Index: /branches/ccl_branches/ipponly-20191108/console/Changes
===================================================================
--- /branches/ccl_branches/ipponly-20191108/console/Changes	(revision 41118)
+++ /branches/ccl_branches/ipponly-20191108/console/Changes	(revision 41118)
@@ -0,0 +1,6 @@
+Revision history for Perl module console
+
+0.01 Mon Jun  8 16:19:11 2009
+    - original version; created by ExtUtils::ModuleMaker 0.51
+
+
Index: /branches/ccl_branches/ipponly-20191108/console/LICENSE
===================================================================
--- /branches/ccl_branches/ipponly-20191108/console/LICENSE	(revision 41118)
+++ /branches/ccl_branches/ipponly-20191108/console/LICENSE	(revision 41118)
@@ -0,0 +1,260 @@
+The General Public License (GPL)
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave,
+Cambridge, MA 02139, USA. Everyone is permitted to copy and distribute
+verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public License is intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users. This General Public License applies to most of
+the Free Software Foundation's software and to any other program whose
+authors commit to using it. (Some other Free Software Foundation software is
+covered by the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom
+to distribute copies of free software (and charge for this service if you wish), that
+you receive source code or can get it if you want it, that you can change the
+software or use pieces of it in new free programs; and that you know you can do
+these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny
+you these rights or to ask you to surrender the rights. These restrictions
+translate to certain responsibilities for you if you distribute copies of the
+software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for a
+fee, you must give the recipients all the rights that you have. You must make
+sure that they, too, receive or can get the source code. And you must show
+them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2) offer
+you this license which gives you legal permission to copy, distribute and/or
+modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software. If the
+software is modified by someone else and passed on, we want its recipients to
+know that what they have is not the original, so that any problems introduced by
+others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish
+to avoid the danger that redistributors of a free program will individually obtain
+patent licenses, in effect making the program proprietary. To prevent this, we
+have made it clear that any patent must be licensed for everyone's free use or
+not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+GNU GENERAL PUBLIC LICENSE
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
+MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the terms of
+this General Public License. The "Program", below, refers to any such program
+or work, and a "work based on the Program" means either the Program or any
+derivative work under copyright law: that is to say, a work containing the
+Program or a portion of it, either verbatim or with modifications and/or translated
+into another language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered by
+this License; they are outside its scope. The act of running the Program is not
+restricted, and the output from the Program is covered only if its contents
+constitute a work based on the Program (independent of having been made by
+running the Program). Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as
+you receive it, in any medium, provided that you conspicuously and appropriately
+publish on each copy an appropriate copyright notice and disclaimer of warranty;
+keep intact all the notices that refer to this License and to the absence of any
+warranty; and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at
+your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus
+forming a work based on the Program, and copy and distribute such
+modifications or work under the terms of Section 1 above, provided that you also
+meet all of these conditions:
+
+a) You must cause the modified files to carry prominent notices stating that you
+changed the files and the date of any change.
+
+b) You must cause any work that you distribute or publish, that in whole or in
+part contains or is derived from the Program or any part thereof, to be licensed
+as a whole at no charge to all third parties under the terms of this License.
+
+c) If the modified program normally reads commands interactively when run, you
+must cause it, when started running for such interactive use in the most ordinary
+way, to print or display an announcement including an appropriate copyright
+notice and a notice that there is no warranty (or else, saying that you provide a
+warranty) and that users may redistribute the program under these conditions,
+and telling the user how to view a copy of this License. (Exception: if the
+Program itself is interactive but does not normally print such an announcement,
+your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Program, and can be reasonably
+considered independent and separate works in themselves, then this License,
+and its terms, do not apply to those sections when you distribute them as
+separate works. But when you distribute the same sections as part of a whole
+which is a work based on the Program, the distribution of the whole must be on
+the terms of this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to
+work written entirely by you; rather, the intent is to exercise the right to control
+the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the
+Program (or with a work based on the Program) on a volume of a storage or
+distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may copy and distribute the Program (or a work based on it, under
+Section 2) in object code or executable form under the terms of Sections 1 and 2
+above provided that you also do one of the following:
+
+a) Accompany it with the complete corresponding machine-readable source
+code, which must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange; or,
+
+b) Accompany it with a written offer, valid for at least three years, to give any
+third party, for a charge no more than your cost of physically performing source
+distribution, a complete machine-readable copy of the corresponding source
+code, to be distributed under the terms of Sections 1 and 2 above on a medium
+customarily used for software interchange; or,
+
+c) Accompany it with the information you received as to the offer to distribute
+corresponding source code. (This alternative is allowed only for noncommercial
+distribution and only if you received the program in object code or executable
+form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making
+modifications to it. For an executable work, complete source code means all the
+source code for all modules it contains, plus any associated interface definition
+files, plus the scripts used to control compilation and installation of the
+executable. However, as a special exception, the source code distributed need
+not include anything that is normally distributed (in either source or binary form)
+with the major components (compiler, kernel, and so on) of the operating system
+on which the executable runs, unless that component itself accompanies the
+executable.
+
+If distribution of executable or object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the source
+code from the same place counts as distribution of the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as
+expressly provided under this License. Any attempt otherwise to copy, modify,
+sublicense or distribute the Program is void, and will automatically terminate
+your rights under this License. However, parties who have received copies, or
+rights, from you under this License will not have their licenses terminated so long
+as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it.
+However, nothing else grants you permission to modify or distribute the Program
+or its derivative works. These actions are prohibited by law if you do not accept
+this License. Therefore, by modifying or distributing the Program (or any work
+based on the Program), you indicate your acceptance of this License to do so,
+and all its terms and conditions for copying, distributing or modifying the
+Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program),
+the recipient automatically receives a license from the original licensor to copy,
+distribute or modify the Program subject to these terms and conditions. You
+may not impose any further restrictions on the recipients' exercise of the rights
+granted herein. You are not responsible for enforcing compliance by third parties
+to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent infringement
+or for any other reason (not limited to patent issues), conditions are imposed on
+you (whether by court order, agreement or otherwise) that contradict the
+conditions of this License, they do not excuse you from the conditions of this
+License. If you cannot distribute so as to satisfy simultaneously your obligations
+under this License and any other pertinent obligations, then as a consequence
+you may not distribute the Program at all. For example, if a patent license would
+not permit royalty-free redistribution of the Program by all those who receive
+copies directly or indirectly through you, then the only way you could satisfy
+both it and this License would be to refrain entirely from distribution of the
+Program.
+
+If any portion of this section is held invalid or unenforceable under any particular
+circumstance, the balance of the section is intended to apply and the section as
+a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other
+property right claims or to contest validity of any such claims; this section has
+the sole purpose of protecting the integrity of the free software distribution
+system, which is implemented by public license practices. Many people have
+made generous contributions to the wide range of software distributed through
+that system in reliance on consistent application of that system; it is up to the
+author/donor to decide if he or she is willing to distribute software through any
+other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain countries
+either by patents or by copyrighted interfaces, the original copyright holder who
+places the Program under this License may add an explicit geographical
+distribution limitation excluding those countries, so that distribution is permitted
+only in or among countries not thus excluded. In such case, this License
+incorporates the limitation as if written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the
+General Public License from time to time. Such new versions will be similar in
+spirit to the present version, but may differ in detail to address new problems or
+concerns.
+
+Each version is given a distinguishing version number. If the Program specifies a
+version number of this License which applies to it and "any later version", you
+have the option of following the terms and conditions either of that version or of
+any later version published by the Free Software Foundation. If the Program does
+not specify a version number of this License, you may choose any version ever
+published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs
+whose distribution conditions are different, write to the author to ask for
+permission. For software which is copyrighted by the Free Software Foundation,
+write to the Free Software Foundation; we sometimes make exceptions for this.
+Our decision will be guided by the two goals of preserving the free status of all
+derivatives of our free software and of promoting the sharing and reuse of
+software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS
+NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
+"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
+IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED
+TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY
+WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS
+PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
+(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
+OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS
+BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
Index: /branches/ccl_branches/ipponly-20191108/console/MANIFEST
===================================================================
--- /branches/ccl_branches/ipponly-20191108/console/MANIFEST	(revision 41118)
+++ /branches/ccl_branches/ipponly-20191108/console/MANIFEST	(revision 41118)
@@ -0,0 +1,13 @@
+Build.PL
+Changes
+LICENSE
+MANIFEST
+Makefile.PL
+README
+Todo
+lib/Console.pm
+scripts/console
+scripts/console-config
+scripts/console-ipp-defaults
+t/00_distribution.t
+t/01_load.t
Index: /branches/ccl_branches/ipponly-20191108/console/README
===================================================================
--- /branches/ccl_branches/ipponly-20191108/console/README	(revision 41118)
+++ /branches/ccl_branches/ipponly-20191108/console/README	(revision 41118)
@@ -0,0 +1,15 @@
+pod2text console.pm > README
+
+If this is still here it means the programmer was too lazy to create the readme file.
+
+You can create it now by using the command shown above from this directory.
+
+At the very least you should be able to use this set of instructions
+to install the module...
+
+perl Build.PL
+./Build
+./Build test
+./Build install
+
+If you are on a windows box you should use 'nmake' rather than 'make'.
Index: /branches/ccl_branches/ipponly-20191108/console/Todo
===================================================================
--- /branches/ccl_branches/ipponly-20191108/console/Todo	(revision 41118)
+++ /branches/ccl_branches/ipponly-20191108/console/Todo	(revision 41118)
@@ -0,0 +1,5 @@
+TODO list for Perl module console
+
+- Nothing yet
+
+
Index: /branches/ccl_branches/ipponly-20191108/console/lib/Console.pm
===================================================================
--- /branches/ccl_branches/ipponly-20191108/console/lib/Console.pm	(revision 41118)
+++ /branches/ccl_branches/ipponly-20191108/console/lib/Console.pm	(revision 41118)
@@ -0,0 +1,145 @@
+# Copyright (C) 2009  Joshua Hoblitt
+
+package Console;
+
+use strict;
+use warnings;
+
+use vars qw( $VERSION );
+$VERSION = '0.01';
+
+use Config::YAML;
+use Params::Validate qw(:all);
+
+
+sub find_rcfile
+{
+    validate_pos(@_);
+
+    my $rcname = "." . __PACKAGE__ . "rc";
+    my $rcfile;
+    if (-e $rcname) {
+        $rcfile = $rcname;
+    } else {
+        $rcfile = "$ENV{HOME}/$rcname";
+    }
+    $rcfile = File::Spec->canonpath($rcfile);
+
+    return $rcfile;
+}
+
+sub read_rcfile
+{
+    validate_pos(@_, 1);
+
+    my $rcfile = shift;
+
+    return unless defined $rcfile;
+
+    if (!-f $rcfile) {
+        open(my $fh, '>', $rcfile) or die("can't open file: $!");
+        close($fh) or die("can't close file:$!");
+    }
+
+    return Config::YAML->new(
+            config => $rcfile,
+            output => $rcfile,
+    );
+}
+
+sub add_host
+{
+    my %p = validate(@_,
+        {
+            config      => { isa => 'Config::YAML', },
+            hostname    => { type => SCALAR, },
+            console     => { type => SCALAR, },
+         },
+    );
+
+    my $c = $p{config};
+
+    my $hosts = $c->get_hosts;
+    $hosts->{$p{hostname}} = { console => $p{console} };
+    $c->set_hosts($hosts);
+    $c->write;
+
+    return 1;
+}
+
+sub delete_host
+{
+    my %p = validate(@_,
+        {
+            config      => { isa => 'Config::YAML', },
+            hostname    => { type => SCALAR, },
+         },
+    );
+
+    my $c = $p{config};
+
+    my $hosts = $c->get_hosts;
+    delete $hosts->{$p{hostname}};
+    $c->set_hosts($hosts);
+    $c->write;
+
+    return 1;
+}
+
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+Console - rcfile management for the 'console' util
+
+=head1 SYNOPSIS
+
+    use Console;
+
+    my $rcfile = Console::find_rcfile;
+    my $c = Console::read_rcfile($rcfile);
+    Console::add_host(config => $c, console => $con, hostname => $h);
+    Console::delete_host(config => $c, hostname => $h);
+
+=head1 DESCRIPTION
+
+=head1 CREDITS
+
+Just me, myself, and I.
+
+=head1 SUPPORT
+
+Please contact the author directly via e-mail.
+
+=head1 AUTHOR
+
+Joshua Hoblitt <jhoblitt@cpan.org>
+
+=head1 COPYRIGHT
+
+Copyright (C) 2009  Joshua Hoblitt.  All rights reserved.
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA  02111-1307, USA.
+
+The full text of the license can be found in the LICENSE file included with
+this module, or in the L<perlgpl> Pod as supplied with Perl 5.8.1 and later.
+
+=head1 SEE ALSO
+
+L<Config::YAML>
Index: /branches/ccl_branches/ipponly-20191108/console/scripts/console
===================================================================
--- /branches/ccl_branches/ipponly-20191108/console/scripts/console	(revision 41118)
+++ /branches/ccl_branches/ipponly-20191108/console/scripts/console	(revision 41118)
@@ -0,0 +1,116 @@
+#!/usr/bin/env perl
+
+# Copyright (C) 2009  Joshua Hoblitt
+
+use strict;
+use warnings FATAL => qw( all );
+
+use vars qw( $VERSION );
+$VERSION = '0.01';
+
+use Config::YAML;
+use Console;
+
+use Getopt::Long qw( GetOptions :config auto_help auto_version );
+use Pod::Usage qw( pod2usage );
+
+my (
+    $user,
+    $verbose,
+);
+
+GetOptions(
+    'user|u=s'  => \$user,
+    'verbose|v' => \$verbose,
+) || pod2usage( 2 );
+
+my $hostname = shift @ARGV;
+die "a hostname is required" unless defined $hostname;
+
+$user ||= $ENV{USER};
+
+my $rcfile = Console::find_rcfile();
+my $c = Console::read_rcfile($rcfile);
+my $hosts = $c->get_hosts;
+
+my $console = $hosts->{$hostname}->{console};
+die "error with rcfile: $rcfile, console for $hostname is not defined"
+    unless defined $console;
+
+my $cmd = "ssh $user:$hostname\@$console";
+print $cmd, "\n" if $verbose;
+system($cmd);
+
+__END__
+
+=pod
+
+=head1 NAME
+
+console - access a remote serial console
+
+=head1 SYNOPSIS
+
+    console [--user <username>] [--verbose] <hostname>
+
+=head1 DESCRIPTION
+
+This program looks for mounted volumes, at a configurable interval, and records
+statistics about them into a database.
+
+=head1 OPTIONS
+
+=over 4
+
+=item * --user|-u
+
+The C<ssh> username to use when connecting to the console port.
+
+=item * --verbose|-v
+
+Turns on informational/debugging messages to be sent to the
+C<stderr>/C<stdout>.
+
+=back
+
+=head1 RCFILE
+
+This program will attempt to read an C<rcfile> from F<$HOME/.Consolerc>.
+
+=head1 CREDITS
+
+Just me, myself, and I.
+
+=head1 SUPPORT
+
+Please contact the author directly via e-mail.
+
+=head1 AUTHOR
+
+Joshua Hoblitt <jhoblitt@cpan.org>
+
+=head1 COPYRIGHT
+
+Copyright (C) 2009  Joshua Hoblitt.  All rights reserved.
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA  02111-1307, USA.
+
+The full text of the license can be found in the L<perlgpl> Pod as supplied
+with Perl 5.8.1 and later.
+
+=head1 SEE ALSO
+
+L<Config::YAML>, L<Console>, L<console-config>, L<console-ipp-defaults>
+
+=cut
Index: /branches/ccl_branches/ipponly-20191108/console/scripts/console-config
===================================================================
--- /branches/ccl_branches/ipponly-20191108/console/scripts/console-config	(revision 41118)
+++ /branches/ccl_branches/ipponly-20191108/console/scripts/console-config	(revision 41118)
@@ -0,0 +1,192 @@
+#!/usr/bin/env perl
+
+# Copyright (C) 2009  Joshua Hoblitt
+
+use strict;
+use warnings FATAL => qw( all );
+
+use vars qw( $VERSION );
+$VERSION = '0.01';
+
+use Console;
+
+use Getopt::Long qw( GetOptions :config auto_help auto_version );
+use Pod::Usage qw( pod2usage );
+
+my (
+    $add,
+    $console,
+    $delete,
+    $verbose,
+);
+
+GetOptions(
+    'add|a'         => \$add,
+    'console|c=s'   => \$console,
+    'delete|d'      => \$delete,
+    'verbose|v'     => \$verbose,
+) || pod2usage( 2 );
+
+my $hostname = shift @ARGV;
+pod2usage( -msg => "Unknown option: @ARGV", -exitval => 2 ) if @ARGV;
+
+my $rcfile = Console::find_rcfile();
+my $c = Console::read_rcfile($rcfile);
+my $hosts = $c->get_hosts;
+
+if (defined $add) {
+    go_add();
+    exit();
+}
+
+if (defined $delete) {
+    go_delete();
+    exit();
+}
+
+# default
+go_list();
+exit();
+
+
+sub go_list
+{
+    pod2usage(
+        -msg        => "--console is meaningless in this context",
+        -exitval    => 2,
+    ) if defined $console;
+
+    if (defined $hostname) {
+        die "unknown hostname: $hostname" unless exists $hosts->{$hostname}->{console};
+        printf("%-20s %s\n", "# hostname", "console");
+        printf("%-20s %s\n", $hostname, $hosts->{$hostname}->{console});
+    } else {
+        printf("%-20s %s\n", "# hostname", "console");
+        foreach my $name (keys %$hosts) {
+            printf("%-20s %s\n", $name, $hosts->{$name}->{console});
+        }
+    }
+}
+
+sub go_add
+{
+    pod2usage(
+        -msg        =>"--console option is required under --add",
+        -exitval    => 2,
+    ) unless defined $console;
+    pod2usage(
+        -msg        => "<hostname> option is required under --add",
+        -exitval    => 2,
+    ) unless defined $hostname;
+    pod2usage(
+        -msg        => "--add and --delete are incompatible options",
+        -exitval    => 2,
+    ) if defined $delete;
+
+    Console::add_host(config => $c, hostname => $hostname, console => $console);
+}
+
+sub go_delete
+{
+    pod2uage(
+        -msg        => "--console and --delete are incompatible options",
+        -exitval    => 2,
+    ) if defined $console;
+    pod2uage(
+        -msg        => "<hostname> option is required under --delete",
+        -exitval    => 2,
+    ) unless defined $hostname;
+    pod2uage(
+        -msg        => "--add and --delete are incompatible options",
+        -exitval    => 2,
+    ) if defined $add;
+
+    Console::delete_host(config => $c, hostname => $hostname);
+}
+
+__END__
+
+=pod
+
+=head1 NAME
+
+console-config - configure the console util
+
+=head1 SYNOPSIS
+
+    console [--verbose] [<hostname>]
+
+    or
+
+    console [--verbose] --add --console <console hostname> <hostname>
+
+    or
+
+    console [--verbose] --delete <hostname>
+
+=head1 DESCRIPTION
+
+This program is used to configure the ".rc" file for the console util.
+
+=head1 OPTIONS
+
+=over 4
+
+=item * --add|-a
+
+Flag used to add a entry to the ".rc" file.  Requires both C<<hostname>> and
+C<--console>.
+
+=item * --console|-c <console hostname>
+
+The name of the console to connect to for serial console access to
+C<<hostname>>.
+
+=item * --verbose|-r
+
+Turns on informational/debugging messages to be sent to the
+C<stderr>/C<stdout>.
+
+=back
+
+=head1 RCFILE
+
+This program will attempt to read an C<rcfile> from F<$HOME/.Consolerc>.
+
+=head1 CREDITS
+
+Just me, myself, and I.
+
+=head1 SUPPORT
+
+Please contact the author directly via e-mail.
+
+=head1 AUTHOR
+
+Joshua Hoblitt <jhoblitt@cpan.org>
+
+=head1 COPYRIGHT
+
+Copyright (C) 2009  Joshua Hoblitt.  All rights reserved.
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA  02111-1307, USA.
+
+The full text of the license can be found in the L<perlgpl> Pod as supplied
+with Perl 5.8.1 and later.
+
+=head1 SEE ALSO
+
+L<Config::YAML>, L<Console>, L<console>, L<console-ipp-defaults>
+
+=cut
Index: /branches/ccl_branches/ipponly-20191108/console/scripts/console-ipp-defaults
===================================================================
--- /branches/ccl_branches/ipponly-20191108/console/scripts/console-ipp-defaults	(revision 41118)
+++ /branches/ccl_branches/ipponly-20191108/console/scripts/console-ipp-defaults	(revision 41118)
@@ -0,0 +1,184 @@
+#!/usr/bin/env perl
+
+# Copyright (C) 2009  Joshua Hoblitt
+
+use strict;
+use warnings FATAL => qw( all );
+
+use vars qw( $VERSION );
+$VERSION = '0.01';
+
+use Console;
+
+use Getopt::Long qw( GetOptions :config auto_help auto_version );
+use Pod::Usage qw( pod2usage );
+
+my ($verbose);
+
+GetOptions(
+    'verbose|v'     => \$verbose,
+) || pod2usage( 2 );
+pod2usage( -msg => "Unknown option: @ARGV", -exitval => 2 ) if @ARGV;
+
+my $rcfile = Console::find_rcfile();
+my $c = Console::read_rcfile($rcfile);
+my $hosts = $c->get_hosts;
+
+go_add();
+
+sub go_add
+{
+    printf("%-20s %s\n", "# adding: hostname", "console") if $verbose;
+
+    foreach my $row (<DATA>) {
+        last if $row =~ qr/^__END__$/;
+        my ($hostname, $console) = split(/\s+/, $row);
+
+        printf("%-20s %s\n", $hostname, $console) if $verbose;
+
+        Console::add_host(
+            config      => $c,
+            hostname    => $hostname,
+            console     => $console
+        );
+    }
+}
+
+__DATA__
+ipp004  ippcon.ifa.hawaii.edu
+ipp005  ippcon.ifa.hawaii.edu
+ipp006  ippcon.ifa.hawaii.edu
+ipp007  ippcon.ifa.hawaii.edu
+ipp008  ippcon.ifa.hawaii.edu
+ipp009  ippcon.ifa.hawaii.edu
+ipp010  ippcon.ifa.hawaii.edu
+ipp011  ippcon.ifa.hawaii.edu
+ipp012  ippcon.ifa.hawaii.edu
+ipp013  ippcon.ifa.hawaii.edu
+ipp014  ippcon.ifa.hawaii.edu
+ipp015  ippcon.ifa.hawaii.edu
+ipp016  ippcon.ifa.hawaii.edu
+ipp017  ippcon.ifa.hawaii.edu
+ipp018  ippcon.ifa.hawaii.edu
+ipp019  ippcon.ifa.hawaii.edu
+ipp020  ippcon.ifa.hawaii.edu
+ipp021  ippcon.ifa.hawaii.edu
+ipp022  ippcon.ifa.hawaii.edu
+ipp023  ippcon.ifa.hawaii.edu
+ipp024  ippcon.ifa.hawaii.edu
+ipp025  ippcon.ifa.hawaii.edu
+ipp026  ippcon.ifa.hawaii.edu
+ipp027  ippcon.ifa.hawaii.edu
+ipp028  ippcon.ifa.hawaii.edu
+ipp029  ippcon.ifa.hawaii.edu
+ipp030  ippcon.ifa.hawaii.edu
+ipp031  ippcon.ifa.hawaii.edu
+ipp032  ippcon.ifa.hawaii.edu
+ipp033  ippcon.ifa.hawaii.edu
+ipp034  ippcon.ifa.hawaii.edu
+ipp035  ippcon.ifa.hawaii.edu
+ipp036  ippcon.ifa.hawaii.edu
+ipp037  ippcon.ifa.hawaii.edu
+ipp038  cab5con.ipp.ifa.hawaii.edu
+ipp039  cab5con.ipp.ifa.hawaii.edu
+ipp040  cab5con.ipp.ifa.hawaii.edu
+ipp041  cab5con.ipp.ifa.hawaii.edu
+ipp042  cab5con.ipp.ifa.hawaii.edu
+ipp043  cab5con.ipp.ifa.hawaii.edu
+ippdb00 cab5con.ipp.ifa.hawaii.edu
+ippdb01 cab5con.ipp.ifa.hawaii.edu
+ippdb02 cab5con.ipp.ifa.hawaii.edu
+ipp044  cab6con.ipp.ifa.hawaii.edu
+ipp045  cab6con.ipp.ifa.hawaii.edu
+ipp046  cab6con.ipp.ifa.hawaii.edu
+ipp047  cab6con.ipp.ifa.hawaii.edu
+ipp048  cab6con.ipp.ifa.hawaii.edu
+ippc00  cab6con.ipp.ifa.hawaii.edu
+ippc01  cab6con.ipp.ifa.hawaii.edu
+ippc02  cab6con.ipp.ifa.hawaii.edu
+ippc03  cab6con.ipp.ifa.hawaii.edu
+ippc04  cab6con.ipp.ifa.hawaii.edu
+ippc05  cab6con.ipp.ifa.hawaii.edu
+ippc06  cab6con.ipp.ifa.hawaii.edu
+ippc07  cab6con.ipp.ifa.hawaii.edu
+ippc08  cab6con.ipp.ifa.hawaii.edu
+ippc09  cab6con.ipp.ifa.hawaii.edu
+ipp049  cab7con.ipp.ifa.hawaii.edu
+ipp050  cab7con.ipp.ifa.hawaii.edu
+ipp051  cab7con.ipp.ifa.hawaii.edu
+ipp052  cab7con.ipp.ifa.hawaii.edu
+ipp053  cab7con.ipp.ifa.hawaii.edu
+ippc10  cab7con.ipp.ifa.hawaii.edu
+ippc11  cab7con.ipp.ifa.hawaii.edu
+ippc12  cab7con.ipp.ifa.hawaii.edu
+ippc13  cab7con.ipp.ifa.hawaii.edu
+ippc14  cab7con.ipp.ifa.hawaii.edu
+ippc15  cab7con.ipp.ifa.hawaii.edu
+ippc16  cab7con.ipp.ifa.hawaii.edu
+ippc17  cab7con.ipp.ifa.hawaii.edu
+ippc18  cab7con.ipp.ifa.hawaii.edu
+ippc19  cab7con.ipp.ifa.hawaii.edu
+__END__
+
+=pod
+
+=head1 NAME
+
+console-ipp-defaults - install default ipp hosts into the console rcfile
+
+=head1 SYNOPSIS
+
+    console-ipp-defaults [--verbose]
+
+=head1 DESCRIPTION
+
+This program is used to configure the ".rc" file for the console util.
+
+=head1 OPTIONS
+
+=over 4
+
+=item * --verbose|-v
+
+Turns on informational/debugging messages to be sent to the
+C<stderr>/C<stdout>.
+
+=back
+
+=head1 CREDITS
+
+Just me, myself, and I.
+
+=head1 SUPPORT
+
+Please contact the author directly via e-mail.
+
+=head1 AUTHOR
+
+Joshua Hoblitt <jhoblitt@cpan.org>
+
+=head1 COPYRIGHT
+
+Copyright (C) 2009  Joshua Hoblitt.  All rights reserved.
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA  02111-1307, USA.
+
+The full text of the license can be found in the L<perlgpl> Pod as supplied
+with Perl 5.8.1 and later.
+
+=head1 SEE ALSO
+
+L<Config::YAML>, L<Console>, L<console>, L<console-config>
+
+=cut
Index: /branches/ccl_branches/ipponly-20191108/console/t/00_distribution.t
===================================================================
--- /branches/ccl_branches/ipponly-20191108/console/t/00_distribution.t	(revision 41118)
+++ /branches/ccl_branches/ipponly-20191108/console/t/00_distribution.t	(revision 41118)
@@ -0,0 +1,25 @@
+#!/usr/bin/env perl
+
+# Copyright (C) 2005  Joshua Hoblitt
+#
+# $Id: 00_distribution.t,v 1.2 2006-03-16 22:04:38 jhoblitt Exp $
+
+use strict;
+use warnings FATAL => qw( all );
+
+use lib qw( ./lib ./t );
+
+use Test::More;
+
+# example taken from Test::Distribution Pod
+
+BEGIN {
+    eval {
+        require Test::Distribution;
+    };
+    if($@) {
+        plan skip_all => 'Test::Distribution not installed';
+    } else {
+        import Test::Distribution; # not => qw( podcover );
+    }
+}
Index: /branches/ccl_branches/ipponly-20191108/console/t/01_load.t
===================================================================
--- /branches/ccl_branches/ipponly-20191108/console/t/01_load.t	(revision 41118)
+++ /branches/ccl_branches/ipponly-20191108/console/t/01_load.t	(revision 41118)
@@ -0,0 +1,12 @@
+#!/usr/bin/perl
+
+# Copryight (C) 2009  Joshua Hoblitt
+
+use strict;
+use warnings FATAL => qw( all );
+
+use lib qw( ./t ./lib );
+
+use Test::More tests => 1;
+
+BEGIN { use_ok( 'Console' ); }
