Squashed commit of the following: commit 25bc026dc5e0177cd3aa81c11cdace091eb68f36 Author: Oliver Gorwits <oliver@cpan.org> Date: Mon Jun 17 08:16:56 2013 +0100 bump version for new release commit d4042f6e8db42c7a85df4dcf9690fec72ad2db69 Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 16 18:27:52 2013 +0100 Job Queue page play/pause/refresh controls commit b6c9152516d7800409b7a73c5d0cdce6dd405492 Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 16 17:50:06 2013 +0100 limit size of job queue table commit ac9e5feb8b774071fcf4423dd862dced74dee9e6 Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 16 17:47:55 2013 +0100 update bugs link commit 9c0fb0e9aedc6297f4462c3cf88343f6d0df40b6 Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 16 17:41:29 2013 +0100 update MANIFEST commit 7aaa2fff91ed2b1839bdbb79081d90ad3e144f47 Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 16 17:40:35 2013 +0100 Fix Plack middleware config for Expiry commit 313e2cf014cf0da7cf85074e390ad394b28bf42d Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 16 17:23:00 2013 +0100 Support for delegated authentication with REMOTE_USER and X-REMOTE_USER commit 85e21f2bf296c4a5ca6b5afb5091694e56e3031f Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 16 14:24:08 2013 +0100 Add tooltip showing the job queue item logged status message commit 9b14f53ebed51eb46ea278807cfe8a2fbd28743c Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 16 13:43:26 2013 +0100 Increase default frequency of job queue polling to 2 seconds commit 6ba46818d8ab2100c652c8eb8e98bc6f5a54e273 Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 16 12:57:43 2013 +0100 workaround for https://github.com/PerlDancer/Dancer/issues/935 commit c7a2d8a9d45716959bedbbb8db4cdd82a5950642 Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 16 11:54:18 2013 +0100 Fix hyperlinks when running behind reverse proxy on custom path commit 0620efa404bc25cb0a9ada5aa6f1b092d5c4d482 Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 15 18:31:19 2013 +0100 update deploy docs commit 857b1c7aa0fe832f8948349eda5211eb38ba3099 Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 15 18:16:50 2013 +0100 add note about compiler dependency commit 02a2ad6b2c52db9fbc1e24bc8888f658dc7084ad Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 15 17:44:29 2013 +0100 sort vlans, macs, ips in device port view commit 097bad77310728a98b261a2cfca4de7ab50be94b Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 15 16:32:20 2013 +0100 hint when calling web in fg without starman commit 6425d89ddb2b56129c610482134482d8f9455d40 Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 15 15:53:26 2013 +0100 macwalk and arpwalk refactored commit d527b9d05addc82fb38c84f6fea1aa5818fc68d5 Author: Oliver Gorwits <oliver@cpan.org> Date: Thu Jun 13 22:27:34 2013 +0100 implement is_macsuckable and is_arpnipable commit 7af10ed313e25f5d99a22b53ba438225c2259069 Author: Oliver Gorwits <oliver@cpan.org> Date: Thu Jun 13 22:17:39 2013 +0100 version bump commit 8ace3bf8fa48cf3e14bdf86fad5a4862aad50a4b Author: Oliver Gorwits <oliver@cpan.org> Date: Thu Jun 13 22:14:05 2013 +0100 tidy up user menu commit e6eef605c248471dbfe7ec62cd04d73d653523ca Author: Oliver Gorwits <oliver@cpan.org> Date: Thu Jun 13 22:02:52 2013 +0100 Add discoverall, macwalk, arpwalk items to the Admin Tasks menu commit 2631fabd1eccd8a3971e4762eebe57f406623bee Author: Oliver Gorwits <oliver@cpan.org> Date: Thu Jun 13 21:21:50 2013 +0100 remove length() which only became sane in 5.12 commit a7b7169070a58685cacde26a3b6d462e74be9928 Author: Oliver Gorwits <oliver@cpan.org> Date: Thu Jun 13 19:07:56 2013 +0100 Use DBIx::Class new collapsed query support when we can commit 77cddab8ba7033ccb1ecae257bafa4eef8f99f47 Author: Oliver Gorwits <oliver@cpan.org> Date: Wed Jun 12 17:26:47 2013 +0100 Database config simplified to only four essential settings commit 6ed0802bf2ab0fd898ce6945451b8ca6566ae551 Author: Oliver Gorwits <oliver@cpan.org> Date: Wed Jun 12 13:03:20 2013 +0100 Ask to set up guest user for Admin/Port Control rights in deploy script
		
			
				
	
	
		
			205 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			205 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env perl
 | |
| 
 | |
| our $home;
 | |
| 
 | |
| BEGIN {
 | |
|   # try really hard to find a localenv if one isn't already in place.
 | |
|   $home = ($ENV{NETDISCO_HOME} || $ENV{HOME});
 | |
| 
 | |
|   if (!exists $ENV{PERL_LOCAL_LIB_ROOT}) {
 | |
|       use File::Spec;
 | |
|       my $localenv = File::Spec->catfile($FindBin::RealBin, 'localenv');
 | |
|       exec($localenv, $0, @ARGV) if -f $localenv;
 | |
|       $localenv = File::Spec->catfile($home, 'perl5', 'bin', 'localenv');
 | |
|       exec($localenv, $0, @ARGV) if -f $localenv;
 | |
|       die "Sorry, can't find libs required for App::Netdisco.\n";
 | |
|   }
 | |
| }
 | |
| 
 | |
| use FindBin;
 | |
| FindBin::again();
 | |
| use Path::Class;
 | |
| 
 | |
| BEGIN {
 | |
|   # stuff useful locations into @INC and $PATH
 | |
|   my $location = $FindBin::RealBin;
 | |
| 
 | |
|   unshift @INC,
 | |
|     dir($location)->parent->subdir('lib')->stringify,
 | |
|     dir($location, 'lib')->stringify;
 | |
| 
 | |
|   use Config;
 | |
|   $ENV{PATH} = $location . $Config{path_sep} . $ENV{PATH};
 | |
| }
 | |
| 
 | |
| use App::Netdisco;
 | |
| use Dancer ':script';
 | |
| use Dancer::Plugin::DBIC 'schema';
 | |
| 
 | |
| info "App::Netdisco version $App::Netdisco::VERSION loaded.";
 | |
| 
 | |
| use 5.010_000;
 | |
| use Term::UI;
 | |
| use Term::ReadLine;
 | |
| 
 | |
| use Archive::Extract;
 | |
| $Archive::Extract::PREFER_BIN = 1;
 | |
| use HTTP::Tiny;
 | |
| use Try::Tiny;
 | |
| 
 | |
| =head1 NAME
 | |
| 
 | |
| netdisco-deploy - Database, OUI and MIB deployment for Netdisco
 | |
| 
 | |
| =head1 USAGE
 | |
| 
 | |
| This script deploys the Netdisco database schema, OUI data, and MIBs. Each of
 | |
| these is an optional service which the user is asked to confirm.
 | |
| 
 | |
| Pre-existing requirements are that there be a database table created and a
 | |
| user with rights to create tables in that database. Both the table and user
 | |
| name must match those configured in your environment YAML file (default
 | |
| C<~/environments/deployment.yml>).
 | |
| 
 | |
| This script will download the latest MAC address vendor prefix data from the
 | |
| Internet, and update the OUI table in the database. Hence Internet access is
 | |
| required to run the script.
 | |
| 
 | |
| Similarly the latest Netdisco MIB bundle is also downloaded, placed into the
 | |
| user's home directory (or C<$ENV{NETDISCO_HOME}>), and Netdisco reconfigured
 | |
| for its use.
 | |
| 
 | |
| =cut
 | |
| 
 | |
| say 'This is the Netdisco II deployment script.';
 | |
| say '';
 | |
| say 'Before we continue, the following prerequisites must be in place:';
 | |
| say ' * Database added to PostgreSQL for Netdisco';
 | |
| say ' * User added to PostgreSQL with rights to the Netdisco Database';
 | |
| say ' * "~/environments/deployment.yml" file configured with Database dsn/user/pass';
 | |
| say ' * A full backup of any existing Netdisco database data';
 | |
| say ' * Internet access (for OUIs and MIBs)';
 | |
| say '';
 | |
| say 'You will be asked to confirm all changes to your system.';
 | |
| say '';
 | |
| 
 | |
| my $term = Term::ReadLine->new('netdisco');
 | |
| my $bool = $term->ask_yn(
 | |
|   prompt => 'So, is all the above in place?', default => 'n',
 | |
| );
 | |
| 
 | |
| exit(0) unless $bool;
 | |
| 
 | |
| say '';
 | |
| $bool = $term->ask_yn(
 | |
|   prompt => 'Would you like to deploy or upgrade your database schema?', default => 'n',
 | |
| );
 | |
| deploy_db() if $bool;
 | |
| 
 | |
| my $users = schema('netdisco')->resultset('User');
 | |
| if ($users->count == 0 and setting('no_auth')) {
 | |
|     say '';
 | |
|     $bool = $term->ask_yn(
 | |
|       prompt => 'Would you like the default web user to have Admin rights (discover, etc)?',
 | |
|       default => 'n',
 | |
|     );
 | |
| 
 | |
|     if ($bool) {
 | |
|         $users->create({
 | |
|           username => 'guest',
 | |
|           admin => 'true',
 | |
|           port_control => 'true',
 | |
|         });
 | |
|     }
 | |
|     else {
 | |
|         say '';
 | |
|         $bool = $term->ask_yn(
 | |
|           prompt => 'Would you like the default web user to have Port Control rights?',
 | |
|           default => 'n',
 | |
|         );
 | |
|         if ($bool) {
 | |
|             $users->create({
 | |
|               username => 'guest',
 | |
|               port_control => 'true',
 | |
|             });
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| say '';
 | |
| $bool = $term->ask_yn(
 | |
|   prompt => 'Download and update vendor MAC prefixes (OUI data)?', default => 'n',
 | |
| );
 | |
| deploy_oui() if $bool;
 | |
| 
 | |
| say '';
 | |
| my $default_mibhome = dir($home, 'netdisco-mibs');
 | |
| if (setting('mibhome') and setting('mibhome') ne $default_mibhome) {
 | |
|   my $mibhome = $term->get_reply(
 | |
|     print_me => "MIB home options:",
 | |
|     prompt   => "Download and update MIB files to...?",
 | |
|     choices  => [setting('mibhome'), $default_mibhome, 'Skip this.'],
 | |
|     default  => 'Skip this.',
 | |
|   );
 | |
|   deploy_mibs($mibhome) if $mibhome and $mibhome ne 'Skip this.';
 | |
| }
 | |
| else {
 | |
|   $bool = $term->ask_yn(
 | |
|     prompt => "Download and update MIB files?", default => 'n',
 | |
|   );
 | |
|   deploy_mibs($default_mibhome) if $bool;
 | |
| }
 | |
| 
 | |
| sub deploy_db {
 | |
|   system 'netdisco-db-deploy';
 | |
|   say 'DB schema update complete.';
 | |
| }
 | |
| 
 | |
| sub deploy_oui {
 | |
|   my $schema = schema('netdisco');
 | |
|   $schema->storage->disconnect;
 | |
| 
 | |
|   my $url = 'http://standards.ieee.org/develop/regauth/oui/oui.txt';
 | |
|   my $resp = HTTP::Tiny->new->get($url);
 | |
|   my %data = ();
 | |
| 
 | |
|   if ($resp->{success}) {
 | |
|       foreach my $line (split /\n/, $resp->{content}) {
 | |
|           if ($line =~ m/^\s*(.{2}-.{2}-.{2})\s+\(hex\)\s+(.*)\s*$/i) {
 | |
|               my ($oui, $company) = ($1, $2);
 | |
|               $oui =~ s/-/:/g;
 | |
|               $data{lc($oui)} = $company;
 | |
|           }
 | |
|       }
 | |
| 
 | |
|       if ((scalar keys %data) > 15_000) {
 | |
|           $schema->txn_do(sub{
 | |
|             $schema->resultset('Oui')->delete;
 | |
|             $schema->resultset('Oui')->populate([
 | |
|               map {{oui => $_, company => $data{$_}}} keys %data
 | |
|             ]);
 | |
|           });
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   say 'OUI update complete.';
 | |
| }
 | |
| 
 | |
| sub deploy_mibs {
 | |
|   my $mibhome = dir(shift);
 | |
| 
 | |
|   my $url = 'http://downloads.sourceforge.net/project/netdisco/netdisco-mibs/latest-snapshot/netdisco-mibs-snapshot.tar.gz';
 | |
|   my $file = file($home, 'netdisco-mibs-snapshot.tar.gz');
 | |
|   my $resp = HTTP::Tiny->new->mirror($url, $file);
 | |
| 
 | |
|   if ($resp->{success}) {
 | |
|       my $ae = Archive::Extract->new(archive => $file, type => 'tgz');
 | |
|       $ae->extract(to => $mibhome->parent->stringify);
 | |
|       unlink $file;
 | |
|   }
 | |
| 
 | |
|   say 'MIBs update complete.';
 | |
| }
 | |
| 
 | |
| exit 0;
 |